信息抽取

结构化数据: 实体和关系的规范和可预测的组织。

将自然语言句子这样的非结构化数据转换成结构化数据,然后利用强大的查询工具,如SQL。这种从文本中获取意义的方法被称为信息提取

信息提取系统搜索大量非结构化文本,寻找特定类型的实体和关系,并用它们来填充有组织的数据库。这些数据库可以用来寻找特定问题的答案。

简单的信息提取系统结构

  1. 使用句子分割器将文档的原始文本分割成句
  2. 使用分词器将每个句子进一步细分为词
  3. 对每个句子进行词性标注
  4. 命名实体识别,寻找每个句子中提到的潜在的有趣的实体
  5. 使用关系识别搜索文本中不同实体间的可能关系

该系统将文档的原始文本作为输入,将生成的(entity, relation, entity)元祖链表作为输出。

def ie_preprocess(document):
    sentences = nltk.sent_tokenize(document)  #句子分割
    sentences = [nltk.wold_tokenize(sent) for sent in sentences] #分词
    sentences = [nltk.pos_tag(sent) for sent in sentences]  # 词性标注

分块

用于命名实体识别的基本技术

NP-分块(名词短语分块,NP-chunking)信息最有用的来源之一是词性标注

定义分块语法,利用正则表达式规则定义。如,规则:NP-分块是由可选的且后面跟着任意数目形容词(JJ)的限定词(DT)和名词(NN)组成:

grammer = "NP: {<DT>?<JJ>*<NN>+}
cp = nltk.RegexpParser(grammer)
result = cp.parse(sentence)
result.draw()

命名实体识别(NER)

系统的目标是识别所有文字提及的命名实体。这里可以分解成两个子任务:确定NE的边界和确定其类型。是一个非常适合用于分类器类型的方法。

NLTK提供了一个已经训练好的可以识别命名实体的分类器,使用nltk.ne_chunk()访问。

sent = nltk.corpus.treebank.tagged_sents()[22]
print nltk.ne_chunk(sent, binary=True)

设置参数binary=True,那么命名实体只被标注为NE;否则分类器会添加类型标签。

关系抽取

只要文本中的命名实体被识别,我们就可以提取它们之间存在的关系。

通常会寻找指定类型的命名实体之间的关系。方法之一:首先寻找所有(X,a,Y)形式的三元组,然后从a的实体中抽出正在查找的关系。

关系抽取可以使用基于规则的系统,它通常查找文本中的连结实体和相关词的特定模式;
或者使用机器学习系统,通常尝试从训练预料自动学习这种模式。

参考《Natural Language Processing with Python》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值