Fix blank word to remove.
This commit is contained in:
parent
9725eb4b41
commit
addff02331
34
run.py
34
run.py
@ -26,6 +26,8 @@ def set_trigram_count(first_word, second_word, third_word, trigrams):
|
|||||||
trigrams[f"{first_word}_{second_word}_{third_word}"] += 1
|
trigrams[f"{first_word}_{second_word}_{third_word}"] += 1
|
||||||
|
|
||||||
def load_train():
|
def load_train():
|
||||||
|
trigrams = {}
|
||||||
|
bigrams = {}
|
||||||
with lzma.open('train/in.tsv.xz', mode='rt') as file:
|
with lzma.open('train/in.tsv.xz', mode='rt') as file:
|
||||||
wordNo = 1
|
wordNo = 1
|
||||||
word_bi_last = ""
|
word_bi_last = ""
|
||||||
@ -48,9 +50,9 @@ def load_train():
|
|||||||
word_bi_last = word
|
word_bi_last = word
|
||||||
|
|
||||||
def predict(search_for_words):
|
def predict(search_for_words):
|
||||||
trigrams_complete = {}
|
trigrams_complete = {} # Tablica trigramów szukanych słów które wystąpiły w tekście z dokładnie tymi samymi szukanymi słowami w tej samej kolejności
|
||||||
bigrams_complete = {}
|
bigrams_complete = {} # Tablica bigramów szukanych słów które wystąpiły w tekście z dokładnie tymi samymi szukanymi słowami w tej samej kolejności
|
||||||
search_for_words_complete = [] # Tablica szukanych słów które wystąpiły w tekście z dokładnie tymi samymi szukanymi słowami w tej samej kolejności
|
# search_for_words_complete = [] # Tablica szukanych słów które wystąpiły w tekście z dokładnie tymi samymi szukanymi słowami w tej samej kolejności
|
||||||
# Szukanie bigramów i trigramów które zawierają szukaną lukę dla słowa z tablicy search_for_words.
|
# Szukanie bigramów i trigramów które zawierają szukaną lukę dla słowa z tablicy search_for_words.
|
||||||
# Jeżeli kolejność słów się zgadza liczona jest ilość wystąpień takich bigramów i trigramów z tymi słowami.
|
# Jeżeli kolejność słów się zgadza liczona jest ilość wystąpień takich bigramów i trigramów z tymi słowami.
|
||||||
# Przy czym dla trigramów sprawdzane są tylk odwa ostatnie słowa bo to logiczne. I potem sprawdzane jest który trigram dla danych słów najczęściej występuje.
|
# Przy czym dla trigramów sprawdzane są tylk odwa ostatnie słowa bo to logiczne. I potem sprawdzane jest który trigram dla danych słów najczęściej występuje.
|
||||||
@ -62,11 +64,12 @@ def predict(search_for_words):
|
|||||||
words = ["", "", ""]
|
words = ["", "", ""]
|
||||||
for i_, word in enumerate(get_words(file)): # lecimy po kolei słowo po słowie. Słow ma usunięte wszelkie interpunkcja
|
for i_, word in enumerate(get_words(file)): # lecimy po kolei słowo po słowie. Słow ma usunięte wszelkie interpunkcja
|
||||||
word = word.lower() # normalizowanie na małe znaki
|
word = word.lower() # normalizowanie na małe znaki
|
||||||
|
if not word:
|
||||||
|
continue
|
||||||
if len(word_bi_last) > 0: # Mamy już pierwsze słow zbuforowane (szczególnie potrzebne dla pierwszego przebiegu) możemy więc zapisać
|
if len(word_bi_last) > 0: # Mamy już pierwsze słow zbuforowane (szczególnie potrzebne dla pierwszego przebiegu) możemy więc zapisać
|
||||||
for search_for_word in search_for_words:
|
for search_for_word in search_for_words:
|
||||||
search_for_word_s = search_for_word.split("_")
|
search_for_word_s = search_for_word.split("_")
|
||||||
if search_for_word_s[0] == word_bi_last and search_for_word_s[1] == word: # Jeżeli szukane słowa tworzą bigram występujący w tekście trenującym to zwiększamy liczbę jego wystąpień
|
if search_for_word_s[0] == word_bi_last and search_for_word_s[1] == word: # Jeżeli szukane słowa tworzą bigram występujący w tekście trenującym to zwiększamy liczbę jego wystąpień
|
||||||
search_for_words_complete.append(search_for_word)
|
|
||||||
set_bigram_count(word_bi_last, word, bigrams_complete)
|
set_bigram_count(word_bi_last, word, bigrams_complete)
|
||||||
if i_ == 1: # If potrzebny aby zbuforować min 3 wyrazy dla trigramu w początkowej fazie przebiegu pętli.
|
if i_ == 1: # If potrzebny aby zbuforować min 3 wyrazy dla trigramu w początkowej fazie przebiegu pętli.
|
||||||
words[0]=word_bi_last
|
words[0]=word_bi_last
|
||||||
@ -83,7 +86,7 @@ def predict(search_for_words):
|
|||||||
words[2]=word
|
words[2]=word
|
||||||
for search_for_word in search_for_words:
|
for search_for_word in search_for_words:
|
||||||
search_for_word = search_for_word.split("_")
|
search_for_word = search_for_word.split("_")
|
||||||
if search_for_word[0] == words[1] and search_for_word[1] == words[2]:
|
if search_for_word[0] == words[1] and search_for_word[1] == words[2]:
|
||||||
set_trigram_count(words[0], words[1], words[2], trigrams_complete)
|
set_trigram_count(words[0], words[1], words[2], trigrams_complete)
|
||||||
word_bi_last = word
|
word_bi_last = word
|
||||||
|
|
||||||
@ -94,20 +97,23 @@ def predict(search_for_words):
|
|||||||
print (len(trigrams_complete))
|
print (len(trigrams_complete))
|
||||||
# Szukanie trigramu który najczęściej wystąpił dla każdych szukanych danych dwóch słów z tablicy serch_for_word.
|
# Szukanie trigramu który najczęściej wystąpił dla każdych szukanych danych dwóch słów z tablicy serch_for_word.
|
||||||
# Z razcji z tego, że są to dokładnie te dwa słowa szukane mogę użyć słownika znalezionych bigramów
|
# Z razcji z tego, że są to dokładnie te dwa słowa szukane mogę użyć słownika znalezionych bigramów
|
||||||
search_for_word_complete_bicounts = {}
|
for trigram in trigrams_complete:
|
||||||
|
if trigram[0] == "_":
|
||||||
|
print(trigram)
|
||||||
left_context_search_for_word = {}
|
left_context_search_for_word = {}
|
||||||
for search_for_word_complete in search_for_words_complete:
|
for bigram_complete in bigrams_complete:
|
||||||
search_for_word_complete_bicounts[search_for_word_complete] = bigrams_complete[search_for_word_complete]
|
|
||||||
for search_for_word_complete_bicount in search_for_word_complete_bicounts:
|
|
||||||
max_count = 0
|
max_count = 0
|
||||||
for trigram in trigrams_complete:
|
for trigram in trigrams_complete:
|
||||||
if search_for_word_complete_bicount in trigram and trigrams_complete[trigram] > max_count:
|
if bigram_complete in '_'.join(trigram.split("_")[1:3]) and trigrams_complete[trigram] > max_count:
|
||||||
max_count = trigrams_complete[trigram]
|
max_count = trigrams_complete[trigram]
|
||||||
left_context = trigram.split("_")[0]
|
left_context = trigram.split("_")[0]
|
||||||
left_context_search_for_word[search_for_word_complete_bicount] = left_context
|
left_context_search_for_word[bigram_complete] = left_context
|
||||||
for search_for_word in left_context_search_for_word:
|
for search_for_word in search_for_words:
|
||||||
left_context = left_context_search_for_word[search_for_word]
|
if search_for_word in left_context_search_for_word:
|
||||||
print(f"{left_context} {' '.join(search_for_word.split('_'))}")
|
left_context = left_context_search_for_word[search_for_word]
|
||||||
|
print(f"{left_context} {' '.join(search_for_word.split('_'))} {trigrams_complete['_'.join([left_context, search_for_word])]/bigrams_complete[search_for_word]}")
|
||||||
|
else:
|
||||||
|
print(f"??? {' '.join(search_for_word.split('_'))}")
|
||||||
|
|
||||||
# max_count_t = 0
|
# max_count_t = 0
|
||||||
# max_bi_key = ""
|
# max_bi_key = ""
|
||||||
|
Loading…
Reference in New Issue
Block a user