tokenization:分词
Stemming:基于规则
Lemmatization:基于字典
两者区别:
词形还原(lemmatization),是把一个任何形式的语言词汇还原为一般形式(能表达完整语义),而词干提取
(stemming)是抽取词的词干或词根形式(不一定能够表达完整语义)。词形还原和词干提取是词形规范化的两类
topic modeling:主题模型
Extract:提取
category predictor:分类预测
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。
Bag Of Word (BOW):词袋:一袋子词就是要绕过句法,把输入文字打散成词,然后通过统计模型,来完成指定的语言处理任务。
在这章中,我们将学习自然语言处理(NLP).我们将讨论一些处理文本的新概念,例如:分词,基于规则,基于字典等。我们之后会讨论怎样构建用词袋模型 ,并且使用这个模型进行文本分类。我们将弄明白怎样使用机器学习去分析一句给定句子的意思。我们之后将讨论主题模型,并实现一个能够识别给定文档主题词汇的系统。
在本章结束以后,你将会学到一下知识:
包的介绍和安装
自然语言处理(NLP)已经成为现代系统的一部分,它呗广泛的应用于搜索引擎,人机对话接口,文档处理等等。机器能够很好的处理结构化的数据。但是当它遇到无固定形式的文本时,将很难处理。NLP的目的是研究一种能够让计算机明白无结构的文本,并且帮助他们理解这种语言。
处理无结构的自然语言的最大的一个挑战是词的数量之多,变化之大。在理解一个特定的句子时,上下文意起到了至关重要的作用。人类很擅长做这些事情,因为人类为此已经训练了好多年了。我们立马就能使用我们过去的知识弄明白上下文和明白其他人所说的。
为了解决这个问题,自然语言的研究者开始开发使用机器学习的各种应用。为了构建这样的应用,我们需要收集大量的语料库 ,然后训练算法执行各种任务,如分词,分析语意,或者主题模型。这些算法被训练去捕获输入文本数据以及其衍生的意思。
在这章中,我们将讨论各种用于分析文本和构建自然语言处理应用的基础概念。这将使我们明白怎样从给定的文本数据中提取重要的信息。我们将使用一个名为NLTK(nature langue Tookit )的Python 包来构建这些应用。确保你在时间之前安装了这个包。你能够通过运行一下命令安装它:
$pip3 install nltk
你能够在这个网站找到更多的信息:http://www.nltk.org.
为了获取NLTK的所有数据集,我们需要现在它。打开Python的shell命令窗口:输入如下命令:
$python3
我们现在在Python shell窗口,输入下面命令下载数据:
import nltk
nltk.download()
我们也需要使用一个名为gensim的包在这章中。它是一个强健的语意模型库,对于很多应用来说是很有帮助的。你能够输入以下命令安装它:
$pip3 install gensim
你也许需要另外的包pattern来使得gensim更好的发挥作用。你能安装它使用以下的命令:
$pip3 install pattern
你就会找到更多关于gensim的有用的信息在https://radimrehurek.com/gensim.现在你已经安装了NLTK和gensim,让我们呢开始讨论吧。
文本分词
当我们处理文本时,我们需要将它拆分成小片来分析。它是将输入的文本分成像单词或者句子的一小片,这些片被称之为原型。让我们看一下怎样使用NLTK进行分词。
# -*- coding: utf-8 -*-
"""
Created on Sun Nov 19 10:31:20 2017
@author: 30961
"""
from nltk.tokenize import sent_tokenize,word_tokenize,WordPunctTokenizer
input_text = "Do you know how tokenization works? It is actually quite"
print("Sentence tokenizer:")
print(sent_tokenize(input_text))
print("word tokenizer:")
print(word_tokenize(input_text))
print("word punct tokenizer:")
print(WordPunctTokenizer().tokenize(input_text))
使用stemming还原词汇
对于一些变化的词汇,我们必须处理相同单词的不同形式,并且使得计算机能够明白这些不同的单词有相对的形式。例如,单词sing 能够以很多形式出现如sang,singer ,singing等等。我们刚刚看到的是有相同意思的一系列单词。人类能够轻松的识别这些单词的基础形式和衍生形式。
当我们分析文本时,提取这些基本形式时很有用的。它将让我们提取有用的统计数来分析输入的文本。提取词根(stemming)能够做到这一点.stemer的目的是通过将单词的不同形式转换为基本形式来减少单词量。去掉单词的尾部将其变成基本形式是一个启发式的过程。让我们看看如何使用NLTK进行分词
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 13 16:47:48 2018
@author: 30961
"""
#导包
from nltk.stem.porter import PorterStemmer
from nltk.stem.lancaster import LancasterStemmer
from nltk.stem.snowball import SnowballStemmer
#定义单词
input_text=['writing','calves','be','brand','horse','randomize',
'possibly','provision','hospital','kept','scratchy','code']
#声明对象
porter =PorterStemmer()
lancaster = LancasterStemmer()
snowball= SnowballStemmer('english')
#创建显示表格
stemmer_names= ['PORTER','LANCASTER','SNOWBALL']
formatted_text = '{:>16}'*(len(stemmer_names)+1)
print('\n',formatted_text.format('INPUT WORD',*stemmer_names),'\n','='*68)
#输出结果
for word in input_text:
output = [word,porter.stem(word),lancaster.stem(word),snowball.stem(word)]
print(formatted_text.format(*output))