给出一些输入词,我希望有一个实用程序,它将返回一组不同的相关术语,短语或概念.需要注意的是,它需要有一个大的术语图表,否则该功能将不会非常有用.
例如,提交"棒球"将返回
["shortstop", "Babe Ruth", "foul ball", "steroids", ... ]
谷歌集是我能找到这种功能的最好的例子,但我不能使用它,因为他们没有公共API(我不会违反他们的TOS).此外,单字输入不会获得非常多样化的结果.我正在寻找切线上的解决方案.
我最接近实验的是使用WikiPedia的API来搜索类别和反向链接,但是无法通过"相关性"或"流行度"直接对这些结果进行排序.如果没有这个,建议清单是庞大而且遍布整个地方,这不是立即有用而且非常难以减少.
使用词库也可以最低限度地工作,但这会遗漏任何专有名词或切向相关的术语(如上面列出的任何结果).
我很乐意重用一个开放服务,如果存在,但我还没有找到足够的东西.
我正在寻找一个既方式来实现这一点无论在公司内部有体面填充的起始一套,或重复使用一个免费的服务,提供了这一点.
有解决方案吗? 提前谢谢!
更新: 感谢您提供令人难以置信的密集和信息丰富的答案.我会在6到12个月内选择一个成功的答案,当我希望了解你所有建议=)
您可能对WordNet感兴趣.理解API需要一些语言知识,但基本上系统是英语单词之间基于意义的链接的数据库,这或多或少是你要搜索的.如果你愿意,我相信我可以挖掘更多信息.
Peter Norvig(谷歌研究部主任)在Facebook Tech Talk上谈到了他们如何在Google(特别是Google Sets)中做到这一点.我们的想法是,对大型数据集(例如整个网络)的相对简单的算法比小型数据集上的复杂算法要好得多.
您可以将Google的n-gram集合视为起点.您将开始看到哪些概念组合在一起.Norvig暗示,谷歌内部有高达7克的用于谷歌翻译等内容.
如果你更有野心,你可以用你想要的语言下载所有维基百科的文章,并创建你自己的n-gram数据库.
如果你只有一个单词,问题就更复杂了; 查看这篇最近的论文,了解关于词义消歧的更多细节.
这不是一个简单的问题,但正如你所提到的那样它很有用.最后,我认为你会发现一个真正成功的实现将有一个相对简单的算法和大量的数据.
看一下以下两篇论文:
聚类搜索引擎的用户查询[pdf]
通过聚类关键字进行主题检测[pdf]
这是我的一个非常简单的解释:
如果我们有一个过去用户查询的数据库,则可以定义两个查询之间的相似度函数。例如:共同的单词数。现在,对于数据库中的每个查询,我们都计算它们与其他查询的相似度,并记住k个最相似的查询。这些中的不重叠词可以作为“相关术语”返回。
我们还可以对包含用户可能正在搜索的信息的文档数据库采用这种方法。我们可以将两个搜索词之间的相似性定义为包含两个搜索词的文档数除以包含两个搜索词的文档数。为了确定要测试的术语,我们可以扫描文档并扔掉太常见的单词(“和”,“ the”等)或太晦涩的单词。
如果数据允许,那么我们可以看到哪些查询导致用户选择了哪些结果,而不是按内容比较文档。例如,如果我们有数据显示出搜索“凯尔特人”和“湖人”的用户都最终点击了espn.com,那么我们可以称这些相关术语。
如果您从零开始,没有关于过去用户查询的数据,那么您可以尝试使用Wikipedia或Word Bag数据集作为文档数据库。如果您正在寻找一个包含用户搜索词和结果的数据库,并且感觉很冒险,那么可以看看AOL搜索数据。