Pattern matching: The gestalt approach一種序列的文本相似度方法

轉載請註明原創:https://blog.csdn.net/HHTNAN

Pattern matching: The gestalt approach

python 比較兩個序列的相似度,不需要分詞

案例1

import difflib
a="做子宮肌瘤微創手術用多少錢"
b="股癬是什麼樣子的?怎麼治療股癬好?"
print (difflib.SequenceMatcher(None,a,b).ratio())

輸出:
0.06666666666666667

案例2

import difflib
a="做子宮肌瘤微創手術用多少錢"
b="做子宮肌瘤微創手術具體費用"
print (difflib.SequenceMatcher(None,a,b).ratio())

輸出:
0.769230769

案例3

import difflib
a="做子宮肌瘤微創手術用多少錢"
b="具體費用做子宮肌瘤微創手術"
print (difflib.SequenceMatcher(None,a,b).ratio())

輸出:
0.6923076923076923

案例4

import difflib
a="做子宮肌瘤微創手術用多少錢"
b="具體費用子宮肌瘤做微創手術"
print (difflib.SequenceMatcher(None,a,b).ratio())

0.6153846153846154
通過上面的案例可以看出本算法側重的,是序列的相似性。會忽視主體的詞義、語義。

該算法計算返回的分數爲共同發現的序列字符數的兩倍除以兩個字符串中的字符總數; 得分以整數形式返回,反映百分比匹配。

目前猜測算法計算公式,
如果序列中位置沒有完全匹配,如案例3,則其計算分數爲9/13,9爲最大公共字串,13爲總字符序列數,案例4爲8/13的結果,理解爲4+4/13的結果。那麼問題來了爲什麼案例2中最大9爲最大公共字串的分數是那麼高,應該是有一個位置完全一致得分+1.即其結果理解爲9+1/13得到的結果。以上猜想均爲根據測試進行猜想,並未進行有效驗證,並不權威哦,後面我找到論文後拜讀下,再做整理。(值得注意的是再進行過程中是以B字符爲基準進行的。)
案例5
import difflib
a=“10個月寶寶貧血”
b=“10個月寶寶流鼻血”
print (difflib.SequenceMatcher(None,a,b).ratio())
輸出
0.8235294117647058

(7+8)+1/len(a)+len(b)=7*2/8+9=0.8235294117647058

轉載請註明原創:https://blog.csdn.net/HHTNAN
參考文獻:
【1】https://docs.python.org/2/library/difflib.html
【2】https://pymotw.com/2/difflib/
【3】http://blog.chinaunix.net/uid-20780364-id-538761.html
【4】https://docs.python.org/3.5/library/difflib.html
【5】http://www.drdobbs.com/database/pattern-matching-the-gestalt-approach/184407970
【6】https://blog.csdn.net/gavin_john/article/details/78951698

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章