最近項目需要比較兩個字符串的相似度,並且返回相同的元素所佔的百分比。
如果讓我自己做的話,思路是把兩個字符串分別轉化爲列表,然後在列表中解決掉。
new = [i for i,j in zip(a, b) if i == j]
ratio = 2.0 * len(new) / (len(a) + len(b))
去網上一查,發現python自帶比較相似度的模塊,difflib。比較兩個字符串的模塊是difflib.SequenceMatcher,使用起來很簡單:
seq = difflib.SequenceMatcher(None, a, b)
ratio = seq.ratio()
最主要的是,python原生的模塊的效率都比較好。其中None的位置是一個函數,用來去掉自己不想算在內的元素。比如我想把空格排除在外:
seq = difflib.SequenceMatcher(lambda x:x=" ", a, b)
ratio = seq.ratio()