我正在使用Lucene搜索数据集,我现在需要如何实现“搜索(我的意思是精确短语搜索)机制”?
当用户输入“littlecat”时,我想让它能够导致所有“小猫”命中。我现在应该操纵索引代码,但至少我现在应该如何“”搜索工作。
答案 0 :(得分:0)
当用户输入“littlecat”时,我想让它能够导致所有“小猫”点击
这可能听起来很容易,但实施起来非常困难。对于一个人而言,小猫和猫是两个不同的词,但是对于一台计算机来说,除了你有一本字典并且你的代码在字典中检查这两个单词之外,它不会分别与 littlecat 分开。另一方面,搜索“小猫”可以轻松搜索“ littlecat ”。而且我相信这就是精确短语搜索的概念。如果您搜索“ littlecat ”,则确切的短语搜索将仅返回littlecat,反之亦然。即使谷歌似乎(预计也是),也不会在littlecat搜索中返回“小猫”
答案 1 :(得分:0)
实现这一点的一种方法是动态编程 - 使用字典/语料库来比较您的单个单词(以及将文本解析为字符串后的左侧单词)。
想想它就像你在编写一个自定义拼写检查器或类似的东西。在这种情况下,还有一种情况可能会遗留多个单词组合,例如 - “walkingmydoginrain” - 在这里你可以将第一个单词分解为“walk”或“walk”,并且这是DP的美丽 - 因为你知道(从你的语料库)你不能从“ingmydoginrain”(即其余的字符串 - 形成其他字符串 - 你刚刚发现在这种情况下 - 你应该选择分段的单词作为“行走”而不是走路。
另外想一想,如果找不到匹配项就会增加您定义的 COST功能,那么您应该获得最佳结果 - 这意味着您可以确定您的文本(不是用白色空格分隔)肯定会被分成合法的单词 - 虽然在那行中可能有多个可能的单词序列(因此,也可能是寻求此人的意图)
您应该能够在网络上找到针对您的用例的相当不错的基础实现(另请阅读:Google如何实施 - “您的意思是”)
目前,请参阅 - How to split text without spaces into list of words?