2016-11-30 13 views
0

Мне нужно выполнить распознавание/классификацию именных имен и сгенерировать вывод в формате с меткой IOB.NLTK - преобразование фрагментированного дерева в список (отметка IOB)

Я использую chunker NLTK, поставляемый NLTK-train library, но это создает дерево, а не список тегов IOB.

def chunk_iob(list_of_words): 
    nltk_tagger = nltk.data.load("taggers/conll2002_aubt.pickle") 
    nltk_chunker = nltk.data.load("chunkers/conll2002_NaiveBayes.pickle") 

    t = nltk_tagger.tag(list_of_words) 
    print(t) 
    c = nltk_chunker.parse(t) 
    print(c) 

и мы получаем с как дерево, как:

(S 
    (LOC Barcelona/NC) 
    (PER Juan/NC :/Fd) 

...

Но я ищу что-то вроде:

Barcelona - LOC 
Juan - PER 
... 

который является IOB помеченный список параметра list_of_words, в том же порядке, что и list_of_words.

Как я могу получить этот помеченный список из дерева?

+0

У них есть эквивалентные соленые огурцы для 2,7? Я получаю сообщение об ошибке с вашим скриптом –

+0

Обратите внимание, что 'NLTK-trainer' не' NLTK'; P – alvas

+0

@bogs Кажется, у вас есть ясность, что такое IOB, я боюсь, что я не получаю ясности в IOB, не могли бы вы объяснить в простой непрофессиональный термин, что это означает внутри или снаружи кусок начало куска с простым примером ... я верю, что я понимаю Чиндинг и Чанкинг. Большое спасибо Приветствия raky https://stackoverflow.com/questions/1598940/in-natural- язык обработки-что-это-на-цель-в-CHUNKING – raky

ответ

3

То, что вы ищете, это tree2conlltags и его обратный conlltags2tree. Вот как это работает:

from nltk import word_tokenize, pos_tag, ne_chunk 
from nltk import conlltags2tree, tree2conlltags 


tree = ne_chunk(pos_tag(word_tokenize("New York is my favorite city"))) 
print tree 
# (S (GPE New/NNP York/NNP) is/VBZ my/PRP$ favorite/JJ city/NN) 

iob_tags = tree2conlltags(tree) 
print iob_tags 
# [('New', 'NNP', u'B-GPE'), ('York', 'NNP', u'I-GPE'), ('is', 'VBZ', u'O'), ('my', 'PRP$', u'O'), ('favorite', 'JJ', u'O'), ('city', 'NN', u'O')] 

tree = conlltags2tree(iob_tags) 
print tree 
# (S (GPE New/NNP York/NNP) is/VBZ my/PRP$ favorite/JJ city/NN) 

Обратите внимание, что теги IOB в этом формате B- {метка} для начала I- {метка} для внутренней и O для внешней стороны.

 Смежные вопросы

  • Нет связанных вопросов^_^