我试图找到与单个单词相关的单词(特别是物理对象).例如:
网球:网球拍,网球,网球鞋
斯诺克:斯诺克球杆,斯诺克球,粉笔
国际象棋:棋盘,棋子
书柜:书
我曾尝试使用WordNet,特别是meronym语义关系; 但是,这种方法并不一致,如下面的结果所示:
网球:发球,凌空,脚故障,定位,回归,优势
斯诺克:什么都没有
国际象棋:象棋移动,棋盘(其自己的缩写关系显示'方形'和'对角线')
书柜:搁置
最终将需要对术语进行加权,但现在这并不是真正的问题.
有人对如何做到这一点有任何建议吗?
只是一个更新:使用Jeff和StompChicken的答案结合起来.
从维基百科中检索到的信息质量非常好,特别是(不出所料)有如此多的相关信息(与某些语料库相比,如"博客"和"ipod"这样的术语不存在).
维基百科的结果范围是最好的部分.该软件能够匹配诸如(为简洁起见而切割的列表)等术语:
高尔夫球:[球,铁,球座,球袋,球杆]
摄影:[相机,电影,照片,艺术,图像]
钓鱼:[鱼,网,钩,陷阱,诱饵,诱饵,杆]
最大的问题是将某些词分类为物质文物; 默认WordNet不是一个可靠的资源,因为它中不存在许多术语(例如'ipod',甚至'trampolining').
我认为你要求的是概念之间的语义关系的来源.为此,我可以想到许多方法:
语义相似度算法.这些算法通常对Wordnet中的关系执行树形遍历,以得出两个术语相关的实值得分.这些将受限于WordNet对您感兴趣的概念进行建模的程度 .WordNet :: Similarity(用Perl编写)非常好.
尝试使用OpenCyc作为知识库.OpenCyc是Cyc的开源版本,它是"真实世界"事实的一个非常大的知识库.它应该比WordNet有更丰富的语义版本.但是,我从未使用过OpenCyc,所以我不能说它是多么完整,或者使用它有多容易.
n-gram频率分析.正如Jeff Moser所说.一种数据驱动的方法,可以从大量数据中"发现"关系,但通常会产生噪声结果.
潜在语义分析.类似于n-gram频率分析的数据驱动方法,用于查找语义相关单词集.
[...]
从你说你想做什么来判断,我认为最后两个选项更有可能成功.如果关系不在Wordnet中,那么语义相似性将不起作用,OpenCyc似乎对斯诺克不太了解,除了它存在的事实.
我认为n-gram和LSA(或类似的东西)的组合将是一个好主意.N-gram频率将找到与您的目标概念紧密相关的概念(例如网球),LSA将找到相同句子/文档中提到的相关概念(例如net,serve).此外,如果您只对名词感兴趣,过滤输出以仅包含名词或名词短语(通过使用词性标注器)可能会改善结果.
在第一种情况下,您可能正在寻找n = 2的n-gram.您可以从Google这样的地方获取它们,或者从所有维基百科中创建自己的n-gram.
有关更多信息,请查看此相关的Stack Overflow问题.