PHP-搜索搜索词的句子数组


PHP - Search array of sentences for search term(s)?

所以,假设我有一个简单的句子数组。根据用户输入搜索并返回最接近的匹配项的最佳方式是什么?

Levenstein函数看起来很有前途,但我不想使用它们。用户输入可能和highest mountain一样简单,在这种情况下,我想在具有highest mountain的数组中搜索句子。如果这个短语不存在,那么我想搜索具有highestmountain的句子,但不能背靠背,依此类推。Levenstein函数以每个字符为基础工作,但我真正需要的是以每个单词为基础。

当然,在某种程度上,Levenstein函数可能仍然有用,因为我还想考虑句子中包含短语highest mountains(注意S)或类似短语的可能性。

你有什么建议?有没有已经存在的PHP系统可以做到这一点?单独的Levenstein函数是一个充分的解决方案吗?有没有我不知道的基于单词的Levenstein函数?

谢谢!

EDIT-我考虑了MySQL全文搜索,还考虑了将A)输入和B)每个句子分解为单独的单词数组的可能性,然后使用Levenstein函数进行比较,以解释单词的变化。(颜色、颜色、颜色等)然而,我担心这种方法虽然可能很聪明,但可能在计算上很费力。

由于我不喜欢为您编写代码,我通常会问您首先尝试了什么。然而,我目前陷入了困境,所以休息一下写下了这篇文章:

$results=array();
foreach($array as $sentence){
    if(stripos($sentence,$searchterm)!==false)
        $results[]=$sentence;
}
if(count($results)==0){
    $wordlist=explode(" ",$searchterm);
    foreach($wordlist as $word){
        foreach($array as $sentence){
            if(stripos($sentence,$word)!==false)
                $results[]=$sentence;
        }
    }
}
print_r($results);

这将在一组句子中准确地搜索术语。如果你输入"microsift",而句子中有"Microsoft"一词,它将找不到结果。它不区分大小写,所以应该能更好地工作。如果没有找到使用完整术语的结果,则会将其分解并按单词进行搜索。希望这至少能给你一个起点。

检查此项:http://framework.zend.com/manual/en/zend.search.lucene.overview.html

Zend_Search_Luce提供了HTML解析功能。文档可以直接从HTML文件或字符串创建:

$doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
$index->addDocument($doc);

PHP没有内置函数可以实现这一点。这是因为您所要求的内容涉及搜索相关性、相关术语、迭代搜索以及许多更复杂的操作,这些操作需要模仿搜索中的人类逻辑。您可以尝试寻找基于PHP的搜索类,尽管我所知道的是数据库搜索引擎,而不是数组搜索类。自己制作是一件非常复杂的事情。