1

名前付きエンティティの認識/分類を実行し、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 を Tree として取得します。

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

...

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

Barcelona - LOC
Juan - PER
...

これは、list_of_words パラメーターの IOB タグ付きリストであり、list_of_words と同じ順序です。

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

4

1 に答える 1

12

あなたが探しているのは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-{tag } 、内側がI-{tag} 、外側がOであることに注意してください。

于 2016-11-30T12:56:52.487 に答える