自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自来录制视频教程)

QQ:231469242
欢迎喜欢nltk朋友交流
http://www.cnblogs.com/undercurrent/p/4754944.html
一、信息提取模型
信息提取的步骤共分为五步,原始数据为未经处理的字符串,
第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings
第二步:分词,[nltk.word_tokenize(sent) for sent in sentences]实现,得到list of lists of strings
第三步:标记词性,[nltk.pos_tag(sent) for sent in sentences]实现得到一个list of lists of tuples
前三步可以定义在一个函数中:
>>> 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]
第四步:实体识别(entity detection)在这一步,既要识别已定义的实体(指那些约定成俗的习语和专有名词),也要识别未定义的实体,得到一个树的列表
第五步:关系识别(relation detection)寻找实体之间的关系,并用tuple标记,最后得到一个tuple列表
二、分块(chunking)
分块是第四步entity detection的基础,本文只介绍一种块noun phrase chunking即NP-chunking,这种块通常比完整的名词词组小,例如:the market for system-management software是一个名词词组,但是它会被分为两个NP-chunking——the market 和 system-management software。任何介词短语和从句都不会包含在NP-chunking中,因为它们内部总是会包含其他的名词词组。
从一个句子中提取分块需要用到正则表达式,先给出示例代码:

grammar = r"""
NP: {<DT|PP\$>?<JJ>*<NN>} # chunk determiner/possessive, adjectives and noun
{<NNP>+} # chunk sequences of proper nouns
"""
cp = nltk.RegexpParser(grammar)
sentence = [("Rapunzel", "NNP"), ("let", "VBD"), ("down", "RP"),
("her", "PP$"), ("long", "JJ"), ("golden", "JJ"), ("hair", "NN")] >>> print(cp.parse(sentence))
(S
(NP Rapunzel/NNP)
let/VBD
down/RP
(NP her/PP$ long/JJ golden/JJ hair/NN))

正则表达式的格式为"""块名:{<表达式>...<>}
{...}”""
如:
grammar = r"""
NP: {<DT|PP\$>?<JJ>*<NN>} # chunk determiner/possessive, adjectives and noun
{<NNP>+} # chunk sequences of proper nouns
"""
大括号内为分块规则(chunking rule),可以有一个或多个,当rule不止一个时,RegexpParser会依次调用各个规则,并不断更新分块结果,直到所有的rule都被调用。nltk.RegexpParser(grammar)用于依照chunking rule创建一个chunk分析器,cp.parse()则在目标句子中运行分析器,最后的结果是一个树结构,我们可以用print打印它,或者用result.draw()将其画出。
在chunking rule中还用一种表达式chink,用于定义chunk中我们不想要的模式,这种表达式的格式为:‘ }表达式{ ’ 使用chink的结果一般有三种,一、chink定义的表达式和整个chunk都匹配,则将整个chunk删除;二、匹配的序列在chunk中间,则 chunk分裂为两个小chunk;三、在chunk的边缘,则chunk会变小。使用方法如下:

grammar = r"""
NP:
{<.*>+} # Chunk everything
}<VBD|IN>+{ # Chink sequences of VBD and IN
"""
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"),
("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")]
cp = nltk.RegexpParser(grammar) >>> print(cp.parse(sentence))
(S
(NP the/DT little/JJ yellow/JJ dog/NN)
barked/VBD
at/IN
(NP the/DT cat/NN))
自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)的更多相关文章
- Python自然语言处理学习笔记之信息提取步骤&分块(chunking)
一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...
- 【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表
这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解 NLTK 介绍:NLTK是一个构建Python程序以处理人类语言数据的 ...
- 《Python自然语言处理》第二章 学习笔记
import nltk from nltk.book import * nltk.corpus.gutenberg.fileids() emma = nltk.corpus.gutenberg.wor ...
- 《C++ Primer Plus》16.1 string类 学习笔记
16.1.1 构造字符串程序清单16.1使用了string的7个构造函数.程序清单16.1 str1.cpp---------------------------------------------- ...
- STM32学习笔记——新建工程模板步骤(向原子哥学习)
1. 在创建工程之前,先在电脑的某个目录下面建立一个文件夹,我们先把它命名为Template,后面建立的工程可以放在这个文件夹下.在 Template 工程目录下面,新建 3 个文件夹USER , ...
- ReactiveX 学习笔记(0)学习资源
ReactiveX 学习笔记 ReactiveX 学习笔记(1) ReactiveX 学习笔记(2)创建数据流 ReactiveX 学习笔记(3)转换数据流 ReactiveX 学习笔记(4)过滤数据 ...
- R-CNN学习笔记
R-CNN学习笔记 step1:总览 步骤: 输入图片 先挑选大约2000个感兴趣区域(ROI)使用select search方法:[在输入的图像中寻找blobby regions(可能相同纹理,颜色 ...
- 自然语言处理NLP学习笔记一:概念与模型初探
前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. http://xiaosi.trs.cn/demo/rs/demo 知识图 ...
- 自然语言0_nltk中文使用和学习资料汇总
http://blog.csdn.net/huyoo/article/details/12188573 官方数据 http://www.nltk.org/book/ Natural Language ...
随机推荐
- js实现倒计时效果
<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/htm ...
- Android判断当前系统时间是否在指定时间的范围内(免消息打扰)
/** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @para ...
- [转]领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
原文地址:http://www.blogjava.net/johnnylzb/archive/2010/05/27/321968.html 上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章 ...
- Dubbo_异常_服务注册运行正常但是Dubbo-Admin看不到服务(亲测可用)
一.背景: 1.Dubbo服务正常注册到ZooKeeper 2.客户端调用Dubbo服务正常 二.原因: Dubbo-Admin未配置分组信息 三.解决步骤: 1.dubbo.properties添加 ...
- 51nod 循环数组最大子段和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所 ...
- java环境变量设置
java环境变量设置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Ja ...
- 怎么学习AOPR使用方法
Advanced Office Password Recovery作为一款专业级别的Office密码破解工具,对十几种office文档的密码都可以有效的破解.一些用户朋友才开始接触Advanced O ...
- SQLite数据库的基本操作
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...
- oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件
首先,创建一个 ACL: begindbms_network_acl_admin.create_acl (acl => 'utlpkg.xml', ---创建的访问控制列 ...
- 【BZOJ-3667】Rabin_Miller算法 随机化判素数
3667: Rabin-Miller算法 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 983 Solved: 302[Submit][Status ...
