我想构建一个内部搜索引擎(我有一个非常大的数千个XML文件集合),它能够将查询映射到概念。例如,如果我搜索“大型猫科动物”,我会希望排名很高的结果也可以返回带有“大型猫科动物”的文档。但我可能也有兴趣让它返回“巨大的动物”,虽然相关性得分低得多。
我目前正在阅读Python中的自然语言处理书,似乎WordNet有一些可能有用的单词映射,但我不确定如何将其集成到搜索引擎中。我可以用Lucene这样做吗?怎么样?
从进一步的研究来看,似乎“潜在的语义分析”与我正在寻找的相关,但我不确定如何实现它。
关于如何完成这项工作的任何建议?
答案 0 :(得分:9)
我不确定如何将其整合到搜索引擎中。我可以用Lucene这样做吗?怎么样?
步骤1.停止。
第2步。 工作。
步骤3.到那时,您将了解更多有关Python和Lucene以及其他可以集成它们的工具和方法。
不要试图解决集成问题。软件可以始终集成。这就是操作系统的功能。它集成了软件。有时你想要“更紧密”的整合,但这是从不要解决的第一个问题。
要解决的第一个问题是让您的搜索或概念事物或其他任何东西作为一个愚蠢的命令行应用程序。或者通过传递文件或与OS管道或其他东西编织在一起来编织应用程序对。
稍后,您可以尝试找出如何让用户体验无缝。
但是,不要从集成开始,不要因为集成问题而停滞不前。将集成放在一边,让事情发挥作用。
答案 1 :(得分:1)
这是一个非常难以解决的问题,它不能以始终产生足够结果的方式解决。我建议坚持一些非常简单的原则,以便结果至少是可预测的。我认为你需要两件事:一些基本的形态学引擎和一个同义词词典。
每当搜索查询到达时,对于每个单词
然后重复输入单词的所有组合,即“大猫”,“大猫”,“巨型猫”巨型猫等等。
事实上,你需要以规范的形式存储你的索引数据(singluar,first form等)以及文字形式。
至于概念,例如猫也是动物 - 这就是它变得棘手的地方。它从来没有真正起作用,因为否则谷歌本来会回归概念性比赛,但它并没有这样做。
答案 2 :(得分:1)
首先,我同意这里关于启动缓慢的大部分建议,并首先构建这个宏伟计划的点点滴滴,设计一个最小的第一个产品并继续从那里开始。 其次,如果你想在Lucene中使用一些Wordnet功能,可以使用contrib package将Lucene查询与Wordnet连接起来。我不知道它是否被移植到pylucene。祝你好运,小心。
答案 3 :(得分:0)
首先,写一段python代码,当你输入苹果时会返回菠萝,橙子,木瓜。通过关注语义网络的“是”关系。然后继续有关系等等。
我认为最后,您可能会为学校项目获得相当充足的代码。