分词是自然语言处理中的一项重要任务,将一段文本划分成一系列有意义的词语或单词,是很多文本处理任务的基础,如文本分类、情感分析、机器翻译等。在中文分词中,jieba是一个常用的分词工具,而在英文分词中,spaCy是一个较为流行的选择。本文将介绍jieba和spaCy的使用方法和原理。

文章目录

  • 1. jieba分词
  • 2. 用户自定义字典
  • 3. 分词效果评估
  • 4. spaCy分词

1. jieba分词

jieba是一个优秀的中文分词工具,其主要特点是支持三种分词模式:精确模式、全模式和搜索模式。同时,jieba还提供了用户自定义字典和并行分词等功能,适用于不同的中文文本处理任务。

1.1 安装

使用pip命令即可安装jieba:

pip install jieba

1.2 精确模式

精确模式是jieba默认的分词模式,它将文本按照最大概率分成词语。使用方法如下:

import jiebatext = "我们在学习自然语言处理。"
words = jieba.cut(text)
print(list(words))

输出结果为:

['我们', '在', '学习', '自然语言处理', '。']

1.3 全模式

全模式将文本中所有可能的词语都分出来,速度较快,但是会产生一些冗余的词语。使用方法如下:

import jiebatext = "我们在学习自然语言处理。"
words = jieba.cut(text, cut_all=True)
print(list(words))

输出结果为:

['我们', '在', '学习', '自然', '自然语言', '语言', '处理', '']

1.4 搜索模式

搜索模式将文本中所有可能的词语都扫描出来,有利于搜索引擎等应用。使用方法如下:

import jiebatext = "我们在学习自然语言处理。"
words = jieba.cut_for_search(text)
print(list(words))

输出结果为:

['我们', '在', '学习', '自然', '语言', '自然语言', '处理', '语言处理', '。']

2. 用户自定义字典

虽然分词工具都预先加载了大量的词库,但有时候我们可能需要加入一些特定的词汇,比如产品名、人名、地名、行业术语等。这时候,就需要使用用户自定义字典了。jieba和spaCy都支持用户自定义字典。

jieba的用户自定义字典是一个文本文件,每行一条记录,格式为:词汇 词频 词性(可选)。其中,词频和词性是可选的,如果不指定,jieba会自动计算词频并使用默认词性。下面是一个例子:

阿里巴巴 5 nr
华为 3 nz

以上例子表示将“阿里巴巴”和“华为”作为词汇加入到分词器的词库中,并指定它们的词频和词性。将自定义字典文件加载到jieba分词器中的代码如下:

import jiebajieba.load_userdict('my_dict.txt')

spaCy的用户自定义字典是一个Python文件,其中定义了一个字典对象。字典的键是词汇,值是一个字典对象,其中包含了该词汇的属性信息。下面是一个例子:

my_dict = {"阿里巴巴": {"pos": "PROPN"},"华为": {"pos": "PROPN"}
}

以上例子表示将“阿里巴巴”和“华为”作为词汇加入到分词器的词库中,并指定它们的词性为专有名词。将自定义字典加载到spaCy分词器中的代码如下:

import spacynlp = spacy.load('en_core_web_sm')from spacy.tokens import DocDoc.set_extension('my_dict', default={})nlp.vocab['阿里巴巴'].is_stop = True
nlp.vocab['阿里巴巴'].my_dict = {'pos': 'PROPN'}
nlp.vocab['华为'].is_stop = True
nlp.vocab['华为'].my_dict = {'pos': 'PROPN'}

3. 分词效果评估

分词效果的好坏对于自然语言处理任务的成功与否有着至关重要的影响。因此,在使用分词工具时,我们需要对分词效果进行评估。

分词效果评估通常使用准确率(Precision)、召回率(Recall)和F1值(F1-Score)这三个指标来衡量。其中,准确率表示正确分词的数量与分词器分出的总词数之比;召回率表示正确分词的数量与参考标准中的总词数之比;F1值是准确率和召回率的调和平均数。

3.1 准确率(Accuracy)

准确率是最简单和最直观的评估指标。它表示分词器正确切分出的单词数占所有单词数的比例。

