Стэнфордское распознавание именованных объектов разрывает теги, когда в тексте есть точка?

Я недавно работаю в проекте, который включает распознавание именованных сущностей. Я генерирую модель NER, предоставляя свои собственные данные для обучения. Проблема с NER заключается в том, что он прекращает тегирование, когда встречает точку. Например, если у меня есть текст типа

«Джон работает в Индии. Он работает в Intel Inc.»

теггер NER даст следующий результат для приведенного выше текста

"John-NAME" "работает-O" "in-O" "India-PLACE".

Он не обрабатывает последующие предложения

т.е. "Он работает в Intel Inc."

Так что в основном он ломается при полной остановке (.).

Есть ли способ изменить это в NER? Можно ли решить эту проблему в файле свойств?

Данные выглядят так:

«1.Джон ест банан 2. он идет в офис 3. он капитан команды 5. он любит крик 6. он идет плавать 7. он любит яблоко»

Поэтому в этом случае я не могу использовать sentence tokenizer, поскольку он разбивает предложение на основе периодов (точка).

И что касается исходного вопроса о NER, тегирование прерывается при первом появлении точки (точка).

Токенизатор предложения токенизирует указанный выше текст, как указано в коде.

    text = "1.John eats a banana 2. he goes to office 3.he is the captain of the team 5.HE LIKES CRICKET 6. HE GOES SWIMMING 7.he likes apple"
    sents = nltk.sent_tokenize(text)

Результат выглядит так: ['1.Джон ест банан 2. он идет в офис 3. он капитан команды 5. ОН НРАВИТСЯ КРИКЕТ 6.', 'ОН ИДЕТ КУПАТЬ 7. ему нравится яблоко']

Поскольку в тексте нет правильных точек, токенизатор предложений не может извлекать точные предложения.

Теперь я хочу передать весь текст NER. Я привел данные для обучения, которые выглядят так:

    This is just a part of entire data
    1   O
    .   O
    John    PER
    eats    O
    a   O
    banana  O
    2   O
    .   O
    he  PER
    goes    O
    to  O
    office  O
    3   O
    .   O
    he  PER
    is  O
    the O
    captain O
    of  O
    the O
    team    O
    5   O
    .   O
    HE  PER
    LIKES   O
    CRICKET O

Теперь код для NER такой:

    from nltk.tag.stanford import NERTagger
    import os
    java_path = "/Java/jdk1.8.0_45/bin/java.exe"
    os.environ['JAVAHOME'] = java_path
    st = NERTagger('../ner-model.ser.gz','../stanford-ner.jar')
    tagging = st.tag(text.split())   

Из приведенного выше кода теги выполняются только до наступления первого периода (точка).


person Rohan Amrute    schedule 19.11.2015    source источник
comment
Если токенизатор предложения сегментирует на точках, а ваш распознаватель NE останавливается на первом периоде, в чем именно проблема? Если вам нужно распознать сетевые элементы, содержащие точки (например, аббревиатуры), проблема прямо в вашем распознавателе, о котором вы нам ничего не говорите.   -  person alexis    schedule 20.11.2015
comment
Пожалуйста, предоставьте код, который вкратце показывает, что вы уже пробовали. Мы не хотим тратить время на догадки   -  person Spaceghost    schedule 20.11.2015
comment
@StanfordNLPHelp Можете ли вы помочь с моей проблемой ??   -  person Rohan Amrute    schedule 09.12.2015


Ответы (1)


Исправьте это, помечая по одному предложению за раз:

sents = nltk.sent_tokenize(alltext)
for sentence in sents:
    # tokenize into words, apply NE recognizer
person alexis    schedule 19.11.2015
comment
то, что вы сказали, можно сделать. Но текстовые данные, которые у меня есть, плохо отформатированы. Он содержит такие данные, как 1. Джон ест мороженое 2. Он ест гамбургеры и т. Д. Я забыл упомянуть в вопросе о проблеме с моими данными. Так что здесь токенизация предложения не сработает. - person Rohan Amrute; 19.11.2015
comment
Ты пробовал это? Токенизаторы предложений не просто ищут точки. - person alexis; 19.11.2015
comment
Переобучить токенизатор, отправленный пунктами, и это может сработать. Для нечетких реалистичных данных нет простого выхода. - person alvas; 19.11.2015
comment
Сначала убедитесь, что токенизатор обычных предложений не работает. Не предполагайте и не позволяйте одной ошибке разубедить вас: какая производительность вам нужна? (Токенизатор Punkt примерно на 99% соответствует нормальному английскому тексту.) - person alexis; 19.11.2015
comment
Использование токенизатора предложений не работает, потому что предложения не токенизируются. Он ищет точку (точка), а затем разбивает предложение. - person Rohan Amrute; 20.11.2015
comment
Что это? Это не единственное, что делает токенизатор предложений. И если токенизатор предложения не может сказать, что предложение заканчивается в определенный момент, как распознаватель NE может споткнуться об этом? Что-то не так в вашем описании. - person alexis; 20.11.2015
comment
На самом деле, я думаю, вам нужно отредактировать свой вопрос и добавить много дополнительной информации: вы просите помощи с распознавателем NE, который вы не идентифицируете, у которого проблемы с вводом, который вы не показываете . Что вы ждете от кого-нибудь здесь? Начните с вставки фрагмента реальных входных данных примерно из 10 предложений и объясните, в чем проблема. - person alexis; 20.11.2015
comment
@alexis Я описал данные, с которыми имею дело. Я просто хотел знать, есть ли способ избежать остановки тегов NER при возникновении периода (точка). - person Rohan Amrute; 20.11.2015