考虑到输入的几个词,我希望有一个实用程序,它将返回一组不同的相关术语,短语或概念。需要注意的是,它需要有一个大的术语图表,否则该功能将不会非常有用。
例如,提交“棒球”将返回
["shortstop", "Babe Ruth", "foul ball", "steroids", ... ]
Google Sets是我能找到这种功能的最好例子,但我不能使用它,因为它们没有公共API(我不会违反他们的TOS)。此外,单字输入不会获得非常多样化的结果。我正在寻找切线上的解决方案。
我最接近实验的是使用WikiPedia's API搜索类别和反向链接,但无法通过“相关性”或“受欢迎程度”直接对这些结果进行排序。如果没有这个,那么建议清单就会很庞大而且遍布整个地方,这不是立即有用而且非常难以减少。
使用词库也可以最低限度地工作,但这会遗漏任何专有名词或切向相关的术语(如上面列出的任何结果)。
我会高兴地重用一个开放服务,如果存在,但我找不到足够的东西。
我正在寻找一种方法来实现这个内部使用体面的启动集,或者重用免费提供此服务 。
有解决方案吗? 提前致谢!
更新:感谢您非常密集的&内容丰富的答案。我将在6到12个月内选择一个获胜的答案,当我希望能够理解你们所建议的内容时=)
答案 0 :(得分:10)
您可能对WordNet感兴趣。理解API需要一些语言知识,但基本上系统是英语单词之间基于意义的链接的数据库,这或多或少是你要搜索的。如果你愿意,我相信我可以挖掘更多信息。
答案 1 :(得分:8)
Peter Norvig(Google研究总监)在a Facebook Tech Talk中谈到了他们是如何在Google(特别是Google集合)中做到这一点的。这个想法是在庞大的数据集(例如整个网络)上的相对简单的算法比在小数据集上的复杂算法好得多。
您可以将Google's n-gram collection视为起点。您将开始看到哪些概念组合在一起。 Norvig暗示,内部Google在Google Translate等内容中的使用量高达7克。
如果你更有野心,可以用你想要的语言download all of Wikipedia's articles创建自己的n-gram数据库。
如果你只有一个单词,问题就更复杂了;查看this recent thesis了解有关词义消歧的更多详细信息。
这不是一个简单的问题,但如你所提到的那样它很有用。最后,我认为你会发现一个真正成功的实现将有一个相对简单的算法和大量的数据。
答案 2 :(得分:5)
看看以下两篇论文:
以下是我对一个非常简化的解释的尝试:
如果我们有一个过去用户查询的数据库,我们可以定义两个查询之间的相似性函数。例如:共同的单词数量。现在,对于我们数据库中的每个查询,我们计算它与其他查询的相似性,并记住k个最相似的查询。这些非重叠的单词可以作为“相关术语”返回。
我们还可以将此方法与包含用户可能正在搜索的信息的文档数据库一起使用。我们可以将两个搜索项之间的相似性定义为包含两个搜索项的文档数除以包含其中一个的文档数。要确定要测试哪些术语,我们可以扫描文档并丢弃太常见的单词('和',''等等)或者过于模糊不清。
如果我们的数据允许,那么我们可以看到哪些查询导致用户选择哪些结果,而不是按内容比较文档。例如,如果我们有数据显示搜索“Celtics”和“Lakers”的用户都点击了espn.com,那么我们可以调用这些相关术语。
如果您从头开始没有关于过去用户查询的数据,那么您可以尝试使用Wikipedia或Bag of Words数据集作为文档数据库。如果您正在寻找用户搜索术语和结果的数据库,如果您有冒险精神,那么您可以查看AOL搜索数据。