A c c u r a c y = C o r r e c t T o t a l Accuracy = \frac{Correct}{Total} Accuracy=TotalCorrect​

其中, C o r r e c t Correct Correct 表示分词器正确切分出的单词数, T o t a l Total Total 表示总的单词数。

3.2 召回率(Recall)

召回率是指标示正确的单词数量占总单词数量的比例。它衡量的是模型发现的所有正确答案的数量。

R e c a l l = C o r r e c t R e f e r e n c e Recall = \frac{Correct}{Reference} Recall=ReferenceCorrect​

其中, C o r r e c t Correct Correct 表示分词器正确切分出的单词数, R e f e r e n c e Reference Reference 表示正确答案的单词数。

3.3 精度(Precision)

精度是指正确的单词数量占分词器预测单词数量的比例。它衡量的是模型的预测是否准确。

P r e c i s i o n = C o r r e c t P r e d i c t e d Precision = \frac{Correct}{Predicted} Precision=PredictedCorrect​

其中, C o r r e c t Correct Correct 表示分词器正确切分出的单词数, P r e d i c t e d Predicted Predicted 表示分词器预测出的单词数。

3.4 F1-Score

F1-Score 是精度和召回率的调和平均数,可以综合反映模型的预测能力和发现正确答案的能力。

F 1 − S c o r e = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1-Score = 2 \times \frac{Precision \times Recall}{Precision + Recall} F1−Score=2×Precision+RecallPrecision×Recall​

可以使用 Python 中的 sklearn 库来计算这些指标。下面是一个示例代码:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score# 分词器预测结果
pred_tokens = ['这', '是', '一个', '句子', '。']
# 正确答案
true_tokens = ['这', '是', '一个', '句子', '。']# 计算准确率
accuracy = accuracy_score(true_tokens, pred_tokens)
# 计算精度
precision = precision_score(true_tokens, pred_tokens, average='macro')
# 计算召回率
recall = recall_score(true_tokens, pred_tokens, average='macro')
# 计算 F1-Score
f1 = f1_score(true_tokens, pred_tokens, average='macro')print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1-Score:', f1)

4. spaCy分词

spaCy是一种比jieba更为先进的自然语言处理工具,其分词效果更加准确且支持多种语言。同样地,spaCy也有其自带的词库,但是我们也可以添加自定义的词汇。

安装spaCy:

pip install spacy

安装中文模型:

pip install spacy-legacy-thinc
python -m spacy download zh_core_web_sm

加载中文模型:

import spacynlp = spacy.load("zh_core_web_sm")

使用spaCy分词:

doc = nlp("这是一个测试句子")for token in doc:print(token.text)

输出结果:

这
是
一个
测试
句子

与jieba类似,spaCy也提供了分词效果的评估工具。我们可以通过比较文本的真实分词结果和工具的分词结果,计算得到各种指标,如精确率、召回率、F1值等。

from spacy.scorer import Scorer
from spacy.gold import GoldParsetext = "我喜欢自然语言处理"
doc = nlp(text)
gold = GoldParse(doc, words=["我", "喜欢", "自然语言处理"])scorer = Scorer()
scorer.score(doc, gold)print(scorer.scores)

输出结果:

{'uas': 0.0, 'las': 0.0, 'las_per_type': {'': {'p': 0.0, 'r': 0.0, 'f': 0.0}}, 'tags_acc': 0.0, 'token_acc': 0.0, 'textcat_score': 0.0}

其中,uaslas分别代表无标签和有标签的依存关系准确率(Unlabeled Attachment Score和Labeled Attachment Score),tags_acc代表词性标注准确率,token_acc代表分词准确率,textcat_score代表文本分类准确率。

spaCy除了分词外还有一些其他的功能,如词性标注、实体识别、依存关系分析等。在实际应用中,我们可以将其与其他机器学习模型结合起来,完成更复杂的自然语言处理任务。

参考文献:

  • spaCy官网
  • spaCy使用教程
  • 基于spaCy的中文分词器

