NLP预处理之分词工具的使用(jieba,hanlp)


一、jieba简介

jieba是一个常用的中文分词python库

#安装jieba库
pip install jieba
#使用jieba库
import jieba

二、jieba的使用

1. 精确模式分词

精确模式试图将句子最精确地切开,适合文本分析

import jieba

text = "深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。"

#cut方法返回生成器对象,cut_all=False为精确模式(默认False)
print(jieba.cut(text, cut_all=False))

#lcut方法直接返回列表内容
cuted = jieba.lcut(text, cut_all=False)
print(cuted)

#分割后进行n-gram表示的示例
print([cuted[i:i+2] for i in range(len(cuted)-1)])

结果:

<generator object Tokenizer.cut at 0x0000029E05708580>
['深度', '学习', '(', '英语', ':', 'deep', ' ', 'learning', ')', '是', '机器', '学习', '的', '分支', ',', '是', '一种', '以', '人工神经网络', '为', '架构', ',', '对', '数据', '进行', '表征', '学习', '的', '算法', '。']
[['深度', '学习'], ['学习', '('], ['(', '英语'], ['英语', ':'], [':', 'deep'], ['deep', ' '], [' ', 'learning'], ['learning', ')'], [')', '是'], ['是', '机器'], ['机器', '学习'], ['学习', '的'], ['的', '分支'], ['分支', ','], [',', '是'], ['是', '一种'], ['一种', '以'], ['以', '人工神经网络'], ['人工神经网络', '为'], ['为', '架构'], ['架构', ','], [',', '对'], ['对', '数据'], ['数据', '进行'], ['进行', '表征'], ['表征', '学习'], ['学习', '的'], ['的', '算法'], ['算法', '。']]

同样适用于中文繁体分词

2. 全模式分词

把句子中所有的可以成词的词语都扫描出来, 速度非常快,但不能消除歧义.

import jieba

text = "深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。"

#lcut方法直接返回列表内容
cuted = jieba.lcut(text, cut_all=True)
print(cuted)

结果:

['深度', '学习', '(', '英语', ':', 'deep', '', ' ', '', 'learning', ')', '是', '机器', '学习', '的', '分支', ',', '是', '一种', '以', '人工', '人工神经网络', '神经', '神经网', '神经网络', '网络', '为', '架构', ',', '对数', '数据', '进行', '表征', '学习', '的', '算法', '。']

可见“人工神经网络”这个词分割成了所有可能的词

3. 搜索引擎模式分词

在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词.

import jieba

text = "深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。"

#lcut方法直接返回列表内容
cuted = jieba.lcut_for_search(text)
print(cuted)

结果:

['深度', '学习', '(', '英语', ':', 'deep', ' ', 'learning', ')', '是', '机器', '学习', '的', '分支', ',', '是', '一种', '以', '人工', '神经', '网络', '神经网', '人工神经网络', '为', '架构', ',', '对', '数据', '进行', '表征', '学习', '的', '算法', '。']

对“人工神经网络”等较长词进行了再分词

4. 使用用户自定义分词

  • 添加自定义词典后, jieba能够准确识别词典中出现的词汇,提升整体的识别准确率.
  • 词典格式: 每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒.

在usredict.txt文件中添加如下词表

云计算 5 n
李小福 2 nr
easy_install 3 eng
好用 300
韩玉赏鉴 3 nz
八一双鹿 3 nz
import jieba

#未添加自定义词典
print(jieba.lcut("八一双鹿更名为八一南昌篮球队!"))

#添加自定义词典
jieba.load_userdict("./userdict.txt")
print(jieba.lcut("八一双鹿更名为八一南昌篮球队!"))

结果如下:

['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队', '!']
['八一双鹿', '更名', '为', '八一', '南昌', '篮球队', '!']

三、hanlp简介

流行中英文分词工具hanlp:
中英文NLP处理工具包, 基于tensorflow2.0, 使用在学术界和行业中推广最先进的深度学习技术.

#安装hanlp库
pip install hanlp

四、hanlp的使用

1. 使用hanlp进行中文分词

