中文分词

维特比算法 实现中文分词 python实现

半腔热情 提交于 2020-01-06 16:39:11
本文转载自: https://zhuanlan.zhihu.com/p/58163299 最近我在学习自然语言处理,相信大家都知道NLP的第一步就是学分词,但分词≠自然语言处理。现如今 分词工具 及如何使用网上一大堆。我想和大家分享的是结巴分词核心内容,一起探究分词的本质。 (1)、基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 什么是DAG(有向无环图)? 例如,句子“去北京大学玩”对应的DAG为{0:[0], 1:[1,2,4], 2:[2], 3:[3,4], 4:[4], 5:[5]}。DAG中{0:[0]}就表示0位置对应的是词,就是说0~0,即“去”这个词在Dict(词典库,里面记录每个词的频次)中是词条。DAG中{1:[1,2,4]},就是表示从1位置开始,在1,2,4位置都是词,就是说1~1、1~2、1~4即“北”“北京”“北京大学”这三个也是词,出现在Dict中。句子“去北京大学玩”的DAG毕竟比较短可以一眼看出来,现在来了另外一个句子“经常有意见分歧”,如何得到它的DAG呢?这时候就得通过代码来实现了。 Dict= {"经常":0.1,"经":0.05,"有":0.1, "常":0.001,"有意见":0.1, "歧":0.001,"意见":0.2,"分歧":0.2,"见":0.05,"意":0.05,"见分歧":0.05,"分

文本处理方法概述

喜夏-厌秋 提交于 2020-01-01 02:52:34
https://www.cnblogs.com/arachis/p/text_dig.html 说明:本篇以实践为主,理论部分会尽量给出参考链接 摘要:   1.分词   2.关键词提取   3.词的表示形式   4.主题模型(LDA/TWE)     5.几种常用的NLP工具简介   6.文本挖掘(文本分类,文本标签化)     6.1 数据预处理     6.2 关于文本的特征工程     6.3 关于文本的模型   7.NLP任务(词性标注,句法分析)   8.NLP应用(信息检索,情感分析,文章摘要,OCR,语音识别,图文描述,问答系统,知识图谱)     8.1 知识抽取 内容:   1.分词   分词是文本处理的第一步,词是语言的最基本单元,在后面的文本挖掘中无论是词袋表示还是词向量形式都是依赖于分词的,所以一个好的分词工具是非常重要的。 这里以python的jieba分词进行讲解分词的基本流程,在讲解之前还是想说一下jieba分词的整个工作流程: 图1是jieba切词函数的4个可能过程,图2是一个根据DAG图计算最大概率路径,具体的代码走读请参考 jieba cut源码 讲了这么多,我们还是要回归到实践中去,看下jieba的分词接口 1 # encoding=utf-8 2 import jieba 3 4 seg_list = jieba.cut(

可重入锁与读写锁

