分词是NLP最基础的操作,中文分词有很多种,本篇记录jieba与HanLP的使用。
jieba分词
jieba分词的安装
在Python 3环境下,安装方法如下:
从GitHub上下载jieba到本地并解压,然后执行安装命令,具体如下:
git clone https://github.com/fxsjy/jieba.git
cd [jieba的目录]分词是NLP最基础的操作,中文分词有很多种,本篇记录jieba与HanLP的使用。
# jieba分词
## jieba分词的安装
在Python 3环境下,安装方法如下:
从GitHub上下载jieba到本地并解压,然后执行安装命令,具体如下:
git clone https://github.com/fxsjy/jieba.git
cd [jieba的目录]
python setup.py install
## jieba分词基础教程
首先,导入jieba库和建立一个语料。
import jieba
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
jieba有3种分词方法:
- **精确分词(default)**:尝试最精确的方式进行分词
`jieba.cut(语料,cut_all=False)`
- **全模式**:把所有可能是词语的都扫描出来,快速但有歧义
`jieba.cut(语料,cut_all=True)`
- **搜索引擎模式**:基于精确模式,对长词二次分割,提高recall,适合用于搜索引擎分词
`jieba.cut_for_search(语料)`
同时其他常用jieba的方法包括:
- 结果列表`jieba.lcut`:`jieba.cut`和`jieba.cut_for_search`返回的都是一个可迭代的Generator,可以会用`for`循环来获取分词结果,`lcut`将cut结果进行封装,转换成了列表。
- 获取词性`jieba.posseg`:jieba可以通过该模块来做词性标注
- 并行分词:将文本按行分割后使用多线程做并行分词
` jieba.enable_parallel(n)`
` jieba.disable_parallel()`
- 词频top-n统计
- 自定义添加词及词典
` jieba.add_word("添加词") `
### 精确模式
segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))
现如今/,/机器/学习/和/深度/学习/带动/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大成功/。
### 全模式
segs_2 = jieba.cut(content, cut_all=True)
print("/".join(segs_2))
现如今/如今/,/机器/学习/和/深度/学习/带动/动人/人工/人工智能/智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/巨大成功/大成/成功/。
### 搜索引擎模式
segs_3 = jieba.cut_for_search(content)
print("/".join(segs_3))
如今/现如今/,/机器/学习/和/深度/学习/带动/人工/智能/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/大成/成功/巨大成功/。
### `lcut`应用
segs_4 = jieba.lcut(content)
print(segs_4)
['现如今', ',', '机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展', ',', '并', '在', '图片', '处理', '、', '语音', '识别', '领域', '取得', '巨大成功', '。']
### 词性标注
NLP的中文词性包括:
![][1]
import jieba.posseg as psg
print([(x.word,x.flag) for x in psg.lcut(content)])
[('现如今', 't'), (',', 'x'), ('机器', 'n'), ('学习', 'v'), ('和', 'c'), ('深度', 'ns'), ('学习', 'v'), ('带动', 'v'), ('人工智能', 'n'), ('飞速', 'n'), ('的', 'uj'), ('发展', 'vn'), (',', 'x'), ('并', 'c'), ('在', 'p'), ('图片', 'n'), ('处理', 'v'), ('、', 'x'), ('语音', 'n'), ('识别', 'v'), ('领域', 'n'), ('取得', 'v'), ('巨大成功', 'nr'), ('。', 'x')]
### 并行分词
并行分词可以按行分割文本,使用多线程进行分词,最后归并结果
jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 。
jieba.disable_parallel() # 关闭并行分词模式 。
### 词频top-n统计
from collections import Counter
top5= Counter(segs_4).most_common(5)
print(top5)
### 自定义词典
假设,下面这段话:
txt = "人人网是当年中国最著名的校园交友网站。"
print(jieba.lcut(txt))
['人人网', '是', '当年', '中国', '最', '著名', '的', '校园', '交友', '网站', '。']
可以看到,人人网作为名词并没有被识别出来,那么可以将它加到字典里,然后再看分割效果
jieba.add_word("人人网")
print(jieba.lcut(txt))
['人人网', '是', '当年', '中国', '最', '著名', '的', '校园', '交友', '网站', '。']
# HanLP
## HanLP安装
HanLP的Python接口支持自动下载及安装HanLP,具体安装命令为:
pip install pyhanlp
HanLP需要Java运行环境才能够正常运行
## HanLP常用方法
### 基础分词
from pyhanlp import *
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
print(HanLP.segment(content))
### 自定义词典
txt = "人人网是当年中国最著名的校园交友网站。"
CustomDictionary.add("铁甲网")
CustomDictionary.insert("校园交友", "nz 1024")
print(HanLP.segment(txt))
[人人网/nz, 是/vshi, 当年/t, 中国/ns, 最/d, 著名/a, 的/ude1, 校园/n, 交友/vi, 网站/n, 。/w]
CustomDictionary.add("铁甲网")
CustomDictionary.insert("校园交友", "nz 1024")
print(HanLP.segment(txt))
[人人网/nz, 是/vshi, 当年/t, 中国/ns, 最/d, 著名/a, 的/ude1, 校园交友/nz, 网站/n, 。/w]
[1]: http://pic.bastudy.cn/2015-2016-3/nlp_table
python setup.py install
jieba分词基础教程
首先,导入jieba库和建立一个语料。
import jieba
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
jieba有3种分词方法:
- 精确分词(default):尝试最精确的方式进行分词
jieba.cut(语料,cut_all=False)
- 全模式:把所有可能是词语的都扫描出来,快速但有歧义
jieba.cut(语料,cut_all=True)
- 搜索引擎模式:基于精确模式,对长词二次分割,提高recall,适合用于搜索引擎分词
jieba.cut_for_search(语料)
同时其他常用jieba的方法包括:
- 结果列表
jieba.lcut
:jieba.cut
和jieba.cut_for_search
返回的都是一个可迭代的Generator,可以会用for
循环来获取分词结果,lcut
将cut结果进行封装,转换成了列表。 - 获取词性
jieba.posseg
:jieba可以通过该模块来做词性标注 - 并行分词:将文本按行分割后使用多线程做并行分词
jieba.enable_parallel(n)
jieba.disable_parallel()
- 词频top-n统计
- 自定义添加词及词典
jieba.add_word("添加词")
精确模式
segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))
现如今/,/机器/学习/和/深度/学习/带动/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大成功/。
全模式
segs_2 = jieba.cut(content, cut_all=True)
print("/".join(segs_2))
现如今/如今/,/机器/学习/和/深度/学习/带动/动人/人工/人工智能/智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/巨大成功/大成/成功/。
搜索引擎模式
segs_3 = jieba.cut_for_search(content)
print("/".join(segs_3))
如今/现如今/,/机器/学习/和/深度/学习/带动/人工/智能/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/大成/成功/巨大成功/。
lcut
应用
segs_4 = jieba.lcut(content)
print(segs_4)
['现如今', ',', '机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展', ',', '并', '在', '图片', '处理', '、', '语音', '识别', '领域', '取得', '巨大成功', '。']
词性标注
NLP的中文词性包括:
import jieba.posseg as psg
print([(x.word,x.flag) for x in psg.lcut(content)])
[('现如今', 't'), (',', 'x'), ('机器', 'n'), ('学习', 'v'), ('和', 'c'), ('深度', 'ns'), ('学习', 'v'), ('带动', 'v'), ('人工智能', 'n'), ('飞速', 'n'), ('的', 'uj'), ('发展', 'vn'), (',', 'x'), ('并', 'c'), ('在', 'p'), ('图片', 'n'), ('处理', 'v'), ('、', 'x'), ('语音', 'n'), ('识别', 'v'), ('领域', 'n'), ('取得', 'v'), ('巨大成功', 'nr'), ('。', 'x')]
并行分词
并行分词可以按行分割文本,使用多线程进行分词,最后归并结果
jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 。
jieba.disable_parallel() # 关闭并行分词模式 。
词频top-n统计
from collections import Counter
top5= Counter(segs_4).most_common(5)
print(top5)
自定义词典
假设,下面这段话:
txt = "人人网是当年中国最著名的校园交友网站。"
print(jieba.lcut(txt))
['人人网', '是', '当年', '中国', '最', '著名', '的', '校园', '交友', '网站', '。']
可以看到,人人网作为名词并没有被识别出来,那么可以将它加到字典里,然后再看分割效果
jieba.add_word("人人网")
print(jieba.lcut(txt))
['人人网', '是', '当年', '中国', '最', '著名', '的', '校园', '交友', '网站', '。']
HanLP
HanLP安装
HanLP的Python接口支持自动下载及安装HanLP,具体安装命令为:
pip install pyhanlp
HanLP需要Java运行环境才能够正常运行
HanLP常用方法
基础分词
from pyhanlp import *
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
print(HanLP.segment(content))
自定义词典
txt = "人人网是当年中国最著名的校园交友网站。"
CustomDictionary.add("铁甲网")
CustomDictionary.insert("校园交友", "nz 1024")
print(HanLP.segment(txt))
[人人网/nz, 是/vshi, 当年/t, 中国/ns, 最/d, 著名/a, 的/ude1, 校园/n, 交友/vi, 网站/n, 。/w]
CustomDictionary.add("铁甲网")
CustomDictionary.insert("校园交友", "nz 1024")
print(HanLP.segment(txt))
[人人网/nz, 是/vshi, 当年/t, 中国/ns, 最/d, 著名/a, 的/ude1, 校园交友/nz, 网站/n, 。/w]