【问题标题】:how can i convert list of sentences to IOB format, saving the sentences separation in the output如何将句子列表转换为 IOB 格式,将句子分隔保存在输出中
【发布时间】:2017-05-11 19:35:54
【问题描述】:

我有一些 txt 文件,我需要将其转换为 CRF 模型的 IOB 格式。

使用 nltk tree2conlltags 我可以将标记化的、已标记的文本转换为我需要的 IOB 格式。

这样

("u'Is", 'JJ', u'O')
('Miami', 'NNP', u'B-PERSON')
('playing', 'NN', u'O')
('in', 'IN', u'O')
('Washigthon', 'NNP', u'B-GPE')
('this', 'DT', u'O')
('month', 'NN', u'O')
('?', '.', u'O')

但问题是作为输出我得到一个单词作为一个元素,但我需要一个句子作为元素。

我也尝试先将文本分成句子然后标记它们,所以我会保存句子 boundAries,但 nltk pos tagger 不接受列表类型数据。

也许有一种全新的方法来获得我需要的格式,或者

【问题讨论】:

  • 如果你想每个句子有一个元素,那么你的标签是什么?显然,您不需要 PoS 标签和命名实体,因为它们在句子级别没有多大意义。请向我们展示一个输出应该是什么样子的示例。
  • 另外,为什么你的第一个令牌是"u'Is"?看起来像是在输入字符串上调用了某处 repr()
  • 我想要一个句子作为元素,但我仍然需要所有 postagging 和 ner 标签,因为我需要它们用于条件随机字段,我不太明白为什么第一个标记“是”是一个问题,它只是一个句子的开头
  • 请编辑您的问题以显示数据应如何显示的示例。对于第一个标记:如果您看不到它不是 "Is",而是实际上是 "u'Is"(引号内带有“u”),那么没关系。

标签: python nltk pos-tagger crf


【解决方案1】:

很容易将每个句子的标记、PoS 标签和 NER 标签连接成一个字符串,例如。像这样(token_wise 是您示例中的数据):

>>> tuple(' '.join(layer) for layer in zip(*token_wise))
("u'Is Miami playing in Washigthon this month ?",
 'JJ NNP NN IN NNP DT NN .',
 'O B-PERSON O O B-GPE O O O')

你必须对每个句子重复一遍。 但这没有任何意义。您的 CRF 标注器将没有机会预测像 'O B-PERSON O O B-GPE O O O' 这样的复杂标签,因为您将遇到一个巨大的稀疏数据问题。 大多数标签只会被看到一次,输入句子更是如此。

另外,这不是 IOB 格式。在 IOB 中,每个元素都有 I、O 或 B,但不是它们的组合。

【讨论】:

  • 但这是我每个元素的 I、O 或 B,但我已经解决了问题,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多