У меня есть объект типа серии, где я должен применить функцию, которая использует биграммы для исправления слова в случае, если оно встречается с другим. Я создал список bigrams, отсортировал его по частоте (наивысшая на первом месте) и назвала его fdist.Заменить слова на основе Bigram Frequency, Python
bigrams = [b for l in text2 for b in zip(l.split(" ")[:-1], l.split(" ")[1:])]
freq = nltk.FreqDist(bigrams) #computes freq of occurrence
fdist = freq.keys() # sorted according to freq
Далее я создал функцию, которая принимает каждую строку («или предложение», «объект из списка») и использует Биграммные, чтобы решить, следует ли исправить его дальше или нет.
def bigram_corr(line): #function with input line(sentence)
words = line.split() #split line into words
for word1, word2 in zip(words[:-1], words[1:]): #generate 2 words at a time words 1,2 followed by 2,3 3,4 and so on
for i,j in fdist: #iterate over bigrams
if (word2==j) and (jf.levenshtein_distance(word1,i) < 3): #if 2nd words of both match, and 1st word is at an edit distance of 2 or 1, replace word with highest occurring bigram
word1=i #replace
return word1 #return word
Проблема заключается в том, что только одно слово возвращается в течение всего предложения, например:
«Lts идти twards на востоке» заменяется позволяет. Похоже, что дальнейшие итерации не работают.
для цикла для word1, word2 работает так: «Lts идти» в 1-й итерации, который будет в конечном счете заменен «позволяет», как позволяет происходит более часто с «идти»
«идти к» во 2-м итерация.
«в сторону» на третьей итерации .. и так далее.
Существует незначительная ошибка, которую я не могу вычислить, пожалуйста, помогите.
Просьба уточнить. Каков ожидаемый результат 'bigram_corr (« Давайте идти к востоку »)?? – Kevin
отредактировал его, пожалуйста, проверьте. Мне нужно, чтобы все предложение было возвращено. –
Вы возвращаетесь преждевременно. – 2rs2ts