NLTK和jieba
NLTK与jieba概述
自然语言处理(NLP)领域是计算机科学领域与人工智能领域中的一个重要方向,主要研究方向是实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
在自然语言处理领域中,文本类型的数据占据着很大的市场,由于其自身具有半结构的特点,且自然语言的分类繁多,所以针对不同的语言Python分别提供了相应的库来处理,最常见的是处理英文的NLTK库,它自带的语料库都是英文的,由于中文要比英文的结构复杂得多,不适合用NLTK进行处理,所以提供了jieba库来更好地处理中文。
NLTK全称为Natural Language Toolkit,它是一套基于Python的自然语言处理工具包,可以方便地完成自然语言处理的任务,包括分词、词性标注、命名实体识别(NER)及句法分析等。
NLTK是一个免费的、开源的、社区驱动的项目,它为超过50个语料库和词汇资源(如WordNet)提供了易于使用的接口,以及一套用于分类、标记化、词干化、解析和语义推理的文本处理库。接下来,通过一张表来列举NLTK中用于语言处理任务的一些常用模块,具体如表1所示。
表1 NLTK中的常用模块
语言处理任务 | nltk模块 | 功能描述 |
---|---|---|
获取和处理语料库 | nltk.corpus | 语料库和词典的标准化接口 |
字符串处理 | nltk.tokenize,nltk.stem | 分词,句子分解提取主干 |
搭配发现 | nltk.collocations | 用于识别搭配工具,查找单词之间的关联关系 |
词性标识符 | nltk.tag | 包含用于词性标注的类和接口 |
分类 | nltk.classify,nltk.cluster | nltk.classify用类别标签标记的接口;nltk.cluster包含了许多聚类算法如贝叶斯、EM、k-means |
分块 | nltk.chunk | 在不受限制的文本识别非重叠语言组的类和接口 |
解析 | nltk.parse | 对图表、概率等解析的接口 |
语义解释 | nltk.sem,nltk.inference | 一阶逻辑,模型检验 |
指标评测 | nltk.metrics | 精度,召回率,协议系数 |
概率与估计 | nltk.probability | 计算频率分布、平滑概率分布的接口 |
应用 | nltk.app,nltk.chat | 图形化的关键词排序,分析器,WordNet查看器,聊天机器人 |
语言学领域的工作 | nltk.toolbox | 处理SIL工具箱格式的数据 |
GitHub上有一段描述Jieba的句子:
"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.
翻译:“Jieba”中文分词:最好的 Python 中文分词组件。
由此可见,jieba最适合做中文分词,这离不开它拥有的一些特点:
(1) 支持三种分词模式:
-
精确模式:试图将句子最精确地切开,适合文本分析。
-
全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。
-
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
(2) 支持繁体分词。
(3) 支持自定义词典。
(4) MIT 授权协议。
jieba库中主要的功能包括分词、添加自定义词典、关键词提取、词性标注、并行分词等等。
安装NLTK和下载语料库
要想使用NLTK库处理自然语言,前提是需要先安装。这里,我们既可以在终端使用pip命令直接安装,也可以在Jupyter Notebook中直接使用。以前者为例,打开终端键入如下命令安装NLTK库:
>>> pip install -U nltk
安装完以后,在终端中启动Python,然后键入如下命令测试是否安装成功:
>>> import nltk
按下回车键,如果程序中没有提示任何错误的信息,则表示成功安装,否则表示安装失败。值得一提的是,Anaconda中默认已经安装了NLTK库(但是没有安装语料库),可以用import导入使用,无需再另行安装。
NLTK库中附带了许多语料库(指经科学取样和加工的大规模电子文本库)、玩具语法、训练模型等,完整的信息发布在http://nltk.org/nltk_data/
网上。如果希望在计算机上安装单独的数据包,或者是下载全部的数据包,则需要在Jupyter Notebook(或者管理员账户)中执行以下操作:
In [1]: import nltk
nltk.download() # 打开NLTK下载器
Out[1]: True
此时,打开了一个NLTK Downloader窗口,如图1所示。
图1 打开NLTK Downloader窗口
图1的窗口中包含以下选项:
(1) Collections:集合。
(2) Corpora:语料库。
(3) Models:模型。
(4) All Packages:所有包。
如果希望集中安装所有的选项,则需要单击【File】->【Change Download Directory】选择更新下载目录,这时图1中 “Download Directory”对应的文本框处于可编辑状态,将其设置为C:\nltk_data(Windows),然后单击【File】->【Download】开始下载,直至所有选项安装完成,这个过程需要等待的时间稍微有点长。
注意:
如果没有将数据包安装到上述位置,则需要设置NLTK_DATA环境变量以指定数据的位置。
如果只是想单独安装某个库或模型等,比如brown语料库,则可以单击图1中的【Corpora】选项,从列表中选中“brown”,然后单击左下方的【Download】按钮进行下载。
下载完以后,可以测试语料库是否下载成功,可以按照如下方式进行检测(假设下载了布朗语料库):
In [2]: from nltk.corpus import brown # 导入brown语料库
brown.words() # 查看brown库中所有的单词
Out[2]: ['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
上述示例中输出了brown语料库中所有的单词,表明下载成功。
还可以通过categories()函数查看brown中包含的类别,示例代码如下。
In [3]: brown.categories()
Out[3]: ['adventure', 'belles_lettres', 'editorial', 'fiction',
'government', 'hobbies', 'humor', 'learned', 'lore',
'mystery', 'news', 'religion', 'reviews',
'romance', 'science_fiction']
此外,还可以查看brown语料库中包含的单词或句子的总个数,示例代码如下。
In [4]: 'brown中一共有{}个句子'.format(len(brown.sents()))
Out[4]: 'brown中一共有57340个句子'
In [5]: 'brown中一共有{}个单词'.format(len(brown.words()))
Out[5]: 'brown中一共有1161192个单词'
jieba库的安装
如果希望对中文进行分词操作,则需要借助jieba分词工具。安装jieba库的方式比较简单,可以直接使用如下pip命令进行安装:
pip install jieba
安装完成出现如图1所示的提示信息。
图1 提示jieba安装完成
为了验证jieba库是否成功安装,我们可以在Jupyter Notebook中通过 import jieba 来引用,如果没有提示错误信息,则表示安装成功。