2015-11-19 4 views
0

Я недавно работал над проектом, который включает в себя распознавание имен и имен. Я создаю модель NER, предоставив свои собственные данные обучения. Проблема с NER заключается в том, что она перестает отмечать теги, когда она встречается с полной остановкой. Например, если у меня есть текст, какПометка «Распознавание сущности» в Стэнфорде помечается, когда в тексте есть полная остановка?

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

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

"John-NAME" "works-O" "in-O" "India-PLACE".

Он не обрабатывает последовательное предложение

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

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

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

Данные выглядит следующим образом:

«1.John ест банан 2. он идет в офисе 3.he является капитаном команды 5.HE ЛЮБИТ CrickeT 6. ОН ИДЕТ плавательный 7.he нравится яблоко "

Так что в этом случае я не могу использовать 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.John ест банан 2. он идет в офис 3.he является капитан команды 5.HE лЮБИТ CrickeT 6. «» он идет ПЛАВАНИЕ 7.he любит яблоко ']

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

Теперь я хочу передать весь фрагмент текста в 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 

Теперь код для НЭКЕ, как это:

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()) 

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

+0

Если предложение токенизатор сегментов в периоды и ваш NE распознаватель останавливается в первом периоде, что именно проблема? Если вам нужно распознавать NE, которые содержат периоды (например, сокращения), проблема прямо связана с вашим распознавателем, о котором вы ничего нам не говорите. – alexis

+0

Просьба указать код, который вкратце показывает, что вы пробовали до сих пор. Мы не хотим тратить время на угадывание – Spaceghost

+0

@StanfordNLPHelp Можете ли вы помочь с моей проблемой? –

ответ

0

Fix это помечая одно предложение в то время:

sents = nltk.sent_tokenize(alltext) 
for sentence in sents: 
    # tokenize into words, apply NE recognizer 
+0

что вы сказали можно. Но текстовые данные, которые у меня есть, плохо отформатированы. Он содержит данные типа «1. john ест мороженое 2. он ест гамбургеры и т. Д.». Я забыл упомянуть в вопросе проблему с моими данными. Таким образом, токенизация предложения не будет работать. –

+0

Вы пробовали? Тестовые токенизаторы не просто ищут периоды. – alexis

+0

Переустановите punkt, отправленный токенизатор, и это может сработать. Для нечистых реалистичных данных нет простого выхода. – alvas