自然语言处理(NLP)-NLTK入门学习(三)

前面两篇已经基本上算是完成了预处理部分的分享了,这里开始分享一些文本处理。语言结构是非常复杂的,需要按照其不同的处理层次来对它进行描述。

这里会分享常见的文本结构,介绍结构之间的区别和用法。同样我会试着通过代码的方式以实例展示其处理过程。

概念:

1. 为什么需要进行文本解析

回答这个问题的时候可以先回想一下当初我们学习语言时是怎样的一个过程,首先我们先学一些单词,

2. 两种解析方式:基于规则和基于概念。第一种是基于规则和语法,该方法将语法概念编撰成语法规则手册,形成基于表达式的解析器,这种方式是一种比较旧的思想。第二种是运用概率模型来学习规则和语法,使用所观测到的相关语言特征出现概率,从而形成一个基于概率的解析器。

3. 什么是浅解析和深解析

浅解析(shallow parsing):面向给定文本,对其语法信息部分所进行的有限解析任务。

深解析(deep parsing):是一种相对浅解析更为复杂的应用,一般来说比较适合于对话系统和文本综述这样的应用。

解析器的种类:

递归下降解析器

该解析器从左到右读取输入流中的信息,所以它会试图去验证其语法的正确性。该解析器的基本操作是从输入流中读取字符,然后将它们与终端所输入的语法规则说明进行匹配。

移位-归约解析器

这是一种自下而上的解析器,主要是通过寻找一个单词和短语序列,它们一方面对应着语法生成器的右侧,另一方面则会用生成器左侧的内容对其进行替换,直到归简出完整的句子为止。

图表解析器

这是运用了动态规划的算法设计将中间的结果保存下来,然后再适当的时候重新启用它们,以便显著的提高效率。

正则表达式解析器

由名字就可以猜出它的使用方式,根据预定义的语法形式在完成了词性标注的字符串之上构建而成的。该解析器将使用正则表达式来解析给定的句子,并为它们生成相应的解析树。

import nltk
from nltk.chunk.regexp import *

chunk_rules = ChunkRule("<.*>+", "chunk everything")
reg_parser = RegexpParser('''
NP: {<DT>? <JJ>* <NN>*} 
P: {<IN>} 
V: {<V.*>} 
PP: {<P> <NP>} 
VP: {<V> <NP|PP>*}
''')
test_sent = "Mr. Obama played a big role in the Health insurance bill."
test_sent_pos = nltk.pos_tag(nltk.word_tokenize(test_sent))
paresed_out = reg_parser.parse(test_sent_pos)
print(str(paresed_out))

依赖文本解析

依赖文本解析是现在比较流行的文本解析机制,它主要是将各个语法单元用定向链路串联起来。这些链路成为

from nltk.parse.stanford import StanfordParser

english_parser = StanfordParser('standford-parser.jar', 'standfordparser-3.8.0-models.jar')
english_parser.raw_parse_sents('This is the english parser test.')
抱歉这个没有跑通,书看到这里感觉这些方法都太落后了,接下来估计再整理一篇NLTK的就放弃NLTK了,虽然学到了一些文本挖掘的基本流程,但是方法太落后了将来不好找工作,所以放弃了哈。


猜你喜欢

转载自blog.csdn.net/maizi1045/article/details/80752826
今日推荐