10

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

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

谢谢。

4

3 回答 3

12

值得注意的是,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 = []
for synset in wn.all_synsets('n'):
    all_nouns.extend(synset.lemma_names())

或作为单行:

all_nouns = [word for synset in wn.all_synsets('n') for word in synset.lemma_names()]
于 2013-07-19T18:43:21.817 回答
3

您应该使用Moby Parts of Speech Project数据。不要只使用默认情况下直接在 NLTK 中的内容。为此下载文件将是一件小事,并且一旦加载,就很容易用 NLTK 解析它们。

于 2013-07-19T18:39:36.797 回答
1

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

但是,如果您仍然坚持使用这些列表,那么我将这样做(我没有在这台机器上安装有效的 NLTK,但我记得基础知识):

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)

希望这可以帮助

于 2013-07-19T18:45:00.650 回答