我正在研究一个NLTK项目,原则上就像标准词库一样,但是(准)连续。举一个例子,有几十个与书籍相关的条目,包括宗教经典和分类帐。
我试着摆弄一些术语,但我似乎只是通过这样做得到了一小部分。 (A"分类帐"结果包含"日记和#34;但这些物质的收集量比通过阅读书籍找到的要小得多。)对#34; synsets"的讨论。在文档中似乎暗示你可以找到接近现有术语的术语,但是同义词就像岛屿一样,或者对我这样看。
有什么(如果有的话)可以说出像#34;我想要所有高匹配分数高于XYZ阈值的单词"或者"我想匹配最近的n个相关术语。"文档看起来是可行的,有一个非常好的方法来计算两个单词之间的邻近分数,但不知道如何调整阈值或者如何请求n个最接近的匹配。
这里我最好的赌注是什么?
答案 0 :(得分:2)
如果你想能够计算任意词对之间的距离,那么WordNet就是错误的工具:它是一个特定术语的网络,所以要么两个节点之间有一条路径,要么就没有。改为寻找基于语料库的措施。
快速google给了this thread(不是SO)可以作为起点。
在nltk中,我首先看看nltk.text.ContextIndex
,它似乎是nltk演示函数nltk.Text.similar()
的后面。它不会计算单词对之间的距离,但至少你会有一个丰富的上下文网络,你可以从中开始。
>>> contexts = nltk.text.ContextIndex(nltk.corpus.brown.words()[:100000])
>>> contexts.similar_words("fact")
['jury', 'announcement', 'Washington', 'addition', '1961', 'impression',
'news', 'belief', 'commissioners', 'Laos', 'return', '1959', '1960', '1956',
'result', 'University', 'opinion', 'work', 'course', 'hope']
我会留给你删除标点符号,停用词等。我还没有看过这背后的算法,但如果你不这样做,你总能实现自己喜欢的算法。为你工作。