NLTK基础教程学习笔记(十一)

简介:

语块分解例子:

from nltk.chunk.regexp import *
import nltk
test_sent="The prime minister announced he had asked the chief government whip, Philip Ruddock, to call a special party room meeting for 9am on Monday to consider the spill motion."
test_sent_pos=nltk.pos_tag(nltk.word_tokenize(test_sent))
rule_vp=ChunkRule(r'(<VB.*>)?(<VB.*>)+(PRP)?','Chunk VPs')
parser_vp=RegexpChunkParser([rule_vp],chunk_label='VP')
print(parser_vp.parse(test_sent_pos))
rule_np=ChunkRule(r'(<DT>?<RB>?)?<JJ|CD>*(<JJ|CD><,>)*(<NN.*>)+','Chunk NPs')
parser_np=RegexpChunkParser([rule_np],chunk_label="NP")
print(parser_np.parse(test_sent_pos))

结果:

(S
  The/DT
  prime/JJ
  minister/NN
  (VP announced/VBD)
  he/PRP
  (VP had/VBD asked/VBN)
  the/DT
  chief/JJ
  government/NN
  whip/NN
  ,/,
  Philip/NNP
  Ruddock/NNP
  ,/,
  to/TO
  (VP call/VB)
  a/DT
  special/JJ
  party/NN
  room/NN
  meeting/NN
  for/IN
  9am/CD
  on/IN
  Monday/NNP
  to/TO
  (VP consider/VB)
  the/DT
  spill/NN
  motion/NN
  ./.)
(S
  (NP The/DT prime/JJ minister/NN)
  announced/VBD
  he/PRP
  had/VBD
  asked/VBN
  (NP the/DT chief/JJ government/NN whip/NN)
  ,/,
  (NP Philip/NNP Ruddock/NNP)
  ,/,
  to/TO
  call/VB
  (NP a/DT special/JJ party/NN room/NN meeting/NN)
  for/IN
  9am/CD
  on/IN
  (NP Monday/NNP)
  to/TO
  consider/VB
  (NP the/DT spill/NN motion/NN)
  ./.)

上述代码是用来对动词,和名词进行划分操作,语块分解过程中会有一条管道,作用his标记POS标签,并为相关的语块分解器提供输入字符串,这里使用的是普通的语块分解器,其中的NP、VP规则定义了各种不同的可被称为动词与名词短语的POS模式。例如,NP规则定义的是所有以限定词开头,后接一个副词、形容词或纯数字的可被分解成一个名词短语的组合,这种基于一个表达式的语块分解器得依靠手动涉及分块字符串来定义分块规则。但普适式的规则很难找到。另一种方法是用机器学习的方法来进行语块的分解。
信息提取:介绍了如何用NLTK库来开发一个信息提取(IE)引擎。
一个典型的信息抽取管道在结构上都是非常类似的具体如下图:
20180203_152035
命名实体识别(NER)
从本质上讲NER是一种提取信息的方式,它提取的是一些最常见的实体信息,如实体名词,所属的组织,以及所在的位置等。某些NER也可用于提取一般实体,如产品名词,生物医学项目、作者姓名、品牌名等。
下面是一个例子:

import nltk
f=open('nerdemo.txt')
text=f.read()
sentences=nltk.sent_tokenize(text)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
for sent in tagged_sentences:
    print(nltk.ne_chunk(sent))

结果:

(S I/PRP want/VBP the/DT (GPE Cherry/NNP) keyboard/NN)

上面代码按照之前的相同管道流程走了一遍,执行了所有的预处理步骤,包括句子的标识化,词汇标识化、词性标注以及NLTK的NER(预训练模型)等用来提取所有NER的步骤。
关系提取:
关系提取是常用的信息提取操作。是提取不同实体之间不同的关系的过程,这里的关系可以根据信息的需要定义。
下面的代码中,使用了ieer的内置语料库,会对句子进行NER标注,这里唯一需要做的是指定所需的关系模式,以及该关系所定义NER种类,下面代码中组织与位置之间的关系已经被定义好了,要要提取的是这些模式的所有组合。

