一、简介

中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

中文分词是其他中文 (信息) 处理的基础,搜索引擎、机器翻译(MT)、语音合成、自动分类、自动摘要、自动校对等等,都需要用到分词。

目前主流分词方法:基于规则,基于统计以及二者混合。

基于规则的分词:主要是人工建立词库也叫做词典,通过词典匹配的方式对句子进行划分。其实现简单高效,但是对未登陆词很难进行处理。主要有正向最大匹配法FMM,逆向最大匹配法RMM以及双向最大匹配法Bi-MM

def FMM_func(user_dict, sentence):"""正向最大匹配(FMM):param user_dict: 词典:param sentence: 句子"""# 词典中最长词长度max_len = max([len(item) for item in user_dict])start = 0while start != len(sentence):index = start+max_lenif index>len(sentence):index = len(sentence)for i in range(max_len):if (sentence[start:index] in user_dict) or (len(sentence[start:index])==1):print(sentence[start:index], end='/')start = indexbreakindex += -1

def BMM_func(user_dict, sentence):"""反向最大匹配(BMM):param user_dict:词典:param sentence:句子"""# 词典中最长词长度max_len = max([len(item) for item in user_dict])result = []start = len(sentence)while start != 0:index = start - max_lenif index < 0:index = 0for i in range(max_len):if (sentence[index:start] in user_dict) or (len(sentence[start:index])==1):result.append(sentence[index:start])start = indexbreakindex += 1for i in result[::-1]:print(i, end='/')

​ 双向最大匹配法:FMM和BMM两种算法都分词一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,选取其中一种分词结果输出。

如:“我们在野生动物园玩”

正向最大匹配法,最终分词结果为:“我们/在野/生动/物/园/玩”,其中,总分词数6个,单字词为3。

逆向最大匹配法,最终分词结果为:“我们/在/野生动物园/玩”,其中,总分词数4个,单字词为2。

选择标准:

  1. 首先看两种方法结果的分词数,分词数越少越好;
  2. 分词数相同的情况下,看单字词的数量,越少越好;

因此最终输出为逆向结果。

https://zhuanlan.zhihu.com/p/103392455

二、Jieba

中文分词有很多种,常见的比如有中科院计算所 NLPIR、哈工大 LTP、清华大学 THULAC 、斯坦福分词器、Hanlp 分词器、jieba 分词、IKAnalyzer 等。

官方: https://github.com/fxsjy/jieba

1、分词

三种分词算法

  • 基于统计词典,构造前缀词典,基于前缀词典对句子进行切分,得到所有切分可能,根据切分位置,构造一个有向无环图(DAG);
  • 基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词;
  • 对于新词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分。

支持三种分词模式:

  • 精确模式,试图将句子最精确地切开,适合文本分析
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
import jieba
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
# 1、精确
segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))#用lcut生成list
segs_2 = jieba.lcut(content)
print(segs_2)# 2、全模式
segs_3 = jieba.cut(content, cut_all=True)
print("/".join(segs_3))
# 3、搜索引擎
segs_4 = jieba.cut_for_search(content)
print("/".join(segs_4))
1
现如今/,/机器/学习/和/深度/学习/带动/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大成功/。['现如今', ',', '机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展', ',', '并', '在', '图片', '处理', '、', '语音', '识别', '领域', '取得', '巨大成功', '。']2
现如今/如今///机器/学习/和/深度/学习/带动/动人/人工/人工智能/智能/飞速/的/发展///并/在/图片/处理///语音/识别/领域/取得/巨大/巨大成功/大成/成功//
3
如今/现如今/,/机器/学习/和/深度/学习/带动/人工/智能/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/大成/成功/巨大成功/。

lcut 生成 list

jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 Generator,可以使用 for 循环来获得分词后得到的每一个词语(Unicode)。jieba.lcut 对 cut 的结果做了封装,l 代表 list,即返回的结果是一个 list 集合。同样的,用 jieba.lcut_for_search 也直接返回 list 集合。

2、载入字典

自定义添加词到字典

  • jieba.add_word("深享网")
  • jieba.load_userdict('user_dict.txt')

3、关键词提取

  • 基于TF-IDF
  • 基于TextRank

4、词性标注

jieba 可以很方便地获取中文词性,通过 jieba.posseg 模块实现词性标注。

import jieba.posseg as psg
content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
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、hanlp为例)

1加载自定义字典

当分词工具分词不准确时,需要加载自定义词典!

正则表达式常用函数

①re.sub用于替换字符串中的匹配项

compile 函数:用于编译正则表达式,生成一个正则表达式( Pattern )对象

findall 函数:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

split 函数:按照能够匹配的子串将字符串分割后返回列表

Python正则表达式

2动态调整词频和字典顺序

当分词字典的词冲突,相互影响时,需要调整词频和字典顺序!

假设字典中定义的词也可能被切开,此时需要调用jieba.suggest_freq函数

例如“台中”,字典中定义了依然会分为“台”,“中”

②使用hanlp时,需要用sort_dict_by_lenth.py来排序字典,不然会冲突

