Распознавание именованных объектов с использованием NLTK: извлечение имени, адреса и организации аудитора

Я пытаюсь использовать nltk для определения лица, организации и места из предложения.

Мой вариант использования состоит в том, чтобы в основном извлечь имя аудитора, организацию и место из годового финансового отчета.

С nltk в python результаты не кажутся действительно удовлетворительными

import nltk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag

ex='Alastair John Richard Nuttall (Senior statutory auditor) for and on behalf of Ernst & Young LLP (Statutory auditor) Leeds'

ne_tree = ne_chunk(pos_tag(word_tokenize(ex)))

print(ne_tree)

Tree('S', [Tree('PERSON', [('Alastair', 'NNP')]), Tree('PERSON', [('John', 'NNP'), ('Richard', 'NNP'), ('Nuttall', 'NNP')]), ('(', '('), Tree('ORGANIZATION', [('Senior', 'NNP')]), ('statutory', 'NNP'), ('auditor', 'NN'), (')', ')'), ('for', 'IN'), ('and', 'CC'), ('on', 'IN'), ('behalf', 'NN'), ('of', 'IN'), Tree('GPE', [('Ernst', 'NNP')]), ('&', 'CC'), Tree('PERSON', [('Young', 'NNP'), ('LLP', 'NNP')]), ('(', '('), ('Statutory', 'NNP'), ('auditor', 'NN'), (')', ')'), ('Leeds', 'NNS')])

Как видно выше, «Лидс» не определяется как место, а ТОО «Эрнст энд Янг» не признается организацией.

Есть ли лучшие способы добиться этого в Python?


person abhi1489    schedule 09.04.2019    source источник


Ответы (1)


Попробуйте spacy вместо NLTK:

https://spacy.io/usage/linguistic-features#named-entities

Я думаю, что предварительно обученные модели spacy, вероятно, будут работать лучше. Результаты (с spacy 2.1, en_core_web_lg) для вашего предложения:

Аластер Джон Ричард Наттолл ЛИЦО
Ernst & Young LLP ORG
Лидс GPE

person aab    schedule 09.04.2019
comment
Спасибо. Сможем ли мы загрузить эту модель на машину без GPU? - person abhi1489; 09.04.2019