一、信息提取
信息有很多种形状和大小。一个重要的形式是结构化数据:实体和关系的可预测的规范的结构。
位置数据
如果这个位置数据被作为一个元组(entity, relation, entity)的链表存储在 Python 中,那么这个问题:“哪些组织在亚特兰大经营?” 可翻译如下:
print [org for (e1, rel, e2) if rel=='IN' and e2=='Atlanta']
>> ['BBDO South', 'Georgia-Pacific']
但如果尝试从文本中获得相似的信息,事情就比较麻烦了。所以,需要采取不同的方法,提前定为我们将只查找文本中非常具体的各种信息,如:组织和地点之间的关系。
首先将自然语言句子这样的非结构化数据转换成上图的结构化数据。然后,利用强大的查询工具,如 SQL。这种从文本获取意义的方法被称为信息提取。
信息提取有许多应用,包括商业智能、简历收获、媒体分析、情感检测、专利检索、电子邮件扫描。当前研究的一个特别重要的领域是提取出电子科学文献的结构化数据,特别是在生物学和医学领域。
1. 信息提取结构
处理文档:首先,使用句子分割器将该文档的原始文本分割成句,使用分词器将每 个句子进一步细分为词。接下来,对每个句子进行词性标注,在下一步命名实体识别中将证明这是非常有益的。在这一步,我们寻找每个句子中提到的潜在的有趣的实体。最后,我们使用关系识别搜索文本中不同实体间的可能关系。
简单的信息提取系统的结构
要执行前面三项任务,我们可以定义一个函数,简单地连接 NLTK 中默认的句子分割器,分词器和词性标注器:
def ie_preprocess(document):
sentences = nltk.sent_tokenize(document)
sentences = [nltk.word_tokenize(sent) for sent in sentences]
sentences = [nltk.pos_tag(sent) for sent in sentences]
接下来,命名实体识别中