一、概念
來自於Simon White發表的一篇文章:How to Strike a Match
這個算法主要爲了滿足以下三個需求:
(1)字符串之間只是在某幾個字符處出現不同,那麼相似度應該比較高。
(2)字符串的區別只是相同的詞組以不同的順序排列,那麼相似度應該比較高。
(3)語言無關性,算法應該滿足多種語言的的相似度計算。
論文中對比了幾種相似度算法,
Soundex Algorithm會因爲字符串開頭的字符不同而導致字符串形成的編碼不一致而導致相似度降低,如:‘FRANCE’ 和 ‘REPUBLIC OF FRANCE’;
Edit Distance則對字符串長度敏感,隨字符串長度差距增大而相似度降低,如:‘FRANCE’ 和 ‘QUEBEC’ 的相似度要比 ‘FRANCE’ 和 'REPUBLIC OF FRANCE’的相似度高;
Longest Common Substring提取公共子字符串,則會造成擁有相同子字符串的字符串相似度一致,如:‘FRENCH REPUBLIC’ 與 'REPUBLIC OF FRANCE’的相似度 和’REPUBLIC OF CUBA’的相似度一致。
二、思想
論文裏算法的思想相當簡單,對於轉化爲大寫的兩個字符串,根據字符串的順序,以2-gram的形式取出字符對,如:
FRANCE: {FR, RA, AN, NC, CE}
FRENCH: {FR, RE, EN, NC, CH}
之後,取兩個集合的交集,記錄交集字符對的數量,最後再將兩倍的交集字符對總數量除以兩個集合字符對的總數量,如:
具體到例子中的字符串,代入可得:
最終得到的結果便是字符串之間的相似度。
三、例子
論文中還貼出了一些例子,簡單摘錄如下:
(1)與‘Healed’的相似度
(2)圖書名稱相似度
注:本文中圖片均來自於論文截圖