Python 2.7 NLTK-如何使用NER

Python 2.7 NLTK-如何使用NER,python-2.7,nltk,Python 2.7,Nltk,如何从NLTK调用NER,以获得位于同一目录中的所有TXT文件的前200个字符的所有结果 当我尝试此代码时: for filename in os.listdir(ebooksFolder): fname, fextension = os.path.splitext(filename) if (fextension == '.txt'): newName = 'ner_' + filename file = open(eb

如何从NLTK调用NER,以获得位于同一目录中的所有TXT文件的前200个字符的所有结果


当我尝试此代码时:

for filename in os.listdir(ebooksFolder):
    fname, fextension = os.path.splitext(filename)
        if (fextension == '.txt'):
            newName = 'ner_' + filename
            file = open(ebooksFolder + '\\' + filename)
            rawFile = file.read()
            partToUse = rawFile[:50]
            segmentedSentences = nltk.sent_tokenize(partToUse)
            tokenizedSentences = [nltk.word_tokenize(sent) for sent in segmentedSentences]
            posTaggedSentences = [nltk.pos_tag(sent) for sent in tokenizedSentences]
            nerResult = nltk.ne_chunk(posTaggedSentences)
            pathToCopy = 'C:\\Users\\Felipe\\Desktop\\books_txt\\'
            nameToSave = os.path.join(pathToCopy, newName + '.txt')
            newFile = open(nameToSave, 'w')
            newFile.write(nerResult)
            newFile.close()
我发现以下错误:

Traceback (most recent call last):
  File "<pyshell#77>", line 11, in <module>
    nerResult = nltk.ne_chunk(posTaggedSentences)
  File "C:\Python27\lib\site-packages\nltk\chunk\__init__.py", line 177, in ne_chunk
    return chunker.parse(tagged_tokens)
  File "C:\Python27\lib\site-packages\nltk\chunk\named_entity.py", line 116, in parse
    tagged = self._tagger.tag(tokens)
  File "C:\Python27\lib\site-packages\nltk\tag\sequential.py", line 58, in tag
    tags.append(self.tag_one(tokens, i, tags))
  File "C:\Python27\lib\site-packages\nltk\tag\sequential.py", line 78, in tag_one
    tag = tagger.choose_tag(tokens, index, history)
  File "C:\Python27\lib\site-packages\nltk\tag\sequential.py", line 554, in choose_tag
    featureset = self.feature_detector(tokens, index, history)
  File "C:\Python27\lib\site-packages\nltk\tag\sequential.py", line 605, in feature_detector
    return self._feature_detector(tokens, index, history)
  File "C:\Python27\lib\site-packages\nltk\chunk\named_entity.py", line 49, in _feature_detector
    pos = simplify_pos(tokens[index][1])
  File "C:\Python27\lib\site-packages\nltk\chunk\named_entity.py", line 178, in simplify_pos
    if s.startswith('V'): return "V"
AttributeError: 'tuple' object has no attribute 'startswith'
回溯(最近一次呼叫最后一次):
文件“”,第11行,在
nerResult=nltk.ne_块(后签名)
文件“C:\Python27\lib\site packages\nltk\chunk\\uuuu init\uuuuu.py”,第177行,在ne\u chunk中
返回chunker.parse(标记的\u标记)
文件“C:\Python27\lib\site packages\nltk\chunk\named_entity.py”,第116行,在parse中
taged=self.\u tagger.tag(标记)
文件“C:\Python27\lib\site packages\nltk\tag\sequential.py”,第58行,在标记中
tags.append(self.tag_one(令牌、i、标记))
文件“C:\Python27\lib\site packages\nltk\tag\sequential.py”,第78行,在tag\u one中
tag=tagger。选择_标记(标记、索引、历史)
文件“C:\Python27\lib\site packages\nltk\tag\sequential.py”,第554行,在choose\u标记中
featureset=self.feature\u检测器(令牌、索引、历史)
文件“C:\Python27\lib\site packages\nltk\tag\sequential.py”,第605行,在功能检测器中
返回自。\功能\检测器(令牌、索引、历史)
文件“C:\Python27\lib\site packages\nltk\chunk\named_entity.py”,第49行,在_feature_detector中
pos=简化(令牌[索引][1])
文件“C:\Python27\lib\site packages\nltk\chunk\named\u entity.py”,第178行,在simplify\u pos中
如果s.startswith('V'):返回“V”
AttributeError:“tuple”对象没有属性“startswith”

将文本标记为句子,然后标记为POS标记,您需要重复标记句子列表,如下所示:

nerResult = [nltk.ne_chunk(pts) for pts in posTaggedSentences]
与此相反:

nerResult = nltk.ne_chunk(posTaggedSentences)

如果有人能推荐一个关于NLTK的NER和词性标记的好教程,那就太好了。展示一些你到目前为止所做的工作的代码,我们将看看我们能做些什么help@Spaceghost请请看我添加到问题中的代码和错误。这是一个特别有帮助的澄清,因为将后者作为解决问题的方法,最终会出现上述错误。