2 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個贊
按長度索引您的字詞。大多數(shù)相似的單詞具有相同的長度,或一個或兩個長度的apartart。一個單詞(長度3)與單詞(長度3)相似,但它不會與(長度11)非常相似,因此沒有理由比較長度差異較大的兩個單詞的levensthein。因此,總的來說,您節(jié)省了大量的比較,因?yàn)槟槐容^了接近相似長度的單詞。catcancaterpillar
#creating a dictionary of words by length
word_dict = {}
for word in f:
word_length = len(word)
if word_length in word_dict:
word_dict[word_length].append(word)
else:
word_dict[word_length] = [word]
#now lets compare words with nearly the same length as our text_to_find
target_length = len(text_to_find)
x = 2 #the length difference we'd like to look at words
for i in range (target_length-x, target_length+x):
if i in word_dict:
#loop through all the words of that given length.
for word in word_dict:
new_similarity = textdistance.levenshtein.normalized_similarity(text_to_find , word) * 100
if new_similarity > similarity:
similarity = new_similarity
best_fit_word = word
if(similarity > 90):
print(best_fit_word, str(similarity))
注意:的創(chuàng)建只需計算一次。如有必要,您可以將其保存為泡菜。word_dict
另外,我沒有測試代碼,但一般的想法應(yīng)該很清楚。人們甚至可以擴(kuò)展這個想法,如果還沒有找到最相似的詞,可以動態(tài)地結(jié)束長度差異。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個贊
每次你說
similarity = new similarity
舊的“new_similarity”被保留,你只是把它復(fù)制到“相似性”。use 將返回一個生成器,該生成器不會將所有值存儲在內(nèi)存中,它們會動態(tài)生成值。yield
添加回答
舉報