7 从文章中提取信息

该章三个问题:

1:我们应该怎样建立一个系统,从非结构化的文章中提取出结构化的数据。

2:有哪些稳健的方法可以识别文章中的实体以及关系?

3: 哪些数据库适合用来做这些工作,我们怎样用他们训练并评测我们的模型?

第一节:提取信息

先将非结构化的数据转为结构化的数据,然后利用强大的搜索工具如sql对数据进行查询,这种获取语义的方法被称为信息提取。

1.1 信息提取结构

将文本分割为句子,句子分割为单词,为单词标记词性。识别有信息量的实体,根据他们的语境确定其关系。

第二节:分块

2.1 名词短语分块

用正则表达式构建分块语法,再对已经标注词性的句子进行分块:


7 从文章中提取信息_第1张图片

2.2 标记模块

是一系列pos标记,与正则表达式模块很相似:

?*+

但是还是有许多复杂的表达无法用该模块提取。需要继续优化。

2.3 用正则表达式分块,

如以上所示,建立语法规则 grammar 

2.4 探索文章语料库

之前我们学过怎样用pos标记寻找三词短语:


7 从文章中提取信息_第2张图片

用基于正则表达式的分块器会更加容易一些:


7 从文章中提取信息_第3张图片

还可以加缝隙,排除不合适的元素:grammar= r'''NP: {<.*>+} }+{  这样就排除了动词以及介词

Chunks的表达:可以用tags 或者 trees:

IOB-Tags: B: begin, I:inside, O:outsid    B-NP:一个名词短语的开始

第三节:研发与测试分块器

简单的评估与基准

获得已经标注好的数据库的内容

print(conll2000.chunked_sents('train.txt',chunk_types=['NP'])[10])

以此为基础,训练n-gram分类器


7 从文章中提取信息_第4张图片

可以将该一元分类器改为二元分类器,使用BigramChunker

训练基于分类器的分块器:与二元相比更加灵活,可以甄别多种可能有用的特征


7.4 语言结构中的递归现象

分级别,多次对句子中的结构进行深度分析分析。不过因为创造这种分级方法,查找错误是比较麻烦的,而且这种方法得确定深度等级,所以对分析复杂的句法并不是很合适。

--- 树:句法树

--- 遍历树:可以用递归函数来遍历树

7.5 识别命名实体

也可以像上面的通过分类器确定分块器的方法,通过数据训练,使其能够识别某些多字符命名实体。

7.6 提取关系

可以通过正则表达式,确定两实体之间的关系如(r'.*\bin\b(?!\b.+ing)' 该表达可以忽略现在分词ing的表达

用正则表达式可能会得到假阳性答案 false postives

总结:

你可能感兴趣的:(7 从文章中提取信息)