【问题标题】:NLTK - Convert a chunked tree into a list (IOB tagging)NLTK - 将分块树转换为列表(IOB 标记)
【发布时间】:2017-04-14 06:06:00
【问题描述】:

我需要执行命名实体识别/分类,并以 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的顺序相同。

如何从树中获取该标记列表?

【问题讨论】:

  • 他们有 2.7 的同等泡菜吗?我在运行您的脚本时遇到错误
  • 请注意NLTK-trainer 不是NLTK ;P
  • @bogs 看来你很清楚什么是 IOB,恐怕我对 IOB 不清楚,你能用简单的外行术语解释一下在块的内部或外部是什么意思简单的例子...我相信我理解 Chinking 和 Chunking.. 非常感谢 Cheers raky stackoverflow.com/questions/1598940/…

标签: nltk nltk-trainer


【解决方案1】:

您正在寻找的是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 B-{CHUNK_TYPE} - for the word in the beginning chunk I-{CHUNK_TYPE} - for words里面的描述块 O——在任何块之外它们用于将相似类型的实体分组到一个块中。 ex 识别一个人的名字,姓氏
猜你喜欢
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2014-01-16
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多