2016-11-30 13 views
0

名前付きエンティティ認識/分類を実行し、IOBタグ付き形式で出力を生成する必要があります。NLTK - チャンクされたツリーをリストに変換する(IOBタグ付け)

私はNLTK-train libraryによって配信されるNLTKチャンクを使用していますが、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) 

、我々は次のように、ツリーとしてCを得る:

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

...

しかし、私はのようなものを探しています:IOBです

Barcelona - LOC 
Juan - PER 
... 

list_of_wordsパラメータのタグ付きリストをlist_of_wordsと同じ順序で並べ替えます。

ツリーからタグ付きリストを取得するにはどうすればよいですか?

+0

彼らは2.7に相当するピクルスを持っていますか?あなたのスクリプトを実行する際にエラーが発生しました –

+0

'NLTK-trainer'は' NLTK'ではありませんので注意してください; P – alvas

+0

@bogsあなたはIOBが何であるかを明確にしているようです。シンプルな仮面ライダー用語では、単純な例でチャンクの内側または外側のチャンクの始まりを意味するものです...私は私が知っていると信じていると信じています。Chinking and Chunking ..多くのありがとうCheers raky https://stackoverflow.com/questions/1598940/in-natural-言語処理、チャンクの目的とは何か – 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タグは内側と外側のためOのために、このフォーマット初めのためB- {タグ}I- {タグ}であること。

関連する問題