【发布时间】:2020-07-25 21:34:40
【问题描述】:
要为 NER 训练 NLP 模型,必须拥有在文本上具有命名实体标签的文本数据。在许多情况下,这是由字符偏移量给出的(例如。
("Android Pay expands to Canada", [(0, 11, 'PRODUCT'), (23, 30, 'GPE')]))、BILUO 格式(例如(["Facebook", "released", "React", "in", "2014"], ["U-ORG", "O", "U-TECHNOLOGY", "O", "U-DATE"]))或类似的东西(示例取自 spaCy101)。当想要对这些数据进行预处理时,将标签保持在正确的位置很重要。例如。删除停用词或操作空白字符和标记将被删除。我的问题是:
是否有一种数据结构可以在将标签移动到新文本中的正确位置的同时对带标签的文本数据进行预处理?
如果在 python 中已经有这个实现,我也会对此感兴趣。否则我可能也愿意自己编写代码。
我使用 NER 作为这个问题的动机,但如果有更通用的数据结构可以同时存储不同类型的标签,我也会感兴趣。
例如,我想做一些这样的操作,使我的所有文档都小写。
import spacy
nlp = spacy.blank('en')
doc = nlp('Hello World! This is an amazing day!')
doc.text = doc.text.lower()
这是不可能的并返回错误。
AttributeError: attribute 'text' of 'spacy.tokens.doc.Doc' objects is not writable
【问题讨论】:
-
如果 Spacy 的标记器满足您的需求,我相信它的
Token类会跟踪原始文档中每个标记的索引,这应该有助于对齐标签。至少,如果您遇到困难,这可能是一个很好的起点。 -
我认为 spacy Docs 和 Tokens 在创建后不应该被修改。一个我已经无法轻松完成的简单示例是将所有文本更改为小写。
-
您能否提供更多细节或问题的示例? (只是为了确保我理解正确。)
-
我在问题中添加了一个我想对此类对象执行的操作示例。但我不仅希望能够切换到小写。理想情况下,我希望能够进行所有标准的文本预处理操作(去除停用词、词形还原、词干提取、空白清理……)。
标签: python data-structures nlp preprocessor named-entity-recognition