2015-03-30 49 views
1

我有两个非结构化文本输入列表,我想查找区分listAlistB的单词。 例如,如果listA是的“哈利·波特”的文字和listB是的“安德的游戏”一文,对listA的区分元素将[wand, magic, wizard, . . .]listB区分元素将[ender, buggers, battle, . . .]我如何从语料库中发现与其他语料库区别开来的单词列表? Python

我试着有一点与python-nltk模块有关,并且能够轻松找到每个列表中最常见的单词,但这并不完全是我所追求的。

+0

listA如何知道魔杖,魔法和奇才? – Mathemats 2015-03-30 23:40:38

+0

我想你会想将每本书的频率计数与某些标准语料库中的频率计数进行比较。如果这些词在语料库中频率较低,但在书中频率相对较高,则它们是有区别的。 – Marius 2015-03-30 23:41:57

+0

'topic-model',试试https://radimrehurek.com/gensim/ – alvas 2015-03-31 09:43:40

回答

0

我已经尝试了一下使用Python,NLTK,并且我能够很容易地找到每个列表中最常见的词,但不是我正是后

我猜你的意思是,它会提出像“and”,“the”,“of”等词作为频率最高的单词。这些单词不是很有帮助,它们基本上只是将单词组合在一起形成一个句子的粘合剂,您可以将它们删除,但是您需要一个名为“stoplist”的无用单词列表,nltk具有这样的列表from nltk.corpus import stop words

你可能想看看TF.IDF得分。这会给一个文档中常见的单词赋予更高的权重,但一般而言并不常见。通常情况下,您会使用大型语料库来计算一般常用的词语。

+0

不错,TF.IDF评分给了我非常好的结果,喂了一个大的语料库。感谢您的帮助,jksnw – 2015-03-31 21:05:40

0

您可以使用synsets来完成它。获取synsets NLTK包含一个名为wordnet的非常强大的库。

Wordnet是人类语言的一个大型数据库(缺少一个更好的词),不仅是英语,它还支持许多其他语言。

Synset与您在听到术语时所获得的相似。几乎像一个同义词,但不是那么严格。请转到链接,更好的定义。

Synset Closures是什么可以帮助你最。例如,'蜜蜂'是一种动物,一种昆虫,一种生物;哈利波特是虚构的人类精灵。

from nltk.corpus import wordnet as wn 
dog = wn.synset('dog.n.01') 
hyper = lambda s: s.hypernyms() 
list(dog.closure(hyper)) 

Heres一本书,教你NLTK的表面,是不是很好,但要与NTLK HOWTOs

一起启动的好地方。如果你想更深层次的东西,我不能帮你,我不知道最NTLK提供给我们的定义和功能,但synsets是一个很好的开始。

相关问题