import re
import nltk
IN = re.compile(r'.*\bin\b(?!\b.+ing)')
for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
    for rel in nltk.sem.extract_rels('ORG', 'LOC', doc, corpus='ieer', pattern=IN):
        print(nltk.sem.rtuple(rel))

结果:

[ORG: 'WHYY'] 'in' [LOC: 'Philadelphia']
[ORG: 'McGlashan &AMP; Sarrail'] 'firm in' [LOC: 'San Mateo']
[ORG: 'Freedom Forum'] 'in' [LOC: 'Arlington']
[ORG: 'Brookings Institution'] ', the research group in' [LOC: 'Washington']
[ORG: 'Idealab'] ', a self-described business incubator based in' [LOC: 'Los Angeles']
[ORG: 'Open Text'] ', based in' [LOC: 'Waterloo']
[ORG: 'WGBH'] 'in' [LOC: 'Boston']
[ORG: 'Bastille Opera'] 'in' [LOC: 'Paris']
[ORG: 'Omnicom'] 'in' [LOC: 'New York']
[ORG: 'DDB Needham'] 'in' [LOC: 'New York']
[ORG: 'Kaplan Thaler Group'] 'in' [LOC: 'New York']
[ORG: 'BBDO South'] 'in' [LOC: 'Atlanta']
[ORG: 'Georgia-Pacific'] 'in' [LOC: 'Atlanta']

7da7cbfdfc0392451977f93e8b94a4c27c1e25ae

目录
相关文章
|
9月前
|
机器学习/深度学习 数据采集 数据挖掘
【Python入门系列】第九篇:Python数据分析和处理
Python数据分析和处理是当今数据科学领域中的重要技能之一。随着大数据时代的到来,越来越多的组织和企业需要从海量数据中提取有价值的信息。Python作为一种功能强大且易于上手的编程语言,提供了丰富的数据分析和处理工具和库,如pandas、numpy、matplotlib等。本文将介绍Python数据分析和处理的基础知识和常用操作。
231 1
|
数据挖掘 Python
《Python数据分析基础教程:Numpy学习指南》 常用模块与方法简要记录
《Python数据分析基础教程:Numpy学习指南》 常用模块与方法简要记录
156 0
|
开发者 Python
正则表达式简介 | 手把手教你入门Python之八十四
正则表达式是⼀个特殊的字符序列,计算机科学的⼀个概念。通常被⽤来检索、替换那些符合某个模式(规则)的⽂本。
|
存储 开发者 索引
详解字符串| 手把手教你入门Python之二十六
本节介绍字符串介绍,下标和切片
1495 0
详解字符串| 手把手教你入门Python之二十六
|
开发者 Python
MarkDown语法的使用 | 手把手教你入门Python之四
上节课我们安装了Typora,它就是一个用来编辑笔记的软件,而且它支持的格式和语法是MD形式,这节课我们就来学习该语法的使用。
MarkDown语法的使用 | 手把手教你入门Python之四
|
存储 Python
集合的简介 | Python从入门到精通:进阶篇之十七
本节的重点介绍集合的一些基本操作方法,包括创建、删除、清空、浅复制等。
集合的简介 | Python从入门到精通:进阶篇之十七
字典的使用(下) | Python从入门到精通:进阶篇之十五
本节重点介绍了字典中的一些基本操作。包括删除的几种不同方法,浅复制的方法等。
字典的使用(下) | Python从入门到精通:进阶篇之十五
字典的使用(上) | Python从入门到精通:进阶篇之十四
本节重点介绍了字典中的一些基本操作,包含创建字典,获取字典的个数,检查字典中是否包含/不包含某个键,以及获取value,修改字典等操作方法。
字典的使用(上) | Python从入门到精通:进阶篇之十四