From 7020c4ba18fce7304a23054bcd40a0dc4180782c Mon Sep 17 00:00:00 2001 From: Filip Gralinski Date: Mon, 28 Mar 2022 06:58:35 +0200 Subject: [PATCH] Up --- wyk/05_Wygladzanie.org | 87 ++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 24 deletions(-) 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: