哪种算法最适合以下情况:
假设用户在搜索框中输入: - Dell Computers 但在数据库中,这个术语并不存在,但存在的是: - 戴尔 或者只是: - 计算机 那么如何/什么算法可以适用于上述场景。 需要的步骤:
1) Find to see if an exact match exists for "Dell Computers"
2) If not, then check for each word like "Dell" and "Computers"
此外,我想在PHP中实现这一点。任何想法怎么做?
答案 0 :(得分:1)
这已在Full text searching领域广泛开展。查看Lucene,ElasticSearch,MySQL Full-Text Search或PostgreSQL Full Text Search。
基本思想是创建一个trie单个关键字,指向生成的文章/文档集,然后单独查找每个单词并对结果进行集合交集以查找与两者相匹配的文章 - 并且如果没有良好的交叉点,则返回单个结果集。
添加stemming个查找字词,您就可以重新实现Lucene和朋友了。