像这个问题一样,我有兴趣通过词性获得大量单词(一长串名词;一串形容词),以便在其他地方以编程方式使用。这个答案有一个使用 WordNet 数据库(SQL)格式的解决方案。
有没有办法使用 Python 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 = []
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()]
您应该使用Moby Parts of Speech Project数据。不要只使用默认情况下直接在 NLTK 中的内容。为此下载文件将是一件小事,并且一旦加载,就很容易用 NLTK 解析它们。
本周早些时候我看到了一个类似的问题(找不到链接),但就像我当时说的那样,我认为维护名词/形容词/任何东西的列表都不是一个好主意。这主要是因为同一个词可以有不同的词性,这取决于上下文。
但是,如果您仍然坚持使用这些列表,那么我将这样做(我没有在这台机器上安装有效的 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)
希望这可以帮助