如何使用中文分词和自定义中文分词词典

如何使用中文分词和自定义中文分词词典,第1张

如何使用中文分词和自定义中文分词词典

可以使用下面的命令,启用中文分词。

1 CREATE EXTENSION zhparser;

2

3 CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);

4

5 ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

6

7 --可选的参数设定

8 alter role all set zhparsermulti_short=on;

9

10 --简单测试

11 SELECT FROM ts_parse('zhparser','hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大了保障房的建设和投入力度。2011年,保障房进入了更大规模的建设阶段。住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。');

12

13 SELECT to_tsvector('testzhcfg','“今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历史纪录。”陈国强说。在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。');

14

15 SELECT to_tsquery('testzhcfg','保障房资金压力');

利用分词进行全文索引的方法如下。

1 --为T1表的name字段创建全文索引

2 create index idx_t1 on t1 using gin (to_tsvector('zhcfg',upper(name)));

3

4 --使用全文索引

5 selectfrom t1 where to_tsvector('zhcfg',upper(t1name))@@ to_tsquery('zhcfg','(防火)');

还可以使用自定义的中文分词词典,使用方法如下,注意自定义中文分词词典在内核小版本20160801和之后的版本才支持。

1 --确实的分词结果

2 SELECT to_tsquery('testzhcfg','保障房资金压力');

3

4 --往自定义分词词典里面插入新的分词

5 insert into pg_ts_custom_word values ('保障房资');

6

7 --使新的分词生效

8 select zhprs_sync_dict_xdb();

9

10 --退出此连接

11 \c

12

13 --重新查询,可以得到新的分词结果

14 SELECT to_tsquery('testzhcfg','保障房资金压力');

使用自定义分词的注意事项如下。

1 最多支持1000000条自定义分词,超出部分不做处理,用户必须保证分词数量在这个范围之内。自定义分词与缺省的分词词典将共同产生作用。

2 每个词的最大长度为128字节,超出部分将会截取。

3 通过增删改分词之后必须执行selectzhprs_sync_dict_xdb();并且重新建立连接才会生效。

        在序列标注任务(中文分词CWS,词性标注POS,命名实体识别NER等)中,目前主流的深度学习框架是BiLSTM+CRF。其中BiLSTM融合两组学习方向相反(一个按句子顺序,一个按句子逆序)的LSTM层,能够在理论上实现当前词即包含历史信息、又包含未来信息,更有利于对当前词进行标注。BiLSTM在时间上的展开图如下所示。

        若输入句子由120个词组成,每个词由100维的词向量表示,则模型对应的输入是(120,100),经过BiLSTM后隐层向量变为T1(120,128),其中128为模型中BiLSTM的输出维度。如果不使用CRF层,则可以在模型最后加上一个全连接层用于分类。设分词任务的目标标签为B(Begin)、M(Middle)、E(End)、S(Single),则模型最终输出维度为(120,4)的向量。对于每个词对应的4个浮点值,分别表示对应BMES的概率,最后取概率大的标签作为预测label。通过大量的已标注数据和模型不断迭代优化,这种方式能够学习出不错的分词模型。

        然鹅,虽然依赖于神经网络强大的非线性拟合能力,理论上我们已经能够学习出不错的模型。但是,上述模型只考虑了标签上的上下文信息。对于序列标注任务来说,当前位置的标签L_t与前一个位置L_t-1、后一个位置L_t+1都有潜在的关系。

        例如,“我/S 喜/B 欢/E 你/S”被标注为“我/S 喜/B 欢/B 你/S”,由分词的标注规则可知,B标签后只能接M和E,因此上述模型利用这种标签之间的上下文信息。因此,自然语言处理领域的学者们提出了在模型后接一层CRF层,用于在整个序列上学习最优的标签序列。添加CRF层的模型如下图所示。

上述出自 >

