中文分词方法汇总笔记 您所在的位置:网站首页 中文分词常用方法 中文分词方法汇总笔记

中文分词方法汇总笔记

#中文分词方法汇总笔记| 来源: 网络整理| 查看: 265

中文分词方法汇总笔记 分词难点分词方法传统基于字典(规则分词)基于机器学习的分词方法统计分词语言模型隐马尔可夫 HMM 模型其他 分词工具和云服务其他

感谢知乎 @华天清 的总结 中文分词方法

分词难点 分词算法: 不同的分词算法得到的分词结果不同,对下层的文本处理有较大的影响未登录词的OOV的识别: 难以识别未登录词歧义: 组合型歧义:在汉字字段AB中, A是词, B是词, AB仍是词, 则AB为组合型歧义字段。 例:我是/清华大学/的;我是/清华/大学/的 交集型歧义:在字段 ABC 中 AB是词 BC也是词, 则 ABC为交集型歧义 例:球拍/卖 球/拍卖 真歧义:在一句话中, 由人去判断也不知道哪个应该是词, 哪个应该不是词 例:球拍卖了 可以是 球/拍卖了 也可以是 球拍/卖了 分词方法 传统基于字典(规则分词)

一、 正向最大匹配法 FMM:

从左向右取待切分汉语句的m个字符作为匹配字段,m为大机器词典中最长词条个数。查找大机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。

在这里插入图片描述

二、逆向最大匹配法 RMM: 对文本从右至左切出最长的词,该算法是正向最大匹配的逆向思维,匹配不成功,将匹配字段的最前一个字去掉,实验表明,逆向最大匹配算法要优于正向最大匹配算法 汉语中偏正结构较多,若使用逆向匹配,可以适当的提高精度 三、双向匹配分词法 BMM: 将正向最大匹配法得到的分词结果和逆向最大匹配法的到的结果进行比较,从而决定正确的分词方法。

正逆向分词次数不同,选分词树较少的词数相同,且结果相同 返回任意一个词数相同,结果不同,返回单字最少的 # -*- coding:utf-8 -*- # @Time : 2019/10/21 11:12 # @Author : Ray.X # 初始化 word_dict = ['研究', '研究生', '生命', '起源', '南京市', '南京市长', '长江', '大桥', '长江大桥'] test_str = '在南京市长江大桥研究生命的起源' # 遍历分词词典,获得最大分词长度 MaxLen = 0 for key in word_dict: if len(key) > MaxLen: MaxLen = len(key) def forward_mm(): """ 正向最大匹配 FMM :return: """ foward_out = [] n = 0 while n }] all_states = trans_p.keys() # 初始状态 for y in states.get(obs[0], all_states): # init V[0][y] = start_p[y] + emit_p[y].get(obs[0], MIN_FLOAT) mem_path[0][y] = '' # 时刻t = 1,...,len(obs) - 1 for t in xrange(1, len(obs)): V.append({}) mem_path.append({}) #prev_states = get_top_states(V[t-1]) # 当前时刻所处的各种可能的状态 prev_states = [ x for x in mem_path[t - 1].keys() if len(trans_p[x]) > 0] prev_states_expect_next = set( (y for x in prev_states for y in trans_p[x].keys())) obs_states = set( states.get(obs[t], all_states)) & prev_states_expect_next if not obs_states: obs_states = prev_states_expect_next if prev_states_expect_next else all_states for y in obs_states: prob, state = max((V[t - 1][y0] + trans_p[y0].get(y, MIN_INF) + emit_p[y].get(obs[t], MIN_FLOAT), y0) for y0 in prev_states) V[t][y] = prob mem_path[t][y] = state last = [(V[-1][y], y) for y in mem_path[-1].keys()] # if len(last)==0: # print obs # 最后一个时刻 prob, state = max(last) route = [None] * len(obs) i = len(obs) - 1 while i >= 0: route[i] = state state = mem_path[i][state] i -= 1 return (prob, route) # 返回最大概率对数和最优路径 import jieba """ jieba提供3种分词模式 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 """ default = jieba.cut('在南京市长江大桥研究生命的起源', cut_all=False) # 精确模式 也是默认模式 full = jieba.cut('在南京市长江大桥研究生命的起源', cut_all=True) # 全模式 search = jieba.cut_for_search('在南京市长江大桥研究生命的起源') # 搜索引擎模式 print('default', "/ ".join(default)) print('full', "/ ".join(full)) print('search', ", ".join(search))

识别结果

其他

支持向量机 SVM 深度学习的分词方法 基于神经网络的分词器 textCNN 序列到序列模型 seq2seq 注意力机制 Attention Mechanism BERT模型

## 整理后稍后加入 分词工具和云服务

Hanlp 分词 最短路径分词,有中文分词、词性标注、新词识别、命名实体识别、自动摘要、文本聚类、情感分析、词向量word2vec等功能,支持自定义词典; 采用HMM、CRF、TextRank、word2vec、聚类、神经网络等算法; 支持Java,C++,Python语言; 在线链接http://hanlp.com/ JAVA:https://github.com/hankcs/HanLP

com.hankcs hanlp portable-1.6.1

Python:https://github.com/hankcs/pyhanlp

pip install pyhanlp

