2011-05-02 104 views
16

沒有人知道是否存在給定一個字符串A和一個字符串B數組的算法,比較A字符串與B中所有字符串給出的輸出中最相似的一個。字符串與最相似字符串的比較

對於「最相似的一個」我的意思是,例如,

如果字符串是:「世界你好你怎麼樣」

然後

「ASDF asdewr世界你好如何asfrqr你」

比更相似:

「h2ll4 w1111 H11 111 111」

+1

既然你似乎滿意答案,你現在可以接受其中之一。 – schnaader 2011-05-04 10:13:11

回答

21

通常的測量是Levenshtein distance。計算從原始到每個候選人的Levenshtein距離,並將最小距離作爲最可能的候選人。

+4

這裏有一個方便的丹迪連接到Levenshtein距離的信息。 http://en.wikipedia.org/wiki/Levenshtein_distance – 2011-05-02 19:49:57

+2

+1鏈接從http://en.wikipedia.org/wiki/Levenshtein_distance – 2011-05-02 19:50:22

+0

謝謝你們,你們真的很有用 – malilzap 2011-05-02 20:08:34

2

這通常是通過檢查一串字符串變體來完成的......查看拼寫校正算法 - 例如, here

+0

這似乎很有趣謝謝你非常想 – malilzap 2011-05-02 20:04:20

14

定義相似性。算法,可以做到這一點包括:

  1. 萊文斯坦/ LCS/n元的距離(每個在您所設定的字符串比較字符串,拿一個具有最低的距離)
  2. TF-IDF索引
  3. Levenshtein automata
  4. Hopfield networks
  5. BK-trees

所有這一切都可以通過實施可行性的在C或C++中。谷歌「字符串相似性」,「重複查找」或「記錄鏈接」用於可用的度量和算法。

+0

我覺得在開始選擇算法之前,最好以適當的方式定義相似度,你是對的。乾杯! – malilzap 2011-05-02 20:07:24