做~自己de王妃 提交于 2019-12-30 19:05:35
一、 analysis与analyzer analysis:   文本分析,是将全文本转换为一系列单词的过程,也叫分词。analysis是通过analyzer(分词器)来实现的,可以使用Elasticearch内置的分词器,也可以自己去定制一些分词器。除了在数据写入时将词条进行转换,那么在查询的时候也需要使用相同的分析器对语句进行分析。 analyzer(分词器): 由三部分组成: Character Filter:将文本中html标签剔除掉。 Tokenizer:按照规则进行分词,在英文中按照空格分词 Token Filter:将切分的单词进行加工,小写,删除 stopwords(停顿词,a、an、the、is等),增加同义词 1.1 内置的分词器 分词器名称 处理过程 Standard Analyzer 默认的分词器,按词切分,小写处理 Simple Analyzer 按照非字母切分(符号被过滤),小写处理 Stop Analyzer 小写处理,停用词过滤(the, a, this) Whitespace Analyzer 按照空格切分,不转小写 Keyword Analyzer 不分词,直接将输入当做输出 Pattern Analyzer 正则表达式,默认是\W+(非字符串分隔) 1.2 内置分词器使用示例 Standard Analyzer GET _analyze {

中文分词和搜索引擎(三)

让人想犯罪 __ 提交于 2019-12-28 14:12:00
中文分词和搜索引擎 中文分词除了在索引结构上影响搜索引擎以外,还会如何影响搜索引擎? 除了搜索引擎的索引过程需要用到分词以外,所有的搜索之前也需要用到分词。有些人误认为"短语搜索"(即两端加上引号的搜索方式,搜索引擎基本都支持这种方式,查看 搜索引擎帮助 )是直接拿字符串去匹配不用分词,因为结果看上去好像是字符串匹配的结果。其实不然,短语搜索同样需要用分词,只不过在结果中需要位置连续等严格限制。当位置连续时,在显示摘要的时候,会让你感觉只是用字符串匹配。 除了在搜索前端后端都需要用到分词以外,搜索引擎还有一个原则:前端后端分词结果应该一致。这意思是说,如果你在索引时没有识别出"文德"的人名,你在搜索时最好也别识别出来,这样可以按照两个单字的方式查找,或许有正确结果,否则会查不到结果。反之也一样。由于索引过程中,分词输入的一篇文章,有大量的上下文信息,但在搜索时,用户输入的可能只有几个字,很多上下文信息不在存在。如果过多使用统计或机器学习,很容易导致搜索引擎的前端后端分词不一致的问题。这也是搜索引擎使用分词和其他系统,如机器翻译,使用分词不一样的地方。 如果你看过搜索引擎的query log(即所有搜索词的记录),你会发现新词很多,会占30%,或者更多。对这些新词的识别会直接影响搜索结果的准确性,或者说相关性。搜索结果的相关性决定于排序算法,排序算法一部分依赖于网页的质量和权威性

Elasticsearch初步使用(安装、Head配置、分词器配置)

喜欢而已 提交于 2019-12-26 18:57:08
目录   返回目录: http://www.cnblogs.com/hanyinglong/p/5464604.html 1.ElasticSearch简单说明   a.ElasticSearch是一个基于Lucene开发的搜索服务器,具有分布式多用户的能力,ElasticSearch是用Java开发的开源项目(Apache许可条款),基于Restful Web接口,能够达到实时搜索、稳定、可靠、快速、高性能、安装使用方便,同时它的横向扩展能力非常强,不需要重启服务。   b.ElasticSearch是一个非常好用的实时分布式搜索和分析引擎,可以帮助我们快速的处理大规模数据,也可以用于全文检索,结构化搜索以及分析等。   c.目前很多网站都在使用ElasticSearch进行全文检索,例如:GitHub、StackOverflow、Wiki等。   d.ElasticSearch式建立在全文检索引擎Lucene基础上的,而Lucene是最先进、高效的开元搜索引擎框架,但是Lucene只是一个框架,要充分利用它的功能,我们需要很高的学习成本,而ElasticSearch使用Lucene作为内部引擎,在其基础上封装了功能强大的Restful API,让开发人员可以在不需要了解背后复杂的逻辑,即可实现比较高效的搜索。   e.关于Lucene我在前面写过几篇博客

Elasticsearch 分词器

我怕爱的太早我们不能终老 提交于 2019-12-25 15:01:03
转载链接: https://www.cnblogs.com/cjsblog/p/10171695.html 无论是内置的分析器(analyzer),还是自定义的分析器(analyzer),都由三种构件块组成的:character filters , tokenizers , token filters。 内置的analyzer将这些构建块预先打包到适合不同语言和文本类型的analyzer中。 Character filters (字符过滤器) 字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换该流。 举例来说,一个字符过滤器可以用来把阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩)‎转成成Arabic-Latin的等价物(0123456789)。 一个分析器可能有0个或多个字符过滤器,它们按顺序应用。 (PS:类似Servlet中的过滤器,或者拦截器,想象一下有一个过滤器链) Tokenizer (分词器) 一个分词器接收一个字符流,并将其拆分成单个token (通常是单个单词),并输出一个token流。例如,一个whitespace分词器当它看到空白的时候就会将文本拆分成token。它会将文本“Quick brown fox!”转换为[Quick, brown, fox!] (PS:Tokenizer 负责将文本拆分成单个token

ELK学习笔记-ES-分词

孤人 提交于 2019-12-25 05:29:45
官方文档位置:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/analysis.html 分词 分词是指将文本转化成一系列的单词(term or token)的过程,也可以叫文本分析 es里称之为Analysis 分词器 分词器是es中专门处理分词的组件,英文为Analyzer ,它的组成如下: Character Filters 针对原始文本进行处理,比如去除html特殊标记符 Tokenizer 将原始文本按照一定规则切分为单词 Token Filters 针对 tokenizer处理的单词就行再加工,比如转小写、删除或新增等处理 分词器-调用顺序 Analyze API es提供了一个测试分词的api接口,方便验证分词效果, endpoint是_ analyze 可以直接指定analyzer进行测试 可以直接指定索弓|中的字段进行测试 可以自定义分词器进行测试 直接指定Analyzer进行测试,接口如下: POST _analyze { "analyzer":"standard", //分词器,standard是es默认分词器,如果字段里没有指定分词器,会默认使用standard "text":"hello world!" //测试文本 } 输出: { "tokens": [ { "token":

python之jieba库

流过昼夜 提交于 2019-12-24 02:52:37
jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English documentation. 特点 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词 支持自定义词典 MIT 授权协议 友情链接 https://github.com/baidu/lac 百度中文词法分析(分词+词性+专名)系统 https://github.com/baidu/AnyQ 百度FAQ自动问答系统 https://github.com/baidu/Senta 百度情感识别系统 安装说明 代码对 Python 2/3 均兼容 全自动安装: easy_install jieba 或者 pip install jieba / pip3 install jieba 半自动安装:先下载 http://pypi.python

关于文本处理之结巴分词

旧时模样 提交于 2019-12-24 00:23:57
中文文本最常用的就我而言应该就是结巴分词的分词工具。当然还有其他分词工具Hanlp、THULAC、LTP、NLPIR等。 结巴分词安装:pip install jieba(全自动安装) or 下载结巴,然后解压运行python setup.py install(半自动) or python3.X 下的安装方式: Github 上 jieba 的 Python3.x 版本的路径是: https://github.com/fxsjy/jieba/tree/jieba3k 通过 git clone https://github.com/fxsjy/jieba.git 命令下载到本地,然后解压,再通过命令行进入解压目录,执行 python setup.py install 命令,即可安装成功。 jieba 的分词算法 主要有以下三种: 基于统计词典,构造前缀词典,基于前缀词典对句子进行切分,得到所有切分可能,根据切分位置,构造一个有向无环图(DAG); 基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词; 对于新词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分。 jieba 分词 下面我们进行 jieba 分词练习,第一步首先引入 jieba 和语料: import jieba content = "现如今

solr中文分词

自作多情 提交于 2019-12-18 12:24:35
solr分词,就是solr配置的字段类型根据注册的分词文件分词断句的行为。 例如:你们村村通工程知道吗? 不分词的时候会是这样: 分词的话,我们把“村村通工程 ”名词化,分词结果为: 说说中文分词 中文分词器有多中,常用的有 IKAnalyzer、 mmseg4j。 前者最新版本更新到2012年,所以使用的时候要注意可能版本上有不兼容的情况, 由于它是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化 。 使用方法,需要下载相应的jar、配置文件, 我这里分享了一个链接 。 将ik的相关文件 拷贝到 solr工程的lib目录,配置 schema.xml 文件, 同时,把需要分词的字段,设置为text_ik,: <!-- 需要分词的字段 --> <field name="content" type="text_ik" indexed="true" stored="true" required=