导读:百度作为中文搜索引擎的先驱,它的核心地位可以说在短时期是没有任何搜索引擎可以超越的,百度的卓越成就在于它对博大精深的中国文化的领悟和对中文分词的的超强功底。百度受欢迎的主要原因除了用户习惯的原因,在较大程度上得益于百度算法的精准率,搜索结果值更贴近用户的想获得的资讯。用一句广告词 “正是我想要的”来形容百度最恰当不过了。

正因为百度对中国搜索引擎市场的统治地位,企业想在网上赚取大量的钞票,就不得不依靠百度。所以做搜索引擎的优化实际上就是百度优化。但百度强大的反优化能力和人工干预机制,使得众多的优化者以失败以失败告终。对于大多数优化者来说,百度成了洪水猛兽。果真如此吗?网络行销大师邓友成认为不尽然。只要是搜索引擎就离不开算法,任何算法都是有规律可循的。下面我们深入浅出的探讨一下百度的算法吧。

一 搜索信息响应

当用户向百度提出搜索请求后百度会迅速根据用户的请求提供比较精准的结果值。

1 比喻当用户提交“搜索引擎 优化 技术”这个查询文字串百度会将文字串分割成若干子文字串,用空格,标点符等做细分处理。那么这个文字串就可以分成“搜索引擎,优化,技术”。

2 如果用户提交的请求有重复的文字符,例如”优化 技术 优化”,百度会将重复的文字符看成一个。而字符的出现顺序就忽略。

3 当用户提交请求中出现英文字符,百度一般会将英文字符当作一个整体来看,并和中文词分割开来,如果中文出现数字也是这样处理的。

百度通过切割、重组、归并、减负等手段对用户请求进行精准响应,使搜索结果符合用户的想法,以节省用户的查询时间,提高查询效率。

二 中文核心分词

中文分词是百度算法的核心要素。按中文语法习惯,三个字(含三个字)以下的文字符是独立精准的词汇,没有重组的必要,所以百度对三个字(含三个字)以下的文字符不考虑细分。这也是百度核心算法的第一层,也是响应数量最多的部分。一般这些文字符更新的时间比较慢一些,一周或两周的时间。属于大更新的范畴。

四个字符的百度就会毫不客气的大卸十八块比如,网络工具这个文字串,当用户发出搜索请求后,会发现在搜索结果里面出现了红色的标记,已经把这个文字符分成了“网络,工具”。当然如果是四个字以上的文字串就更不用说了。会分成更多的分词。

三、字词匹配

大概了解了百度的分词原理后,我们要了解的一个重要方面就是字词的匹配问题。如果不知道字词的匹配,做优化就是空谈了。

最大匹配法

最大匹配法亦称MM法。假设自动分词词典(或词库)中的最长词条是y个字,则取被处理材料当前字符串序列中的前y个字作为匹配字段,查找词典,若词典中存在这样的一个y字词,则匹配成功,匹配字段被作为一个词切分出来;如果在词典中找不到这样一个y字词,则匹配失败,匹配字段去掉最后一个字,剩下的字段重新进行匹配,如此进行下去,直到匹配成功,也就是完成一轮匹配,切分出一个词为止。

正向最大匹配算法

正向最大匹配法(由左到右的方向)。首先粗分,按照句子把文本切成一个一个句子。然后把每个句子切成单字。字典按照树形结构存储,比如这句话“春天还会远吗”首先查找“春”字开头的词,然后按照字典树形结构往下走一个节点,查找“春”后面一个字是“天”的词,然后又下沉一个节点,找“还”下面是“会”的词,找不到了,查找就结束。

反向最大匹配算法

逆向最大匹配法(由右到左的方向);就是朝相反的方向发掘可以匹配的文字,比如网上商城这个文字串,那么会向左延伸在王上的前面会出现的结果是区域性的文字,不如上海或者北京等,在商城的前面会出现更精准的定义文字符,不如爱家,女人等专属性强的文字符。

