簡體   English   中英

Python中字符串的相似度量

[英]Similarity measure for Strings in Python

我想測量兩個單詞之間的相似性。 我們的想法是使用OCR讀取文本並檢查關鍵字的結果。 我正在尋找的功能應比較兩個單詞並以%表示返回相似度。 因此,將一個單詞與自身進行比較應該是100%相似的。 我自己編寫了一個函數,並將char與char進行了比較,並將比例數與長度進行了比較。 但問題在於

wordComp('h0t',hot')
0.66
wordComp('tackoverflow','stackoverflow')
0

但直觀的兩個例子都應具有非常高的相似性> 90%。 添加Levenstein距離

import nltk
nltk.edit_distance('word1','word2')

在我的函數中將第二個結果增加到92%,但第一個結果仍然不好。

我已經找到了“R”的這個解決方案 ,可以將這個函數用於rpy2或使用agrepy作為另一種方法。 但是我希望通過更改接受基准來使程序變得越來越不敏感(只接受具有相似性的匹配> x%)。

是否有其他可以使用的好措施,或者您有什么想法來改善我的功能?

你可以使用difflib。 我前一段時間得到的這個功能對我很有幫助:

from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

print (similar('tackoverflow','stackoverflow'))
print (similar('h0t','hot'))

0.96
0.666666666667

您可以輕松地附加函數或將其包裝在另一個函數中以考慮不同程度的相似性,如此,傳遞第三個參數:

from difflib import SequenceMatcher

def similar(a, b, c):
    sim = SequenceMatcher(None, a, b).ratio()
    if sim > c: 
        return sim

print (similar('tackoverflow','stackoverflow', 0.9))
print (similar('h0t','hot', 0.9))

0.96
None

我寫了以下代碼。 試試吧。 我為兩個比較字符串(str1和str2)的長度不相等的情況定義了一個str3。 代碼在while循環中,用於退出使用k輸入。

k=1
cnt=0
str3=''
while not k==-1:
    str1=input()
    str2=input()
    k=int(input())

    if len(str1)>len(str2):
        str3=str1[0:len(str2)]
        for j in range(0,len(str3)):
            if str3[j]==str2[j]:
                cnt+=1
        print((cnt/len(str1)*100))

    elif len(str1)<len(str2):
        str3=str2[0:len(str1)]
        for j in range(0,len(str2)):
            if str3[j]==str1[j]:
                cnt+=1
        print((cnt/len(str2)*100))

    else:
        for j in range(0,len(str2)):
            if str2[j]==str1[j]:
                cnt+=1
        print((cnt/len(str1)*100))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM