使用NLTK获取Python中大量的名词(或形容词);或者Python疯狂的Libs

使用NLTK获取Python中大量的名词(或形容词);或者Python疯狂的Libs,python,machine-learning,nltk,Python,Machine Learning,Nltk,比如,我感兴趣的是通过词性(一长串名词;一长串形容词)获得一大串单词,以便在其他地方以编程方式使用。有一个使用WordNet数据库(SQL)格式的解决方案 有没有一种方法可以使用Python NLTK中内置的语料库/工具获得这样的列表。我可以获取大量文本,对其进行解析,然后存储名词和形容词。但是考虑到内置的词典和其他工具,有没有更聪明的方法来简单地提取NLTK数据集中已经存在的单词,编码为名词/形容词(无论什么) 谢谢。您应该使用这些数据。不要拘泥于默认情况下只使用NLTK中直接包含的内容。下载

比如,我感兴趣的是通过词性(一长串名词;一长串形容词)获得一大串单词,以便在其他地方以编程方式使用。有一个使用WordNet数据库(SQL)格式的解决方案

有没有一种方法可以使用Python NLTK中内置的语料库/工具获得这样的列表。我可以获取大量文本,对其进行解析,然后存储名词和形容词。但是考虑到内置的词典和其他工具,有没有更聪明的方法来简单地提取NLTK数据集中已经存在的单词,编码为名词/形容词(无论什么)


谢谢。

您应该使用这些数据。不要拘泥于默认情况下只使用NLTK中直接包含的内容。下载这些文件几乎不需要什么工作,一旦加载NLTK,就可以很容易地解析它们。

值得注意的是,默认情况下,Wordnet实际上是NLTK下载程序中包含的语料库之一。因此,可以想象,您可以使用已经找到的解决方案,而不必重新发明任何轮子

例如,您可以这样做来获取所有名词语法集:

from nltk.corpus import wordnet as wn

for synset in list(wn.all_synsets('n')):
    print synset

# Or, equivalently
for synset in list(wn.all_synsets(wn.NOUN)):
    print synset
这个例子会给出你想要的每一个名词,它甚至会将它们分组到它们的语法集中,这样你就可以尝试确保它们在正确的上下文中使用

如果你想把它们都列在一个列表中,你可以做如下的事情(尽管这会根据你想如何使用单词和语法集而有所不同):

或作为一个班轮:

all_nouns = [word for synset in wn.all_synsets('n') for word in synset.lemma_names()]

本周早些时候我看到了一个类似的问题(找不到链接),但正如我当时所说的,我不认为维护一个名词/形容词/任何东西的列表是一个好主意。这主要是因为同一个词可以有不同的词性,这取决于上下文

但是,如果您仍然死心塌地地地使用这些列表,那么我会这样做(我没有在这台机器上安装一个正常工作的NLTK,但我记得一些基本知识):


希望这能有所帮助

Oof,既然可以使用预先构建的语料库,为什么还要标记不同的语料库呢?我觉得对于一个大型语料库来说,这需要非常长的时间。根据使用情况,同一个“词”(比如说“字符串”以避免语言学家生气)可能作为多个词类存在这一事实是没有问题的。如果你在写一个疯狂的Lib补全词,scratch既是名词又是动词这一事实是没有问题的,对吧?我很喜欢这个解决方案不需要下载/解析另一个文件。@SlaterTyranus:我不是想建议OP在pos上标记一个新的语料库。相反,我想传达的是,NLTK附带的一个语料库应该被标记。如果我没记错的话,如果语料库已经被标记,
pos_-tag
不会执行任何新的标记,而是返回已经标记的数据ooh,我明白了。我的错误,这更有道理。太好了。我试试这个。我知道wordnet是NLTK的一部分,但我没有充分了解api。谢谢。@cforster不用担心,很乐意帮忙。这应该是
…列表(wn.all\u synsets(wn.noon))…
?wn.NOUN是一个常量,设置为'n',但它的值更大readable@Oxinabox可以说更具可读性,不过我会附上这张便条,谢谢你提出来!Python3的列表(wn.wordnet.all_语法集(wn.wordnet.noon)),也可以使用“ADJ”、“ADJ_SAT”、“ADV”、“VERB”
all_nouns = [word for synset in wn.all_synsets('n') for word in synset.lemma_names()]
nouns = set()
for sentence in my_corpus.sents():
    # each sentence is either a list of words or a list of (word, POS tag) tuples
    for word, pos in nltk.pos_tag(sentence): # remove the call to nltk.pos_tag if `sentence` is a list of tuples as described above

        if pos in ['NN', "NNP"]: # feel free to add any other noun tags
            nouns.add(word)