双向最大匹配算法

正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。就是向左右纵深挖掘比较匹配的结果值。

熟悉了百度分词的方法后,我们就要在优化的过程充分的考虑相关联的因素,合理的对你所要向用户推荐的文字串做合理的规范和谋划。软优化欢迎优化者们和我们一道加强交流共同进步。

而百度中文分词就是把词按照一定的规格,将一个长尾词分割成几个部分,从而概括一段话的主要内容。在百度中文分词中,百度强调的是:一、

字符串匹配的分词方法。我们需要有一定的字符串做基础,就是一段词用字符分开,比如标点符号,空格等。才能够进行分词匹配,我们把这些字符串叫做机械词典。机械词典的个数不定。由每个搜索引擎自己确定。每个机械词典之间还会有优先级。字符串匹配的分词方法最常用的有几种:1、正向最大匹配法(由左到右的方向)2、逆向最大匹配法(由右到左的方向)3、最少切分(使每一句中切出的词数最小)百度中文分词基于字符串匹配举例给大家说明一下:“我想去澳大利亚旅游”正向最大匹配:我想去,澳大利亚旅游逆向最大匹配:我想,想去,澳大利亚,旅游。最少切分:我把上面哪句话分成的词要是最少的“我想去,澳大利亚旅游”这就是最短路径分词法,分出来就只有2个词了。另外,不同的搜索的词典不同,分出来的词也不同。二、理解的分词方法。这种分词方法不需要机械词典。这种其实就是一种机器语音判断的分词方法。很简单,进行句法、语义分析,利用句法信息和语义信息来处理歧义现象来分词,这种分词方法,现在还不成熟。处在测试阶段。三、统计的分词方法。这个顾名思义,就是根据词组的统计,发现那些相邻的字出现的频率高,那么这个词就很重要。可以作为用户提供字符串中的分隔符。比如,“我的,你的,许多的,这里,这一,那里”。等等,这些词出现的比较多,就从这些词里面分开来。四、对于百度中文分词的理解:基于统计的分词方法得到的词或者句子的权重要高于基于字符串匹配得到的。就是全字匹配得到的词的权重会高于分开的词的权重。根据自己的观察现在百度大部分都是使用的是正向匹配。百度分词对于一句话分词之后,还会去掉句子中的没有意义的词语。

自然语言处理(NLP)是机器学习重要分支之一,主要应用于篇章理解、文本摘要、情感分析、知识图谱、文本翻译等领域。而NLP应用首先是对文本进行分词,当前中文分词器有Ansj、paoding、盘古分词等多种,而最基础的分词器应该属于jieba分词器(比较见下图)。

下面将分别应用R和python对jieba分词器在中文分词、词性标注和关键词提取领域的应用进行比较。

R实现

通过函数worker()来初始化分词引擎,使用segment()进行分词。有四种分词模式:最大概率法(MP)、隐马尔科夫模型(HMM)、混合模型(Mix)及索引模型(query),默认为混合模型。具体可查看help(worker)

#installpackages('jiebaR')library(jiebaR)mixseg <- worker()segment( "这是一段测试文本" , mixseg ) #或者用以下 *** 作mixseg['这是一段测试文本']mixseg <= "这是一段测试文本"

python实现

python中需安装jieba库,运用jiebacut实现分词。cut_all参数为分词类型,默认为精确模式。

import jiebaseg_list = jiebacut(u"这是一段测试文本",cut_all = False)print("Full mode: "+ ","join(seg_list))  #默认精确模式

无论是R还是python都为utf—8编码。

R实现

可以使用<=tagger 或者tag 来进行分词和词性标注,词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。

words = "我爱北京天安门"tagger = worker("tag") #开启词性标注启发器tagger <= words    #    r        v      ns      ns    # "我"    "爱"  "北京" "天安门"

python实现

#词性标注import jiebaposseg as psegwords = psegcut("我爱北京天安门")for word,flag in words:    print('%s, %s' %(word,flag))

R实现

R关键词提取使用逆向文件频率(IDF)文本语料库,通过worker参数“keywords”开启关键词提取启发器,topn参数为关键词的个数。

keys = worker("keywords",topn = 5, idf = IDFPATH)keys <= "会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。"#结果:#        488677        234784        221402        20326        185354 #      "饮用水"        "Flint"        "卫生"      "水污染"        "生活"

python实现

python实现关键词提取可运用TF-IDF方法和TextRank方法。allowPOS参数为限定范围词性类型。

#关键词提取import jiebaanalysecontent = u'会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。'#基于TF-IDFkeywords = jiebaanalyseextract_tags(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]  #基于TF-IDF结果# 饮用水 0448327672795# Flint 0219353532163# 卫生 0203120821773# 水污染 0186477211628# 生活 0170049997544

#基于TextRankkeywords = jiebaanalysetextrank(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]    #基于TextRank结果:# 饮用水 10# 美国 0570564785973# 奚传武 0510738424509# 单位 0472841889334# 讲座 0443770732053

写在文后

自然语言处理(NLP)在数据分析领域有其特殊的应用,在R中除了jiebaR包,中文分词Rwordseg包也非常常用。一般的文本挖掘步骤包括:文本获取(主要用网络爬取)——文本处理(分词、词性标注、删除停用词等)——文本分析(主题模型、情感分析)——分析可视化(词云、知识图谱等)。本文是自然语言处理的第一篇,后续将分别总结下应用深度学习Word2vec进行词嵌入以及主题模型、情感分析的常用NLP方法。

参考资料

Introduction · jiebaR 中文分词 >

中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的。

中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为切分。根据其特点,可以把分词算法分为四大类:

基于规则的分词方法

基于统计的分词方法

基于语义的分词方法

基于理解的分词方法

下面我们对这几种方法分别进行总结。

基于规则的分词方法

这种方法又叫作机械分词方法、基于字典的分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配。若在词典中找到某个字符串,则匹配成功。该方法有三个要素,即分词词典、文本扫描顺序和匹配原则。文本的扫描顺序有正向扫描、逆向扫描和双向扫描。匹配原则主要有最大匹配、最小匹配、逐词匹配和最佳匹配。

最大匹配法(MM)。基本思想是:假设自动分词词典中的最长词条所含汉字的个数为 i,则取被处理材料当前字符串序列中的前 i 个字符作为匹配字段,查找分词词典,若词典中有这样一个 i 字词,则匹配成功,匹配字段作为一个词被切分出来;若词典中找不到这样的一个 i 字词,则匹配失败,匹配字段去掉最后一个汉字,剩下的字符作为新的匹配字段,再进行匹配,如此进行下去,直到匹配成功为止。统计结果表明,该方法的错误率 为 1/169。

逆向最大匹配法(RMM)。该方法的分词过程与 MM 法相同,不同的是从句子(或文章)末尾开始处理,每次匹配不成功时去掉的是前面的一个汉字。统计结果表明,该方法的错误率为 1/245。

逐词遍历法。把词典中的词按照由长到短递减的顺序逐字搜索整个待处理的材料,一直到把全部的词切分出来为止。不论分词词典多大,被处理的材料多么小,都得把这个分词词典匹配一遍。

设立切分标志法。切分标志有自然和非自然之分。自然切分标志是指文章中出现的非文字符号,如标点符号等;非自然标志是利用词缀和不构成词的词(包 括单音词、复音节词以及象声词等)。设立切分标志法首先收集众多的切分标志,分词时先找出切分标志,把句子切分为一些较短的字段,再用 MM、RMM 或其它的方法进行细加工。这种方法并非真正意义上的分词方法,只是自动分词的一种前处理方式而已,它要额外消耗时间扫描切分标志,增加存储空间存放那些非 自然切分标志。

