首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将非结构化文本转换为结构化数据?

如何将非结构化文本转换为结构化数据?
EN

Data Science用户
提问于 2015-07-21 12:24:18
回答 2查看 8.4K关注 0票数 2

我想用以下字段编写一个算法,将非结构化文本(带有竞赛描述)转换为结构化数据:

  • 比赛开始日期(可选)
  • 比赛结束日期
  • 主要奖品
  • 额外奖品(可选)

我有数以百计的文本例子,可以用来学习模型。

如何处理这一任务?万一这很重要,最好的语言是Python。但我以前从来没有做过这样的工作。这样做的最佳做法是什么?

EN

回答 2

Data Science用户

发布于 2015-07-21 17:45:54

如果我说得对,您希望从非结构化文本中提取提到的实体。这听起来像命名实体识别(NER)问题对我来说。在您的情况下,我将定义以下实体:

  • START_DATE
  • END_DATE
  • MAIN_PRIZE
  • EXTRA_PRIZE

您的文本现在可以使用这些实体进行标记或注释。您希望构建一台机器,它将自动标记非结构化文本(免费文本)中遇到的实体。

我建议看一看条件随机场(CRF),一种经典的方法。也有递归神经网络(RNN),这是最新的序列建模,但我不是专家对这些方法。

让我们开始建模的过程。你需要决定什么将是一个单一的训练例子。这可以是一个句子,也可以是一个段落。

既然你没有提供任何例子,让我提出两个例子:

代码语言:javascript
复制
The contest started on <START_DATE>july 1st</START_DATE> and ended on <END_DATE>july 25</END_DATE>.

The winner got away with <MAIN_PRIZE>1 million dollars</MAIN_PRIZE> and <EXTRA_PRIZE>bunch of flowers</EXTRA_PRIZE>.

注意文本的结构方式。现在的每个单词要么是标签(被标签包围),要么根本没有标签(任何标签之外)。这是如何构造文本的一种方式。这也是对一些非结构化文本的期望输出。

机器不理解文字和注释。你需要想出你可以从每个单词中提取出来的特征。它可以是单词本身,前一个词,下一个单词,左bigram,右bigram,长度1,2,3的后缀,长度1,2,3的前缀等等。我建议你看看斯坦福大学的特征。

一旦获得了这些特性,就需要创建一个培训集。培训集是转换为label +的带注释的文本(参见我的示例)。它可能看起来像这样

代码语言:javascript
复制
O   feature1 feature2 ...
O   feature1 feature2 ...
B-START_DATE   feature1 feature2 ...
I-START_DATE   feature1 feature3 ...
...

这基本上是说前两个单词没有标签,但最后两个词是实体START_DATE的一部分。

每一行本质上都是一个单词,后面跟着它的特性。标签"O“表示该词没有标签,标号B-和I-表示命名实体的第一个和第二个单词(例如”7月1日“)。

句子可以用空行隔开。

一旦您准备好了培训集文件,就可以进行模型培训了。有了手头的模型,您可以将其应用于任何非结构化数据(提取的特性),以获取所需的实体。

作为一种工具,我建议您使用CRFSuite (也可以使用Python )。如果你愿意的话,我可以详细说明每一步。

票数 5
EN

Data Science用户

发布于 2015-07-21 19:03:19

查找NLTK,一个用于分析自然语言数据的Python包。使用它,您可以添加一些结构到文本中,如人类所写的。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/6530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档