NLTK Наивный Байес формат данных поезда - PullRequest
0 голосов
/ 26 апреля 2018

Задача, которую я хочу выполнить, - классифицировать Распознавание Именованных Сущностей с NLTK Naive Bayes. У меня есть свой собственный корпус, который выглядит так

Sementara itu Pengamat Pasar Modal <ENAMEX TYPE="PERSON">Dandossi Matram</ENAMEX> mengatakan, sulit bagi sebuah <ENAMEX TYPE="ORGANIZATION">kantor akuntan publik</ENAMEX> (<ENAMEX TYPE="ORGANIZATION">KAP</ENAMEX>) untuk dapat menyelesaikan audit perusahaan sebesar <ENAMEX TYPE="ORGANIZATION">Telkom</ENAMEX> dalam waktu 3 bulan.   1

Я уже извлек сущность и значение, так что стало так

[[('PERSON', 'Dandossi Matram'), ('ORGANIZATION', 'kantor akuntan publik'), ('ORGANIZATION', 'KAP'), ('ORGANIZATION', 'Telkom')], [('ORGANIZATION', 'Telkom')],...]

Затем я выравниваю список и обращаю значение кортежа в обратном порядке, чтобы порядок стал таким:

[('Dandossi Matram', 'PERSON'), ('kantor akuntan publik', 'ORGANIZATION'), ('KAP', 'ORGANIZATION'), ('Telkom', 'ORGANIZATION'), ('Telkom', 'ORGANIZATION'),...]

Поскольку наивному Байесу NLTK нужен словарь, я конвертирую список кортежей в словарь.

{'Agus': 'PERSON', 'Jawa Barat': 'LOCATION', 'Disney': 'ORGANIZATION', 'City': 'ORGANIZATION', 'manchestereveningnews': 'ORGANIZATION', 'Roma': 'LOCATION', 'PSG': 'ORGANIZATION', 'LPPNPI': 'ORGANIZATION', 'Telkomsel': 'ORGANIZATION', 'Federer': 'PERSON', 'Garuda Indonesia': 'ORGANIZATION',...}

При обучении классификатора появляется ошибка

для fname, fval в featureset.items (): AttributeError: у объекта 'str' нет атрибута 'items'

Это странно, потому что мой формат данных в словаре. Пожалуйста, помогите мне. Что касается моего кода, вот он:

import re, nltk, random
ner_list = []
with open("ner_corpus.txt", "r") as f:
    for line in f:
        #print(line)
        tags = re.findall(r'<ENAMEX\s+TYPE=\"(.+?)\">(.+?)</ENAMEX>', line)
        #tags = re.findall(r'<(?:ENAMEX\s+TYPE)=.+?>(.+?)</(?:ENAMEX)>', line)
        ner_list.append(tags)
f.close()
ner_list = [item for sublist in ner_list for item in sublist]
ner_list = list(map(lambda x: (x[1], x[0]),ner_list))
random.shuffle(ner_list)
ner_corpus = dict(ner_list)
print(ner_corpus)
splitratio = 0.8
train = ner_list[:int(len(ner_list)*splitratio)]
test = ner_list[int(len(ner_list)*splitratio):]
print(len(train))
print(len(test))
classifier = nltk.NaiveBayesClassifier.train(train)
print(nltk.classify.accuracy(classifier, test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...