Получите результат NER Stanford через NLTK с форматом IOB - PullRequest
0 голосов
/ 23 мая 2019

Я использую nltk в качестве интерфейса для Stanford NER Tagger. У меня есть вопрос, есть ли варианты получить результат NER в формате IOB с использованием NLTK ? Я прочитал этот вопрос , но это для пользователя Java

Версия NLTK: 3.4

Java-версия: jdk1.8.0_211 / bin

Стэнфордская модель NER: english.conll.4class.distsim.crf.ser.gz

Ввод : меня зовут Дональд Трамф

Ожидаемый результат : имя моего / O / O - / O Дональд / B-PERSON Trumph / I-PERSON

1 Ответ

1 голос
/ 25 мая 2019

TL; DR

Сначала см. Стэнфордский парсер и NLTK

Напишите простой цикл и переберите выходные данные NER:

def stanford_to_bio(tagged_sent):
    prev_tag = "O"
    bio_tagged_output = []
    current_ner = []
    for word, tag in tagged_sent:
        if tag == 'O':
            bio_tagged_output += current_ner
            bio_tagged_output.append((word, tag))
            current_ner = []
            prev_tag = 'O'
        else:
            if prev_tag == 'O':
                current_ner.append((word, 'B-'+tag))
                prev_tag = 'B'
            else:
                current_ner.append((word, 'I-'+tag))
                prev_tag = 'I'
    if current_ner:
        bio_tagged_output += current_ner
    return bio_tagged_output

tagged_sent = [('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'STATE_OR_PROVINCE')]
stanford_to_bio(tagged_sent)

[выход]:

[('Rami', 'B-PERSON'),
 ('Eid', 'I-PERSON'),
 ('is', 'O'),
 ('studying', 'O'),
 ('at', 'O'),
 ('Stony', 'B-ORGANIZATION'),
 ('Brook', 'I-ORGANIZATION'),
 ('University', 'I-ORGANIZATION'),
 ('in', 'O'),
 ('NY', 'B-STATE_OR_PROVINCE')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...