如何用元数据注释文本文档?

数据挖掘 nlp 元数据 数据清理 文本挖掘
2021-09-26 23:28:03

有很多文本文档(自然语言,非结构化),用一些语义元数据注释它们的可能方法是什么?例如,考虑一个简短的文档:

I saw the company's manager last day.

为了能够从中提取信息,必须使用附加数据对其进行注释以减少歧义。查找此类元数据的过程没有问题,因此假设它是手动完成的。问题是如何以一种可以更方便/更有效地对其进行进一步分析的方式存储这些数据?

一种可能的方法是使用 XML 标记(见下文),但它似乎过于冗长,并且可能有更好的方法/指南将此类元数据存储在文本文档中。

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.
4个回答

就我个人而言,我主张使用既不是 NLP 领域特有的东西,又是足够通用的东西,即使你已经开始超越这个元数据级别,它仍然可以用作工具。我会特别选择一种无论开发环境如何都可以使用的格式,以及一种在相关时可以保留一些基本结构的格式(如标记化)

这可能看起来很奇怪,但我会诚实地建议JSON它得到了很好的支持,支持了很多结构,并且足够灵活,你不应该因为不够强大而不得不离开它。对于您的示例,如下所示:

{'text': 'I saw the company's manager last day.", {'Person': [{'name': 'John'}, {'indices': [0:1]}, etc...]}

您在这里获得的任何 NLP 特定格式的一大优势是JSON可以在任何环境中解析,而且由于您可能无论如何都必须编辑您的格式,JSON 适合非常简单的编辑,让您的距离很短到其他格式。

如果需要,您还可以隐式存储标记化信息:

{"text": ["I", "saw", "the", "company's", "manager", "last", "day."]}

编辑:澄清元数据的映射是非常开放的,但这里有一个例子:

{'body': '<some_text>',
 'metadata': 
  {'<entity>':
    {'<attribute>': '<value>',
     'location': [<start_index>, <end_index>]
    }
  }
}

希望对您有所帮助,如果您还有其他问题,请告诉我。

通常,您不希望以这种方式使用 XML 标记来标记文档,因为标记可能会重叠。

UIMAGATE和类似的 NLP 框架表示标签与文本分开。每个标签,例如Person、等ACMEJohn都存储为标签的开始位置和结束位置。因此,对于 tag ACME,它将被存储为从位置 11 开始并在位置 17 结束。

根据我的评论,小子注释工具可能对您有用。我已经尝试了很多,这是我发现的最好的。它有一个很好的用户界面,可以支持许多不同类型的注释。注释存储在单独的 .annot 文件中,其中包含每个注释及其在原始文档中的位置。不过要提醒一句,如果您最终想要将注释输入到斯坦福 NER 工具等分类器中,那么您将不得不进行一些操作以将数据转换为它可以接受的格式。

要描述所有存在的数据是一项艰巨的任务,但我们可以使用数据模型: http: //schema.org/,其中是信息的结构类型。先前的执行旨在实现 MarkUp 技术,因此,它似乎对您的任务很有用。