>>> import hanlp
# 加载CTB_CONVSEG预训练模型进行分词任务
>>> tokenizer = hanlp.load('CTB6_CONVSEG')
>>> tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作")
['工信处', '女', '干事', '每', '月', '经过', '下', '属', '科室', '都', '要', '亲口', '交代', '24口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']

2. 使用hanlp进行英文分词

# 进行英文分词, 英文分词只需要使用规则即可
>>> tokenizer = hanlp.utils.rules.tokenize_english 
>>> tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')
['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']

五、命名实体识别

命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.

顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.

使用hanlp进行中文命名实体识别:

>>> import hanlp
# 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZH
>>> recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)
# 这里注意它的输入是对句子进行字符分割的列表, 因此在句子前加入了list()
# >>> list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美 国纽约现代艺术博物馆参观。')
# ['上', '海', '华', '安', '工', '业', '(', '集', '团', ')', '公', '司', '董', '事', '长', '谭', '旭', '光', '和', '秘', '书', '张', '晚', '霞', '来', '到', '美', '国', '纽', '约', '现', '代', '艺', '术', '博', '物', '馆', '参', '观', '。'] 
>>> recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。'))
[('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]

# 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代表具体的命名实体,: '上海华安工业(集团)公司'; 命名实体的类型,: 'NT'-机构名; 命名实体的开始索引和结束索引,: 0, 12.

使用hanlp进行英文命名实体识别:

>>> import hanlp
# 加载英文命名实体识别的预训练模型CONLL03_NER_BERT_BASE_UNCASED_EN
>>> recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN))
# 这里注意它的输入是对句子进行分词后的结果, 是列表形式.
>>> recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"])
[('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)]
# 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代>表具体的命名实体,: 'Obama',: 'PER'-人名; 命名实体的开始索引和结束索引,: 1, 2.

六、词性标注

词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.

顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.

示例:

我爱自然语言处理

==>/rr,/v, 自然语言/n, 处理/vn

rr: 人称代词
v: 动词
n: 名词
vn: 动名词

使用jieba进行中文词性标注

import jieba.posseg as pseg
ls = pseg.lcut("我爱北京天安门")
print(ls)

结果:

[pair('我', 'r'), pair('爱', 'v'), pair('北京', 'ns'), pair('天安门', 'ns')]

使用hanlp进行中文词性标注:

>>> import hanlp
# 加载中文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT_ZH
>>> tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)
# 输入是分词结果列表
>>> tagger(['我', '的', '希望', '是', '希望', '和平'])
# 结果返回对应的词性
['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']

使用hanlp进行英文词性标注:

>>> import hanlp
# 加载英文命名实体识别的预训练模型PTB_POS_RNN_FASTTEXT_EN
>>> tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)
# 输入是分词结果列表
>>> tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])
['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文文本分词自然语言处理中的一个重要环节,可以将一段连续的中文文本切分成一个个有意义的词语,为后续的文本处理提供基础。下面是使用jieba分词工具进行中文文本分词的操作步骤: 1. 安装jieba分词工具 可以使用pip命令进行安装:`pip install jieba` 2. 导入jieba分词工具Python代码中导入jieba分词工具:`import jieba` 3. 加载停用词 停用词是指在文本分析中不需要进行处理的词语,如“的”、“是”等常用词语,可以在分词前进行过滤。可以先将停用词保存在一个文件中,然后在代码中读取并进行加载。 4. 加载自定义词典 jieba分词工具提供了用户自定义词典的功能,可以通过加载自定义词典来增加分词的准确性。可以将自定义词典保存在一个文件中,然后在代码中读取并进行加载。 5. 对文本进行分词 使用jieba分词工具的`jieba.cut()`函数对文本进行分词,函数返回一个生成器对象,可以通过遍历生成器对象获取分词结果。可以使用不同的分词模式进行分词,如精确模式、全模式、搜索引擎模式等。 6. 进行词性标注 jieba分词工具还提供了词性标注的功能,可以对分词结果进行词性标注,如名词、动词、形容词等。 7. 进行去重、去停用词等处理 对于分词结果,可以进行去重、去停用词等处理,以获取更加准确的分词结果。 以上是使用jieba分词工具进行中文文本分词的基本操作步骤,需要根据具体的任务需求进行相应的参数设置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值