Python 3.x 如何从布朗语料库中获取动词、名词、形容词?
我一直试图从布朗语料库中分离出所有的名词、动词等,所以我尝试使用代码Python 3.x 如何从布朗语料库中获取动词、名词、形容词?,python-3.x,nlp,nltk,corpus,pos-tagger,Python 3.x,Nlp,Nltk,Corpus,Pos Tagger,我一直试图从布朗语料库中分离出所有的名词、动词等,所以我尝试使用代码 brown.all_synsets('n') 但显然,这段代码只适用于wordnet。顺便说一下,我正在使用Python3.4 编辑 @阿尔维斯的回答奏效了。但是当我把它和random一起使用时,它会出错。看一看 nn = {word for word, pos in brown.tagged_words() if pos.startswith('NN')} print(nn) 输出是 {'such', 'rather'
brown.all_synsets('n')
但显然,这段代码只适用于wordnet。顺便说一下,我正在使用Python3.4
编辑 @阿尔维斯的回答奏效了。但是当我把它和random一起使用时,它会出错。看一看
nn = {word for word, pos in brown.tagged_words() if pos.startswith('NN')}
print(nn)
输出是
{'such', 'rather', 'Quite', 'Such', 'quite'}
但是当我使用
random.choice(nn)
我明白了
回溯(最近一次呼叫最后一次):
文件“/home/aziz/Desktop/2222.py”,第5行,在
打印(随机选择(NN))
文件“/usr/lib/python3.4/random.py”,第256行,在选项中
返回序号[i]
TypeError:“set”对象不支持索引
TL;DR
>>> from nltk.corpus import brown
>>> {word for word, pos in brown.tagged_words() if pos.startswith('NN')}
在较长时间内 遍历
.tagged_words()
函数,该函数将返回('word','POS')
元组列表:
>>> from nltk.corpus import brown
>>> brown.tagged_words()
[(u'The', u'AT'), (u'Fulton', u'NP-TL'), ...]
请阅读本章了解NLTK corpora API的工作原理:
然后,对其进行列表理解,并保存一组带有名词标记的单词(例如,NN、NNS、NNP等)。
>>> {word for word, pos in brown.tagged_words() if pos.startswith('NN')}
请注意,输出可能不是您所期望的,因为带有句法和句法名词词性标记的单词不一定是语义参数/实体
另外,我认为你提取的单词不正确。仔细检查列表:
>>> nouns = {word for word, pos in brown.tagged_words() if pos.startswith('NN')}
>>> 'rather' in nouns
False
>>> 'such' in nouns
False
>>> 'Quite' in nouns
False
>>> 'quite' in nouns
False
>>> 'Such' in nouns
False
列表的输出为:
为什么
随机。当nn
是一个集合时,选择(nn)
失败?
random.choice()
的输入是一个序列(请参阅)
随机选择(seq)
从非空序列返回随机元素
如下。如果seq为空,则引发indexer
python中的python序列类型是
- python2.x中的str、unicode、list、tuple、bytearray、buffer、xrange(请参阅)
- Python3.x中的列表、元组和范围
- (二进制序列类型)Python 3.x中的字节、字节数组、内存视图
- Python 3.x中的(文本字符串序列)
str
由于
set
不是序列,因此您将获得索引器
欢迎使用StackOverflow。请不要将答案贴在其他答案的回复上,而是编辑您的问题,查看单词是如何以棕色标记的,因为它们大多被视为金/银标准(即基本事实),所以别无选择,只能接受标记。您确定您的输出中得到了“相当”吗?我没有=(是的,我只是做了一些修改。实际的代码是{word-for-word,pos-in-brown.tagged_-words(),如果pos.startswith('NN')),但我把它改成了[word-for-word,pos-in-brown.tagged_-words(),如果pos.startswith('NN')]我很满意。请为这个代码片段添加一些支持文本。解释为什么它会解决OP的问题。帮助其他人理解。当然@APC,抱歉正在准备早餐,所以我做了一个快速的回答。我想你想知道,因为这出现在低质量的后期评论中。当你在做早餐时,我喜欢我的鸡蛋有阳光的一面up:)@alvas,如果我使用自己的语料库,代码会工作吗?如我所见,在这种情况下将不会有.tagged\u words()
方法。有什么提示吗?
>>> nouns = {word for word, pos in brown.tagged_words() if pos.startswith('NN')}
>>> 'rather' in nouns
False
>>> 'such' in nouns
False
>>> 'Quite' in nouns
False
>>> 'quite' in nouns
False
>>> 'Such' in nouns
False