我刚刚编写了一些近似字符串匹配的代码。我想将我的天真算法与在JVM上运行的更成熟的实现进行对比。有什么建议吗?
答案 0 :(得分:2)
我在本网站的其他地方找到了类似问题的答案。
Commons Lang实施了Levenshtein距离 http://commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.html
Commons Codec有soundex和metaphone的实现 http://commons.apache.org/codec/api-release/org/apache/commons/codec/language/Soundex.html
http://commons.apache.org/codec/api-release/org/apache/commons/codec/language/Metaphone.html
(source)
Lucene( http://lucene.apache.org/)也实现了Levenshtein编辑距离。
(source:zarawesome)
答案 1 :(得分:0)
多年前,我在大型机的FORTRAN程序中重新发明了这个轮子:)
当我自豪地告诉互联网上的其他人我的算法时,他们笑了起来,并指出了这个区域的两个(四个?)大牌:
这些是用于比较相似字符串的大量序列的算法。内存要求约为m + n
,其中m和n是字符串的大小,运行时约为m * n
。
Gunslinger47提到了Levenshtein,Soundex和Metaphone。 Levenshtein也是计算字符串距离的有力手段,但它更适合“普通”文本。 Soundex和Metaphone计算一个短字符串,用于在人类说话时对字符串的声音进行编码......它们在大约3个音节后变得无效,它们真正用于人类语言中的单词,而不是基因组串等。< / p>
修改强>
哎呀,我刚刚在你引用的文章的底部找到了我的4个大牌。所以你已经意识到了这些。我认为,如果你搜索这些名称,“Java”应该找到你的实现。 Here's the first one I found