data 链接http://114.115.185.60/file/data-for-1.7.5.zip 因 Hanlp主要由java编写所以在使用时需要安装JDK jieba分词 找出基于词频的最大切分组合,有中文分词、关键词提取、词性标注功能,支持自定义词典; 采用HMM模型、 Viterbi算法; 支持Java,C++,Python, node.js, Golang, ios 大概是使用最多的分词工具 https://github.com/fxsjy/jieba 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba 通过 import jieba 来引用 哈工大的LTP https://github.com/HIT-SCIR/ltp 有中文分词、词性标注、句法分析等功能; 商用需付费;调用接口,每秒请求的次数有限制; 编写语言有C++、Python、Java版; 清华大学THULAC https://github.com/lancopku/PKUSeg-python 支持按领域分词、有词性标注功能、支持用户自训练模型; 基于CRF模型、自研的ADF训练方法; 有python版本; 斯坦福分词器 https://nlp.stanford.edu/software/segmenter.shtml 支持多语言分词包括中英文,提供训练模型接口,也可用已有模型,但速度较慢; Java实现的CRF算法;支持python 食用方法参见: NLTK结合stanfordnlp工具包使用方法总结https://blog.csdn.net/lizzy05/article/details/88148097 Stanfordnlp 安装及使用https://blog.csdn.net/lizzy05/article/details/87483539 KCWS分词器 https://github.com/koth/kcws 有中文分词、词性标注功能,支持自定义词典; 采用word2vec、Bi-LSTM、CRF算法; ZPar https://github.com/frcchang/zpar/releases 有中文、英文、西班牙语分词、词性标注,由C++语言编写; IKAnalyzer https://github.com/wks/ik-analyzer 有中文分词功能,支持自定义词典; Jcseg https://gitee.com/lionsoul/jcseg 有中文分词、关键词提取、自动摘要、词性标注、实体识别等功能,支持自定义词典; 基于mmseg、textRank、BM25等算法; FudanNLP https://github.com/FudanNLP/fnlp 中文分词 词性标注 实体名识别 关键词抽取等; SnowNLP https://github.com/isnowfy/snownlp 有中文分词、词性标注、情感分析、文本分类、提取关键词等功能; 基于HMM、Naive Bayes、TextRank、tf-idf等算法; Python类库; ansj分词器 https://github.com/NLPchina/ansj_seg 有中文分词、人名识别、词性标注、用户自定义词典等功能; 基于n-Gram+CRF+HMM算法; NLTK https://github.com/nltk/nltk 擅长英文分词,也支持中文分词处理,但建议先用其他分词工具对中文语料分词,再用它的处理功能; 庖丁解牛 https://code.google.com/archive/p/paoding/ 支持Lucene 3.0

中科院NLPIR 具有分词、词性标注、新词识别、命名实体识别、情感分析、关键词提取等功能,支持自定义词典; https://github.com/NLPIR-team/NLPIR/tree/master/NLPIR-Parser 有在线以及独立客户端 有12大功能

新词发现: 从文件集合中挖掘出内涵的新词语列表,可以用于用户专业词典的编撰;还可以进一步编辑标注,导入分词词典中,从而提高分词系统的准确度,并适应新的语言变化。 批量分词标注: 对原始语料进行分词、自动识别人名地名机构名等未登录词、新词标注以及词性标注。并可在分析过程中,导入用户定义的词典。统计分析与术语翻译 针对切分标注结果,系统可以自动地进行一元词频统计、二元词语转移概率统计(统计两个词左右连接的频次即概率)。针对常用的术语,会自动给出相应的英文解释。文本聚类及热点分析 能够从大规模数据中自动分析出热点事件,并提供事件话题的关键特征描述。同时适用于长文本和短信、微博等短文本的热点分析。大数据文本分类过滤 针对事先指定的规则或示例样本,系统自动从海量文档中筛选出符合需求的样本。摘要提取 能够对单篇或多篇文章,自动提炼出内容的摘要,抽取人名、地名、机构名、时间及主题关键词;方便用户快速浏览文本内容。能够对单篇文章或文章集合,提取出若干个代表文章中心思想的词汇或短语,可用于精化阅读、语义查询和快速匹配等。敏感信息扫描分析 根据配置的敏感关键,快速扫描各种关键词及变种。情感分析 针对事先指定的分析对象和示例样本,系统自动从海量文档中筛选出正负面的得分和句子样例。文档去重 能够快速准确地判断文件集合或数据库中是否存在相同或相似内容的记录,同时找出所有的重复记录。HTML正文提取 自动剔除导航性质的网页,剔除网页中的HTML标签和导航、广告等干扰性文字,返回有价值的正文内容。适用于大规模互联网信息的预处理和分析。全文精准检索 支持文本、数字、日期、字符串等各种数据类型,多字段的高效搜索,支持AND/OR/NOT以及NEAR邻近等查询语法,支持维语、藏语、蒙语、阿拉伯、韩语等多种少数民族语言的检索。可以无缝地与现有文本处理系统与数据库系统融合。编码自动识别与转换 自动识别内容的编码,并把编码统一转换为GBK编码。 其他

(1)腾讯文智 (2)BosonNLP (3)百度NLP (4)阿里云NLP (5)新浪云 (6)盘古分词 具有中英文分词功能,支持自定义词典;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有