【发布时间】:2012-08-02 17:30:39
【问题描述】:
所以,假设我有一个简单的句子数组。根据用户输入进行搜索并返回最接近的匹配项的最佳方法是什么?
Levenshtein 函数看起来很有希望,但我不认为我想使用它们。用户输入可能像highest mountain 一样简单,在这种情况下,我想在数组中搜索具有highest mountain 的句子。如果该确切的短语不存在,那么我想搜索具有highest 和mountain 但不是背靠背的句子,依此类推。 Levenshtein 函数基于每个字符工作,但我真正需要的是基于每个单词。
当然,在某种程度上,Levenshtein 函数可能仍然有用,因为我还想考虑包含短语 highest mountains(注意 S)或类似短语的句子的可能性。
你有什么建议?是否有任何已经存在的 PHP 系统可以做到这一点?单独的 Levenshtein 函数会是一个适当的解决方案吗?有我不知道的基于单词的 Levenshtein 函数吗?
谢谢!
编辑 - 我考虑了 MySQL 全文搜索,还考虑了将 A) 输入和 B) 每个句子分解为单独的单词数组的可能性,然后以这种方式进行比较,使用Levenshtein 函数用于解释单词的变化。 (颜色、颜色、颜色等)但是,我担心这种方法虽然可能很聪明,但计算量可能会很大。
【问题讨论】:
-
为什么不在数据库中做呢?您的数据来源是什么?
-
这更适合于数据库中的全文搜索,而不是 PHP 中手动构建的东西。
-
我正在将维基百科的文章解析成句子。如果将这些存储在数据库中、全文搜索然后从数据库中删除这些条目会更快,我愿意接受这种解决方案,尽管我无法想象它会非常有效。
-
您在使用framework.zend.com/manual/en 吗?里面有一个 Lucene 库,从来没用过,但如果你想远离 DB,这似乎是对的!
标签: php arrays search levenshtein-distance