最佳匹配法(OM)。此法分为正向的最佳匹配法和逆向的最佳匹配法,其出发点是:在词典中按词频的大小顺序排列词条,以求缩短对分词词典的检索时 间,达到最佳效果,从而降低分词的时间复杂度,加快分词速度。实质上,这种方法也不是一种纯粹意义上的分词方法,它只是一种对分词词典的组织方式。OM 法的分词词典每条词的前面必须有指明长度的数据项,所以其空间复杂度有所增加,对提高分词精度没有影响,分词处理的时间复杂度有所降低。

此种方法优点是简单,易于实现。但缺点有很多:匹配速度慢;存在交集型和组合型歧义切分问题;词本身没有一个标准的定义,没有统一标准的词集;不同词典产生的歧义也不同;缺乏自学习的智能性。

基于统计的分词方法

该方法的主要思想:词是稳定的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻出现的概率或频率能较好地反映成词的可信度。可以对训练文本中相邻出现的各个字的组合的频度进行统计,计算它们之间的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程 度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词。

该方法所应用的主要的统计模型有:N 元文法模型(N-gram)、隐马尔可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、条件随机场模型(Conditional Random Fields,CRF)等。

在实际应用中此类分词算法一般是将其与基于词典的分词方法结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

基于语义的分词方法

语义分词法引入了语义分析,对自然语言自身的语言信息进行更多的处理,如扩充转移网络法、知识分词语义分析法、邻接约束法、综合匹配法、后缀分词法、特征词库法、矩阵约束法、语法分析法等。

扩充转移网络法

该方法以有限状态机概念为基础。有限状态机只能识别正则语言,对有限状态机作的第一次扩充使其具有递归能力,形成递归转移网络 (RTN)。在RTN 中,弧线上的标志不仅可以是终极符(语言中的单词)或非终极符(词类),还可以调用另外的子网络名字分非终极符(如字或字串的成词条件)。这样,计算机在 运行某个子网络时,就可以调用另外的子网络,还可以递归调用。词法扩充转移网络的使用, 使分词处理和语言理解的句法处理阶段交互成为可能,并且有效地解决了汉语分词的歧义。

矩阵约束法

其基本思想是:先建立一个语法约束矩阵和一个语义约束矩阵, 其中元素分别表明具有某词性的词和具有另一词性的词相邻是否符合语法规则, 属于某语义类的词和属于另一词义类的词相邻是否符合逻辑,机器在切分时以之约束分词结果。

基于理解的分词方法

基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。目前基于理解的分词方法主要有专家系统分词法和神经网络分词法等。

专家系统分词法

从专家系统角度把分词的知识(包括常识性分词知识与消除歧义切分的启发性知识即歧义切分规则)从实现分词过程的推理机中独立出来,使知识库的维护与推理机的实现互不干扰,从而使知识库易于维护和管理。它还具有发现交集歧义字段和多义组合歧义字段的能力和一定的自学习功能。

神经网络分词法

该方法是模拟人脑并行,分布处理和建立数值计算模型工作的。它将分词知识所分散隐式的方法存入神经网络内部,通过自学习和训练修改内部权值,以达到正确的分词结果,最后给出神经网络自动分词结果,如使用 LSTM、GRU 等神经网络模型等。

神经网络专家系统集成式分词法

该方法首先启动神经网络进行分词,当神经网络对新出现的词不能给出准确切分时,激活专家系统进行分析判断,依据知识库进行推理,得出初步分析,并启动学习机制对神经网络进行训练。该方法可以较充分发挥神经网络与专家系统二者优势,进一步提高分词效率。

以上便是对分词算法的基本介绍。

以上就是关于如何使用中文分词和自定义中文分词词典全部的内容,包括:如何使用中文分词和自定义中文分词词典、基于BiLSTM-CNN-CRF的中文分词(一)、百度算法中怎么进行中文切词分词等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10136600.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存