2010-10-31 20 views
9

我正在试图进行自动分类短的文章,我试图找出如何匹配类似的话 - 比如,搁板式货架或绘画和重绘我怎么可能让一个搜索匹配类似的话

我使用Porter干扰算法,但它只对某些情况有帮助,只有在词的结尾(上面的两个例子都不适用)。

是否有一个算法或相关的单词列表,将与这样的帮助(使我自己之外?)

(我在PHP工作,所以在语言的任何解决方案,将更有帮助。)

回答

9

Levenshtein Distance是你在找什么。

对于任何两个字符串,它计算将一个字符串更改为另一个字符串时需要发生的插入,突变和删除的最小数量。

如果距离很低,那么这两个词是相似的。

您也可以使用Soundex算法来确定两个单词是否听起来相似。

参见:
PHP levenshtein function
PHP soundex function

+1

在这种情况下Levenshtein的一个特殊问题是,你必须找到一个好的门槛;它只返回两个单词之间的变化数量。原始帖子中的两个例子有很大的不同:levenshtein(“shelf”,“shelves”)= 3,levenshtein(“painting”,“repaint”)= 5. – 2010-10-31 17:04:34

+0

仅供参考 - 我发现http ://stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search其中包含一些链接到一些MySQL存储过程版本。尽管正如Jan所指出的那样,现在还不清楚它会多么接近。但值得一试。 – Yehosef 2010-10-31 21:13:38

+0

这是最接近的答案 - 这不是理想的,但一个好的开始。从1月的单词列表是更理想的,但在这一点上不现实。 – Yehosef 2010-11-11 12:01:19

4

那么,有所有“相关的单词列表”的母亲,叫共发现:http://wordnet.princeton.edu/

它是免费提供主题的一个相当慷慨的许可证。在“相关项目”部分有一个PHP界面。

与使用单词相似性算法相比,它的优势在于它甚至可以知道单词的不同的同义词,如“paint”和“color”。缺点是你要么必须知道正确的同义词(毕竟,一个词可能意味着不同的东西),或者你可以得到一个非常狂野的同义词列表。

+0

哇 - 感谢您的链接。我认为只要了解db格式的时间比我对该项目的时间要多,但它似乎是最理想的方式。 – Yehosef 2010-10-31 21:07:13

相关问题