如何构建一个概念搜索引擎?

5
我想建立一个内部搜索引擎(我有成千上万个XML文件的庞大收藏),它能够将查询映射到概念。例如,如果我搜索“big cats”,我希望高排名的结果返回包含“large cats”的文档。但我也可能对返回“huge animals”感兴趣,尽管相关性得分要低得多。
我目前正在阅读Python自然语言处理书籍,其中似乎WordNet具有一些可能有用的单词映射,但我不知道如何将其整合到搜索引擎中。我可以使用Lucene来做到这一点吗?如何操作?
从进一步的研究中,似乎“潜在语义分析”与我所寻找的内容相关,但我不知道如何实现它。
有关如何完成此任务的任何建议?
4个回答

9
我不确定如何将它集成到搜索引擎中。我能用Lucene来做吗?怎么做?
步骤1. 停下来。
步骤2. 先让某些东西工作起来。
步骤3. 到那时,你会更了解Python、Lucene和其他工具以及你可能将它们集成的方式。
不要试图解决集成问题。软件总是可以集成的。这就是操作系统所做的。它集成软件。有时你想要更紧密的集成,但这从来不是要解决的第一个问题。
要解决的第一个问题是让你的搜索或概念或其他任何东西作为一个愚笨的老式命令行应用程序工作起来。或者是通过传递文件或与操作系统管道相结合的一对应用程序。
稍后,你可以尝试弄清楚如何使用户体验无缝。
但不要从集成开始,也不要因为集成问题而停滞不前。先把集成放在一边,让某些东西工作起来。

在开始时保持简单是个好主意。但在这种情况下,我正在开发的应用程序的潜在客户已经有了“普通”的搜索引擎。我有理由相信,一个更智能的引擎可以增加实际价值,这就是为什么在制作“跟风”产品之前,我想知道是否有可行的问题需要解决。 - DevX
@DevX:请慢下来。 "更智能的引擎"是一回事。首先建造它。整合是你最不用担心的事情。在让“更智能的引擎”运行之后,留到最后再进行整合。我会重复这个建议,因为你似乎没有仔细阅读:在使用工具并解决基本问题之后,可以将整合留到最后。 - S.Lott

1

这是一个非常困难的问题,无法以一种总能产生足够结果的方式来解决。我建议坚持一些非常简单的原则,以便结果至少是可预测的。我认为你需要两个东西:一些基本的形态学引擎和一个同义词词典。

每当有搜索查询到达时,对于每个单词,您需要:

  1. 查找字面匹配
  2. 使用形态学引擎“规范化/规范化”该单词,即使其成为单数、第一形式等,并查找匹配项
  3. 查找该单词的同义词

然后对输入单词的所有组合重复此过程,例如“大猫”,“大猫”,“巨大的猫”等。

实际上,您还需要以规范形式(单数、第一形式等)存储索引数据,同时保留字面形式。

至于概念,例如猫也是动物 - 这就是问题所在。它从未真正起作用,否则 Google 已经返回了概念匹配,但它并没有这样做。


1
使用规范化的想法很好。 NLTK库/WordNet肯定可以用来做到这一点。我不会觉得概念标记是不切实际的,因为谷歌还没有做到。谷歌处理数十亿页面上的非常开放式的查询。为他们做概念搜索会引发一系列问题,此外用户通常只对前10个答案感兴趣。也就是说,普通搜索者希望准确度高。然而,对于我的应用程序,广度是结果质量的重要特征。我不想错过任何可能相关的内容。 - DevX

1
首先,我同意这里大部分关于缓慢开始的建议,首先构建这个宏伟计划的一些零散部分,设计一个最小的第一产品,并从那里继续。 其次,如果你想在Lucene中使用一些Wordnet功能,有一个contrib package可以将Lucene查询与Wordnet接口连接起来。我不知道它是否被移植到pylucene。祝你好运,出门在外要小心。

0

首先,编写一段Python代码,当您输入“apple”时,它将返回“pineapple”,“orange”和“papaya”,并专注于语义网络中的“is”关系。然后继续使用“has a”关系等。

我认为最终,您可能会得到一个相当足够的代码片段,适用于学校项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接