比如字典中有“数据挖掘算法工程师”和“数据挖掘”两个,排序后就可以最长字符串匹配

③拓展: 基于词典的中文分词

NLP基础笔记1——中文分词技术相关推荐

  1. NLP基础--文本特征提取中文分词word2vec原理

    文章目录 1. 文本特征提取 1.1 词集模型 1.2 BOW(Bag of Words)词袋模型 1.3 TF-IDF 2. 中文分词 2.1 基于词典匹配的分词方法 2.1.1 正向最大匹配(MM ...

  2. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  3. 【原创】NLP中的中文分词技术

     NLP中的中文分词技术 作者:mjs (360电商技术组) 随着需求的变化和技术的发展,互联网企业对数据的分析越来越深入,尤其是自然语言处理处理领域,近几年,在搜索引擎.数据挖掘.推荐系统等应用方 ...

  4. NLP词法分析(一):中文分词技术

    文分词介绍 中文分词相较于英文分词要难许多,因为英文本身就是由单词与空格组成的,而中文则是由独立的字组成的,但同时语义却是有词来表达的.因此对于中文的分析与研究,首先应寻找合适的方法进行分词.现有的中 ...

  5. NLP|中文分词技术及应用

    摘要:中文分词是中文信息处理的重要基础,本文详细阐述了目前主要的几种中文分词算法的技术原理 .中文分词目前的瓶颈和评价准则,以及中文分词的具体应用. 中文分词指将一个汉字序列切分成一个个单独的词.现有 ...

  6. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法

    词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法 Type真是太帅了 于 2018-12-31 13:20:07 发布 1930  收藏 1 分类专栏: 编程 版权 编程 专栏收录该内容 15 ...

  7. 中文分词技术比较:单字切分 vs 中文分词

    全文信息检索系统中,创建倒排索引时应当使用什么分词方式一直是众说纷纭,毫无定论.    具我所知,已有某某 paper "研究指出"采用二元切分的方式构建索引是"最好的& ...

  8. 基于垃圾短信与垃圾邮件的检测以及iphone中siri所使用的IKAnalyzer中文分词技术

    刚开始接触安卓开发,导师就让做了一个基于安卓的垃圾短信检测软件,其中中文分词让我搞了一天,我所使用的是IKAnalyzer中文分词技术,这个包已经很是成熟.因为新手在使用中可能会出现导入的工程包错误而 ...

  9. PHP做中文分词技术

    今天做了个中文分词技术,觉得好用,分享给大家试试好用吗,我用的是ThinkPHP3.2.3框架做的,不知道大家喜欢用这个框架不. 步骤如下: 1:下载scws官方提供的类,地址是讯搜官网的 2:下载X ...

  10. 中文分词技术之基于规则分词

    中文分词技术之基于规则分词 基于规则分词的基本思想 正向最大匹配法 逆向最大匹配法 双向最大匹配法 总结 词是中文语言理解中最小的能独立运用的语言单位.中文的词与词之间没有明显分隔标志,因此在分词技术 ...

最新文章

  1. php mms,PHP代码示例_PHP账号余额查询接口 | 微米-中国领先的短信彩信接口平台服务商...
  2. Javascript单线程实现
  3. #define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
  4. 提高vivado的编译速度
  5. android view销毁回调,Android View 常用的回调方法
  6. java 连接redis 以及基本操作
  7. python wms_webGIS实践:4_2_python django整合geoserver wms服务
  8. 8086汇编语言将一串字符串内小写字母转换为大写字母,其余字符不变(全注释)
  9. Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,
  10. linux命令kill_什么是Linux中的kill命令?
  11. 织梦cms安装完成后登录后台出现空白。主要原因是php版本的问题
  12. 黑苹果OC引导添加AX200无线网卡驱动
  13. 得分——UVa1585
  14. java Doc转Pdf
  15. iOS 苹果官方Demo合集
  16. 比较完整的A2C.c
  17. Word文档中粘贴图片不显示
  18. Ubuntu 18.04 创建 mdadm RAID0
  19. Dynamics 365 JS调WEB API 报missing privilege ae5c41f0-e823-4cb9-b25a-8ef020201973
  20. musicbee歌词_MusicBee是快速而强大的音乐管理器

热门文章

  1. 第3章 词性标注(pos、N-gram、NER等标注器)
  2. 计算机学院学生会招新宣传语,团学招新 | 计算机学院团委、学生会招新啦!(一)...
  3. 中华神话传说中神仙全表(ZZ)
  4. 云锁linux宝塔安装,宝塔面板安装云锁
  5. 计算机操作系统 第三章:处理机调度与死锁(2)
  6. Burp Suite代理和火狐浏览器的设置(超详细)
  7. 网络空间地图测绘的战略意义(下)
  8. apache linux启动失败,apache2 启动失败,出现下列错误,请问怎么解决,谢谢
  9. Windows补丁修复- Microsoft Windows HTTP.sys远程代码执行漏洞 (MS15-034)(CVE-2015-1635)
  10. clickhouse 新增列_# 记录一次clickhouse表新增字段遇到的问题