2010-10-23 160 views
6

我想建立一个内部搜索引擎(我有一个非常大的数千个XML文件集合),它能够将查询映射到概念。例如,如果我搜索“大型猫科动物”,我想要高度排名的结果以及“大型猫科动物”返回文档。但我也可能有兴趣让它回归“巨大的动物”,尽管它的相关性得分较低。如何构建概念搜索引擎?

我目前正在通过Python中的自然语言处理书阅读,似乎WordNet有一些可能证明有用的字词映射,尽管我不知道如何将它集成到搜索引擎中。我可以使用Lucene来做到这一点吗?怎么样?

从进一步的研究看来,“潜在语义分析”似乎与我正在寻找的内容相关,但我不确定如何实现它。

有关如何完成此任务的任何建议?

回答

9

我不确定如何将它集成到搜索引擎中。我可以使用Lucene来做到这一点吗?怎么样?

第1步。停止。

第2步。获取东西工作。

第3步。届时,您将了解更多关于Python和Lucene以及其他可能整合它们的工具和方法。

不要从尝试解决集成问题开始。软件可以整合总是。这就是操作系统所要做的。它集成了软件。有时候你想要“更紧密”的整合,但这是从来没有第一个问题要解决。

要解决的第一个问题是让你的搜索或概念的东西或任何它是一个愚蠢的命令行应用程序工作。或者通过将文件传递或与OS管道编织在一起编织在一起。

稍后,您可以尝试弄清楚如何使用户体验无缝。

但是不要从集成开始,也不要因为集成问题而停顿。把集成放在一边,让一些工作。

+0

开始简单的好处。但在这种情况下,我正在构建的应用程序的潜在客户已经拥有“正常”的搜索引擎。我有理由相信,一个更加智能的引擎可以增加有形的价值,这就是为什么我想知道在我开始制作一个“我也是”产品之前是否可行的问题。 – DevX 2010-10-23 14:21:51

+0

@DevX:请放慢速度。 “更智能的引擎”是一回事。首先建立。整合是你最担心的问题。在获得“更智能的引擎”后,保存最后一次。我会重复这一点,因为您似乎没有阅读它:在获得有关这些工具的一些经验并解决基本问题之后,最后可以留下整合。 – 2010-10-23 14:25:11

+0

步骤2的+1。 – Skarab 2010-11-05 13:36:53

1

这是一个令人难以置信的难题,它不能解决的方式,将总是产生足够的结果。我建议坚持一些非常简单的原则,以便结果至少可以预测。我认为你需要2件事:一些基本的形态学引擎加同义词词典。

每当一个搜索查询到达时,每个字

  1. 你看字面匹配
  2. “正常化/ canonicalze”使用形态的发动机的话,也就是使其单数,第一种形式等,并寻找匹配
  3. 查找单词

然后重复输入字,即“大猫”的所有组合的同义词,“大猫”,“猫巨大的”巨大的猫”等

事实上,您还需要将索引数据以标准形式(singluar,first form等)与字面形式一起存储。

至于概念,如猫也是动物 - 这是它变得棘手的地方。它从来没有真正起作用,因为否则谷歌已经返回了概念上的匹配,但它并没有这样做。

+1

首先使用规范化的好主意。 NLTK Library/WordNet可以用来做到这一点。我不会将概念标记视为不切实际,因为Google尚未完成。 Google处理数十亿页的非常开放式查询。对它们进行概念搜索会打开一堆蠕虫,除了用户通常只对前10个答案感兴趣。也就是说,一般的搜索者需要高精度。 尽管我的应用程序,宽度是结果质量的重要特征。我不想错过任何可能相关的东西。 – DevX 2010-10-23 14:24:39

0

首先,写一段python代码,当你输入苹果时会返回你菠萝,橙子,木瓜。通过关注语义网络的“是”关系。然后继续有一个关系等等。

我想最后,你可能会得到一个相当充足的学校项目代码。

1

首先,我同意这里的大部分建议,关于启动速度缓慢,并且首先构建这个宏伟计划的一些零件,设计一个最小的第一个产品并从那里继续。其次,如果你想在Lucene中使用一些Wordnet功能,那么有一个contrib package用于连接Lucene查询和Wordnet。我不知道它是否被移植到了pylucene。祝你好运,并小心在那里。