Algorithm 我如何搜索相似的单词

Algorithm 我如何搜索相似的单词,algorithm,search,Algorithm,Search,我正在努力对短文进行自动分类,并试图找出如何匹配类似的单词——例如,书架或绘画和重新粉刷 我使用的是波特词干算法,但它只在某些情况下有用,而且只在单词末尾有用(上面两个例子都不适用) 是否有一个算法或相关的单词列表可以帮助实现类似的功能(除了制作我自己的以外?) (我在使用php,因此任何使用该语言的解决方案都会更有帮助。)这正是您需要的 对于任意两个字符串,它计算将一个字符串更改为另一个字符串所需的最小插入、突变和删除次数 如果距离较低,则这两个词是相似的 您还可以使用该算法来确定两个单词的发

我正在努力对短文进行自动分类,并试图找出如何匹配类似的单词——例如,书架或绘画和重新粉刷

我使用的是波特词干算法,但它只在某些情况下有用,而且只在单词末尾有用(上面两个例子都不适用)

是否有一个算法或相关的单词列表可以帮助实现类似的功能(除了制作我自己的以外?)

(我在使用php,因此任何使用该语言的解决方案都会更有帮助。)

这正是您需要的

对于任意两个字符串,它计算将一个字符串更改为另一个字符串所需的最小插入、突变和删除次数

如果距离较低,则这两个词是相似的

您还可以使用该算法来确定两个单词的发音是否相似

另请参见:


好吧,所有“相关单词列表”之母,称为WordNet:

它是免费提供的,但需要相当慷慨的许可证。在“相关项目”部分有一个PHP接口


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

在这种情况下,Levenshtein的一个特殊问题是,你必须找到一个好的阈值;它只返回两个单词之间的更改数。原始帖子中的两个示例之间有很大的区别:levenshtein(“shelf”,“shelfs”)=3,levenshtein(“painting”,“repaint”)=5。作为参考,我发现其中包含指向mysql存储过程版本的链接。尽管正如简所指出的,目前还不清楚它会离我们有多近。但这值得一试。这是最接近的答案——这不是理想的,而是一个良好的开端。jan的词表更理想,但在这一点上并不实用。哇-谢谢你的链接。我认为仅仅理解db格式需要比我在项目中花费更多的时间,但这似乎是一个理想的方式。