2011-05-02 100 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