分词工具与方法:jieba、spaCy等相关推荐

  1. 分词工具使用系列——jieba使用

    分词工具使用系列 第一章 sentencepiece使用 第二章 jieba工具使用 分词工具使用系列--jieba使用 分词工具使用系列 一.Jieba工具是什么 二.jieba分词和sentenc ...

  2. 中文分词工具使用方法及比较

    中文分词工具 分词背景介绍 安装及介绍(jieba.hanlp.pkuseg.thulac.snownlp.nlpir) windowst系统分词工具安装 Linux系统分词工具安装 使用方法介绍 数 ...

  3. jieba textrank关键词提取 python_五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg,THULAC, HanLP...

    最近玩公众号会话停不下来:玩转腾讯词向量:Game of Words(词语的加减游戏),准备把NLP相关的模块搬到线上,准确的说,搬到AINLP公众号后台对话,所以,趁着劳动节假期,给AINLP公众号 ...

  4. python 分词工具对比_五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP

    最近玩公众号会话停不下来: 玩转腾讯词向量:Game of Words(词语的加减游戏) ,准备把NLP相关的模块搬到线上,准确的说,搬到AINLP公众号后台对话,所以,趁着劳动节假期,给AINLP公 ...

  5. jieba库 python2.7 安装_Python中文分词工具大合集:安装、使用和测试

    这篇文章事实上整合了前面两篇文章的相关介绍,同时添加一些其他的Python中文分词相关资源,甚至非Python的中文分词工具,仅供参考. 首先介绍之前测试过的8款中文分词工具,这几款工具可以直接在AI ...

  6. NLP笔记:中文分词工具简介

    中文分词工具简介 0. 引言 1. jieba分词 1. jieba分词的基本用法 2. jieba分词的进阶版用法 1. 全模式的分词 2. 自定义领域词表加入 3. 使用jieba进行关键词抽取 ...

  7. 常用的中文分词工具介绍

    本文首先介绍下中文分词的基本原理,然后介绍下国内比较流行的中文分词工具,如jieba.SnowNLP.THULAC.NLPIR,上述分词工具都已经在github上开源,后续也会附上github链接,以 ...

  8. 自然语言处理(NLP)任务中常用的分词工具及底层算法支持

    刚刚和一个在三快在线(美团)的算法老同学聊天,聊到了他们现有分词工具效果不好的问题,我们最终讨论的结果就是没有效果好或者效果不好之后,只有适合不适合,归根结底还是要看各个分词工具中模型的基础训练数据成 ...

  9. Jieba分词工具介绍及相关API使用方法

    Jieba Introduction Project description jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再 ...

最新文章

  1. sqli-labs:5-6,盲注
  2. react.js做小程序_如何使用React.js构建现代的聊天应用程序
  3. Python_note8 程序设计方法学+Python第三方库安装+os库
  4. jquery --- 监听input框失效
  5. 如果从椭圆的一个焦点发出光线,再经过椭圆的反射,会发生什么?
  6. live2dviewer android,live2dviewerex安卓版
  7. C#起步:WinForm当中的字符
  8. 用C#编程合并多个WORD文档
  9. 如何把avi转换为mp4?视频转换用嗨格式视频转换器
  10. 解决actionBar 闪现
  11. 宏碁 AN515-51支持nvme固态接口
  12. 前端导出excel,复杂表头,合并单元格,自定义样式
  13. 微信公众号图文消息添加word附件教程详解
  14. Android Camera开发系列:设置对焦模式模式
  15. 02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
  16. Ubuntu的网络共享
  17. 四大门户免费企业邮箱用户端基础参数对比
  18. 但行好事,去他妈的前程
  19. Android 进阶之路(我的博客文章目录)
  20. 服务器共80端口开多个站点的实验

热门文章

  1. Linux安装小企鹅输入法
  2. WooCommerce REST API的初学者指南
  3. java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法
  4. Nature子刊 | 你知我意:精神病人的威胁性评估的fMRI标志物
  5. 教学目标四个维度_高中思想政治教学目标演变研究
  6. 分布式 - ElasticSearch解决大数据量检索难题
  7. Unirech-阿里云国际版云服务器ecs实例使用中的常见问题汇总
  8. 重生之我是赏金猎人-SRC漏洞挖掘(一)-某SRC测试系统无脑Getshell
  9. php js抽奖,JS做出随机抽奖系统
  10. CAD偏移尺寸出问题该如何解决?