2012-03-18 41 views
-1

我想知道如何通過Python中的函數比較2個不同的字符串。更具體地說,兩個不同的字符串有多相似,以及它們的百分比(兩個字符串中出現的字母)的相似性。提前致謝。比較2個類似字母的字符串

+2

可能的複製:http://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison – aioobe 2012-03-18 21:13:43

+0

提問者是要求一個模塊,可以做到這一點。我在問怎麼沒有不同的模塊 – bahaaz 2012-03-18 21:16:02

+1

@bahaaz爲什麼?這是作業嗎?有什麼試過? – 2012-03-18 21:20:28

回答

1
def pctSame(s1,s2): 
    # Make sorted arrays of string chars 
    s1c = [x for x in s1] 
    s1c.sort() 
    s2c = [x for x in s2] 
    s2c.sort() 
    i1 = 0 
    i2 = 0 
    same = 0 
    # "merge" strings, counting matches 
    while (i1<len(s1c) and i2<len(s2c)): 
     if s1c[i1]==s2c[i2]: 
      same += 2 
      i1 += 1 
      i2 += 1 
     elif s1c[i1] < s2c[i2]: 
      i1 += 1 
     else: 
      i2 += 1 
    # Return ratio of # of matching chars to total chars 
    return same/float(len(s1c)+len(s2c)) 
1

你可以看看difflib的各種比較字符串和獲得差異的方法。看起來像difflib.Differ.compare(string1, string2)會給你一個產生線條的迭代器。以-爲前綴的行在一個字符串中,前綴爲空的行在兩個字符串中,並且以+爲前綴的行位於另一個字符串中。

0

字符串相似性是一種度量,取決於您正在測量的內容。你是否試圖將錯字輸入到字典中的目標單詞?比較DNA或蛋白質序列?試圖基於與搜索查詢的相似性來進行文檔檢索?做模糊名稱匹配?對於這些任務中的每一個,不同的算法可能是合適的。如果你真的在問一個完全一般的問題,你可以從閱讀Levenshtein距離開始。

0

difflibSequenceMaster幾乎是你在找什麼。它取決於他們看起來像海誓山盟的多少,在0和1之間得分。