【问题标题】:How do I discover list of words from corpus which distinguish from another corpus? Python如何从语料库中发现区别于另一个语料库的单词列表? Python
【发布时间】:2015-03-30 23:22:41
【问题描述】:

我有两个非结构化文本输入列表,我想找到区分 listAlistB 的单词。 例如,如果listA 是“哈利波特”的文本,listB 是“安德的游戏”的文本,则 listA 的区别元素将是 [wand, magic, wizard, . . .]listB 的区别元素将是[ender, buggers, battle, . . .]

我对 python-nltk 模块进行了一些尝试,并且能够轻松找到每个列表中最常用的单词,但这并不是我想要的。

【问题讨论】:

  • listA 是如何知道魔杖、魔法和巫师的?
  • 我猜你会想要将每本书中的频率计数与某些标准语料库中的频率计数进行比较。如果词在语料库中出现的频率较低,而在书籍中出现的频率相对较高,则它们是有区别的。
  • topic-model,试试radimrehurek.com/gensim

标签: python nlp nltk


【解决方案1】:

我尝试了一些 python-nltk,并且能够轻松找到每个列表中最常见的单词,但不完全是我所追求的

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

您可能想看看TF.IDF 评分。这将为在一个文档中常见但一般不常见的单词赋予更高的权重。通常你会使用一个大的语料库来计算一般来说哪些词是常见的。

【讨论】:

  • 很好,TF.IDF 评分给了我非常好的结果,当喂一个大的语料库时。感谢您的帮助,jksnw
【解决方案2】:

您可以使用同义词来完成它。要获得同义词集,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 提供给我们的大部分定义和功能,但是同义词集是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2013-05-14
    • 2021-02-10
    • 2020-08-05
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多