NLTK - 将分块树转换为列表(IOB 标记)
NLTK - Convert a chunked tree into a list (IOB tagging)
我需要执行命名实体识别/分类,并以 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)
...
但我正在寻找类似的东西:
Barcelona - LOC
Juan - PER
...
这是list_of_words参数的IOB标记列表,顺序与list_of_words相同。
如何从树中获取标记列表?
您要找的是 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 外面。
我需要执行命名实体识别/分类,并以 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)
...
但我正在寻找类似的东西:
Barcelona - LOC
Juan - PER
...
这是list_of_words参数的IOB标记列表,顺序与list_of_words相同。
如何从树中获取标记列表?
您要找的是 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 外面。