Распознавание именованных сущностей для ошибки Python - PullRequest
0 голосов
/ 09 октября 2018

Итак, я пытаюсь написать текстовый препроцессор и пытаюсь заставить работать nltk.ne_chunk (), но я получаю массу ошибок для следующего кода

z = "Francois Legault of the CAQ will now become the new premier of Quebec. This is possible as his party defeated the Liberals in the Provincial elections held on October 1st 2018."

def preprocess_pipe1(doc1):
sent1 = nltk.sent_tokenize(doc1)
#print(sent1)
print(" ")
print ("SENTENCE SPLITTER")
for x in sent1:
    print(x)

print(" ")

sent1 = [nltk.word_tokenize(sent2) for sent2 in sent1]
#print(sent1)
print(" ")
print ("TOKENIZER")
for x in sent1:
    print(x)

print(" ")

sent1 = [nltk.pos_tag(sent2) for sent2 in sent1]
#print(sent1)
print(" ")
print ("POS TAGGER")
for x in sent1:
    print(x)

return(sent1)


sent2=preprocess_pipe1(z)
sent3=nltk.ne_chunk(sent2)
print(sent3)

`Ошибки следующие

SENTENCE SPLITTER Франсуа Лего из CAQ теперь станет новым премьер-министром Квебека.Это возможно, поскольку его партия победила либералов на провинциальных выборах 1 октября 2018 года.

TOKENIZER

['Francois', 'Legault', 'of', 'the', 'CAQ', 'will', 'now', 'become', 'the', 'new', 'premier', 'of', 'Quebec', '.']
['This', 'is', 'possible', 'as', 'his', 'party', 'defeated', 'the', 'Liberals', 'in', 'the', 'Provincial', 'elections', 'held', 'on', 'October', '1st', '2018', '.']


POS TAGGER
[('Francois', 'NNP'), ('Legault', 'NNP'), ('of', 'IN'), ('the', 'DT'), ('CAQ', 'NNP'), ('will', 'MD'), ('now', 'RB'), ('become', 'VB'), ('the', 'DT'), ('new', 'JJ'), ('premier', 'NN'), ('of', 'IN'), ('Quebec', 'NNP'), ('.', '.')]
[('This', 'DT'), ('is', 'VBZ'), ('possible', 'JJ'), ('as', 'IN'), ('his', 'PRP$'), ('party', 'NN'), ('defeated', 'VBD'), ('the', 'DT'), ('Liberals', 'NNS'), ('in', 'IN'), ('the', 'DT'), ('Provincial', 'NNP'), ('elections', 'NNS'), ('held', 'VBD'), ('on', 'IN'), ('October', 'NNP'), ('1st', 'CD'), ('2018', 'CD'), ('.', '.')]

Ошибка:

Traceback (самая последняявызовите последний): Файл "C: / Users / Робин Карлозе / PycharmProjects / NLTK Test 1 / Code 5 - NER test.py", строка 71, в sent3 = nltk.ne_chunk (sent2) Файл "C: \ Users \ Робин Карлозе\ PycharmProjects \ NLTK Test 1 \ venv \ lib \ site-packages \ nltk \ chunk__init __. Py ", строка 177, в ne_chunk, возвращает файл chunker.parse (tagged_tokens)" C: \ Users \ Робин Карлозе \ PycharmProjects \ NLTK Test 1 \venv \ lib \ site-packages \ nltk \ chunk \ named_entity.py ", строка 123, в файле parse tagged = self._tagger.tag (tokens) Файл" C: \ Users \ Робин Карлозе \ PycharmProjects \ NLTK Test 1 \ venv \ "lib \ site-packages \ nltk \ tag \ sequential.py ", строка 63, в теге tags.append (self.tag_one (tokens, i, tags)) Файл" C: \ Users \ Робин Карлозе \ PycharmProjects \ NLTK Test 1\ venv \ lib \ site-packages \ nltk \ tag \ sequential.py ", строка 83, в tag_one tag = tagger.choose_tag (токены, индекс, история) Файл" C: \ Users \ Robin Karlose \ PycharmProjects \ NLTK Test 1 \ venv \ lib \ site-packages \ nltk \ tag \ sequential.py ", строка 632, в choose_tag featureset = self.feature_detector (токены, индекс, история) Файл" C: \ "Users \ Robin Karlose \ PycharmProjects \ NLTK Test 1 \ venv \ lib \ site-packages \ nltk \ tag \ sequential.py ", строка 680, в feature_detector возвращает self._feature_detector (токены, индекс, история) Файл" C: \ Users "\ Robin Karlose \ PycharmProjects \ NLTK Test 1 \ venv \ lib \ site-packages \ nltk \ chunk \ named_entity.py ", строка 56, в _feature_detector pos = simpify_pos (tokens [index] [1]) Файл" C: \ Users "\ Robin Karlose \ PycharmProjects \ NLTK Test 1 \ venv \ lib \ site-packages \ nltk \ chunk \ named_entity.py ", строка 186, в simpify_pos, если s.startswith ('V'): вернуть« V »AttributeError: 'tuple'У объекта нет атрибута' начинается с '

Как ни странно, когда я запускаю этот код, NER работает просто отлично

import nltk
import nltk.corpus

sent = nltk.corpus.treebank.tagged_sents()[22]
print(sent)
print(nltk.ne_chunk(sent))

Насколько я понимаю - в обоих случаях яотправка текста с тегом POS в функцию распознавания именованных сущностей NLTK (т.е. nltk.ne_chunk ()), но я не могу понять, почему в первом случае так много ошибок.

Буду признателен, если кто-нибудь сможет дать некоторое представление об этом!

...