diff --git a/wyk/05_Wygladzanie.org b/wyk/05_Wygladzanie.org
index f30668a..dbbfd75 100644
--- a/wyk/05_Wygladzanie.org
+++ b/wyk/05_Wygladzanie.org
@@ -184,7 +184,7 @@ Stwórzmy generator, który będzie wczytywał słowa z pliku, dodatkowo:
line = line.rstrip()
yield ''
for m in re.finditer(r'[\p{L}0-9\*]+|\p{P}+', line):
- yield m.group(0)
+ yield m.group(0).lower()
yield ''
list(islice(get_words_from_file('opensubtitlesA.pl.txt'), 0, 100))
@@ -192,7 +192,7 @@ Stwórzmy generator, który będzie wczytywał słowa z pliku, dodatkowo:
#+RESULTS:
:results:
-['', 'Lubisz', 'curry', ',', 'prawda', '?', '', '', 'Nałożę', 'ci', 'więcej', '.', '', '', 'Hey', '!', '', '', 'Smakuje', 'ci', '?', '', '', 'Hey', ',', 'brzydalu', '.', '', '', 'Spójrz', 'na', 'nią', '.', '', '', '-', 'Wariatka', '.', '', '', '-', 'Zadałam', 'ci', 'pytanie', '!', '', '', 'No', ',', 'tak', 'lepiej', '!', '', '', '-', 'Wygląda', 'dobrze', '!', '', '', '-', 'Tak', 'lepiej', '!', '', '', 'Pasuje', 'jej', '.', '', '', '-', 'Hey', '.', '', '', '-', 'Co', 'do', '...?', '', '', 'Co', 'do', 'cholery', 'robisz', '?', '', '', 'Zejdź', 'mi', 'z', 'oczu', ',', 'zdziro', '.', '', '', 'Przestań', 'dokuczać']
+['', 'lubisz', 'curry', ',', 'prawda', '?', '', '', 'nałożę', 'ci', 'więcej', '.', '', '', 'hey', '!', '', '', 'smakuje', 'ci', '?', '', '', 'hey', ',', 'brzydalu', '.', '', '', 'spójrz', 'na', 'nią', '.', '', '', '-', 'wariatka', '.', '', '', '-', 'zadałam', 'ci', 'pytanie', '!', '', '', 'no', ',', 'tak', 'lepiej', '!', '', '', '-', 'wygląda', 'dobrze', '!', '', '', '-', 'tak', 'lepiej', '!', '', '', 'pasuje', 'jej', '.', '', '', '-', 'hey', '.', '', '', '-', 'co', 'do', '...?', '', '', 'co', 'do', 'cholery', 'robisz', '?', '', '', 'zejdź', 'mi', 'z', 'oczu', ',', 'zdziro', '.', '', '', 'przestań', 'dokuczać']
:end:
**** Empiryczne wyniki
@@ -216,7 +216,7 @@ counterA['taki']
#+RESULTS:
:results:
-42330
+48113
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
@@ -272,7 +272,7 @@ Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali gdyby użyć wygładz
#+RESULTS:
:results:
-1181065
+926594
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
@@ -284,16 +284,16 @@ Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali gdyby użyć wygładz
#+RESULTS:
:results:
liczba tokenów średnia częstość w części B estymacje +1 estymacje +0.01
-0 494664 1.805294 0.991839 0.009999
-1 528998 0.591116 1.983678 1.009917
-2 154689 1.574443 2.975517 2.009835
-3 81398 2.512285 3.967356 3.009752
-4 52899 3.502240 4.959196 4.009670
-5 37917 4.433763 5.951035 5.009588
-6 28921 5.280834 6.942874 6.009506
-7 23267 6.209438 7.934713 7.009423
-8 19014 7.265909 8.926552 8.009341
-9 15849 8.193135 9.918391 9.009259
+0 388334 1.900495 0.993586 0.009999
+1 403870 0.592770 1.987172 1.009935
+2 117529 1.565809 2.980759 2.009870
+3 62800 2.514268 3.974345 3.009806
+4 40856 3.504944 4.967931 4.009741
+5 29443 4.454098 5.961517 5.009677
+6 22709 5.232023 6.955103 6.009612
+7 18255 6.157929 7.948689 7.009548
+8 15076 7.308039 8.942276 8.009483
+9 12859 8.045649 9.935862 9.009418
:end:
*** Wygładzanie Gooda-Turinga
@@ -320,16 +320,16 @@ $$p(w) = \frac{\# w + 1}{|C|}\frac{N_{r+1}}{N_r}.$$
#+RESULTS:
:results:
liczba tokenów średnia częstość w części B estymacje +1 Good-Turing
-0 494664 1.805294 0.991839 1.069409
-1 528998 0.591116 1.983678 0.584838
-2 154689 1.574443 2.975517 1.578613
-3 81398 2.512285 3.967356 2.599523
-4 52899 3.502240 4.959196 3.583905
-5 37917 4.433763 5.951035 4.576470
-6 28921 5.280834 6.942874 5.631513
-7 23267 6.209438 7.934713 6.537671
-8 19014 7.265909 8.926552 7.501893
-9 15849 8.193135 9.918391 8.670579
+0 388334 1.900495 0.993586 1.040007
+1 403870 0.592770 1.987172 0.582014
+2 117529 1.565809 2.980759 1.603009
+3 62800 2.514268 3.974345 2.602293
+4 40856 3.504944 4.967931 3.603265
+5 29443 4.454098 5.961517 4.627721
+6 22709 5.232023 6.955103 5.627064
+7 18255 6.157929 7.948689 6.606847
+8 15076 7.308039 8.942276 7.676506
+9 12859 8.045649 9.935862 8.557431
:end:
Wygładzanie metodą Gooda-Turinga, mimo prostoty, daje wyniki zaskakująco zbliżone do rzeczywistych.
@@ -414,3 +414,42 @@ $$N_{1+}(\bullet w) = |\{w_j : \# w_jw > 0\}|$$.
W metodzie Knesera-Neya w następujący sposób estymujemy prawdopodobieństwo unigramu:
$$P(w) = \frac{N_{1+}(\bullet w)}{\sum_{w_j} N_{1+}(\bullet w_j)}.$$
+
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
+ def ngrams(iter, size):
+ ngram = []
+ for item in iter:
+ ngram.append(item)
+ if len(ngram) == size:
+ yield tuple(ngram)
+ ngram = ngram[1:]
+
+ list(ngrams("kotek", 3))
+#+END_SRC
+
+#+RESULTS:
+:results:
+[('k', 'o', 't'), ('o', 't', 'e'), ('t', 'e', 'k')]
+:end:
+
+
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
+ histories = { }
+ for prev_token, token in ngrams(get_words_from_file('opensubtitlesA.pl.txt'), 2):
+ histories.setdefault(token, set())
+ histories[token].add(prev_token)
+#+END_SRC
+
+#+RESULTS:
+:results:
+:end:
+
+#+BEGIN_SRC python :session mysession :exports both :results raw drawer
+ len(histories['jork'])
+ len(histories['zielony'])
+ histories['jork']
+#+END_SRC
+
+#+RESULTS:
+:results:
+:end: