中文分词

Elasticsearch -- 映射和分析

情到浓时终转凉″ 提交于 2020-03-01 06:15:38
映射(mapping) 机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型( string , number , booleans , date 等)。 分析(analysis) 机制用于进行 全文文本(Full Text) 的分词,以建立供搜索用的反向索引。 映射及分析 当在索引中处理数据时,我们注意到一些奇怪的事。有些东西似乎被破坏了: 在索引中有12个tweets,只有一个包含日期 2014-09-15 ,但是我们看看下面查询中的 total hits。 GET /_search?q=2014 # 12 个结果 GET /_search?q=2014-09-15 # 还是 12 个结果 ! GET /_search?q=date:2014-09-15 # 1 一个结果 GET /_search?q=date:2014 # 0 个结果 ! 为什么全日期的查询返回所有的tweets,而针对 date 字段进行年度查询却什么都不返回? 为什么我们的结果因查询 _all 字段(译者注:默认所有字段中进行查询)或 date 字段而变得不同? 想必是因为我们的数据在 _all 字段的索引方式和在 date 字段的索引方式不同而导致。 让我们看看Elasticsearch在对 gb 索引中的 tweet 类型进行 mapping (也称之为 模式定义 [注:此词有待重新定义

基于高维聚类技术的中文关键词提取算法

若如初见. 提交于 2020-03-01 04:34:44
[摘要] 关键词 提取是中文信息处理技术的热点和难点,基于统计信息的方法是其中一个重要分支。本文针对基于统计信息关键词提取方法准确率低的问题,提出基于高维聚类技术的中文关键词提取 算法 。算法通过依据小词典的快速分词、二次分词、高维聚类及关键词甄选四个步骤实现关键词的提取。理论分析和实验显示,基于高维聚类技术的中文关键词提取方法具备更好的稳定性、更高的效率及更准确的结果。 引言     关键词提取是通过对一篇输入文章做内容分析,按一定比例或字数要求提取出重要且语义相似性凝聚的关键词的过程。关键词自动提取是文本挖掘领域的一个重要分支,在自动摘要、文本分类、文本聚类、文本过滤、话题跟踪、信息检索、自动问答等很多领域有重要作用。   迄今为止,关键词自动提取吸引了不少国内外学者的关注和研究,其理论成果主要包括基于统计信息的方法、机器学习方法和浅层式语义分析方法三大类。其中应用最为广泛的是基于统计信息的关键词提取方法,具备简洁易懂、通用性强等优势。   本文针对基于统计信息关键词提取方法准确率不高的问题,引入高维聚类思想进行改进,提出基于高维聚类技术的中文关键词自动提取算法。经过基于小词典的快速分词、二次分词、高维聚类、关键词甄选四个步骤,算法抽取出的关键词更加准确,并且具有更好的稳定性和更高的效率。 关键词提取方法   关键词自动提取方法分为基于统计信息的方法

Solr分词

こ雲淡風輕ζ 提交于 2020-02-29 10:18:57
Solr版本:4.3.0。 分词器的配置在schema.xml文件,比如如下标签内容: <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <!-- in this example, we will only use synonyms at query time <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> --> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr

Elasticsearch之Analysis(分析器)

一个人想着一个人 提交于 2020-02-26 23:36:42
1.standard analyzer 标准分析器 由以下使用分词器和分词过滤器组成 Standard Tokenizer Standard Token Filter Lower Case Token Filter Stop Token Filter PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "standard", "max_token_length": 5 } } } } } POST _analyze { "analyzer": "standard", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } 分词后的结果; [ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ] 自动小写化分词,默认不适用停用词,可配置三个参数 (1)单个词最大长度(max_token_length 默认255,超过则按照255切分) (2)停用词(stopwords

Elasticsearch中文分词器(elasticsearch-analysis-ik)

冷暖自知 提交于 2020-02-26 07:01:53
中文分词器 安装IK分词器(支持中文分词) IK分词器提供了源代码(maven项目), 通过打包生成zip文件 使用Kibana进行测试 Kibana的使用看这个博客: Elasticsearch入门(Kibana) { "analyzer": "ik_max_word", "text": "我是中国人" } 测试结果 { "tokens": [ { "token": "我", "start_offset": 0, "end_offset": 1, "type": "CN_CHAR", "position": 0 }, { "token": "是", "start_offset": 1, "end_offset": 2, "type": "CN_CHAR", "position": 1 }, { "token": "中国人", "start_offset": 2, "end_offset": 5, "type": "CN_WORD", "position": 2 }, { "token": "中国", "start_offset": 2, "end_offset": 4, "type": "CN_WORD", "position": 3 }, { "token": "国人", "start_offset": 3, "end_offset": 5, "type": "CN_WORD"

jieba分词详解和实践

守給你的承諾、 提交于 2020-02-17 12:56:08
jieba分词是目前最好的 python中文分词组件。在讲解jieba分词之前,我们先了解一下中文分词的一些概念: 最常用的TF-IDF 什么是TF-IDF呢?要分成2个部分来理解。 TF,词频——一个词在文章中出现的次数 IDF,在词频的基础上,赋予每个词一个权重,体现该词的重要性。 这是什么意思呢?我们来看个例子。 这是一条财经类新闻 上周 / 沉寂 / 一段 / 时间 / 的 / 白酒股 / 卷土重来 / ;/ 其中 / 古井贡酒 / 的 / 股价 / 创出 / 了 / 历史新高 / , / 这段 / 时间 / …… … 在这篇文章中 上周:出现 1 次 时间:出现 2 次 白酒股:出现 1 次 的:出现 2 次 股价:出现 1 次 … 在以上的信息中,1、2、1、2、1等等这些 次数就是TF词频 。 通常来说,一个词越重要,就会在文章中出现多次,这个词也就能反映出这篇文章的特性,但是你会发现,这篇文章出现最多次数的是 时间、的,它们反映出文章的特性了吗?当然没有!所以,我们还要对每个词进行分类赋予权重: 最常见的词(“的”,“是”,“了”)权重最小 比较常见的词(“时间”,“上周”,“中国”)权重比较小 很少见的词(“白酒股”,“股价”,“养殖”)权重最大 这里的 权重就是IDF 将TF和IDF相乘,就得到了TF-IDF值,某个词对文章越重要,该值越大,于是排在前面的几个词

Lucene.net入门学习系列(1)

十年热恋 提交于 2020-02-13 23:57:43
   Lucene.net入门学习系列(1)-分词   Lucene.net入门学习系列(2)-创建索引   Lucene.net入门学习系列(3)-全文检索   这几天在公司实习的时候闲的蛋疼,翻了一下以往的教程和博客,看到了Lucene.net。原本想学着写一个系列的博文,由于本人水平有限,一直找不到适合的内容来写,干脆就写一个简单的Lucene.net系列文章吧。希望和大家一起学习,一起进步,有什么写错了或者有什么建议欢迎提出来。   一.引言     先说一说什么是 Lucene.net。Lucene.net是 Lucene 的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。开发人员可以基于Lucene.net实现 全文检索 的功能。   说完了Lucene.net,接着来说什么是全文检索。 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。   二.分词     前面的引言大概说了一下什么是全文检索,介绍了Lucene.net这个全文检索引擎。 要做全文检索,首先要做的就是分词。      分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。 在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界

Lucene中文分词实现方法:基于StopWord分割分词

删除回忆录丶 提交于 2020-02-13 23:57:22
Lucene应用越来越多,在对中文对索引过程中,中文分词问题也就越来越重要。 在已有的分词模式中,目前比较常用的也是比较通用的有一元分词、二元分词和基于词库的分词三种。一元分词在Java版本上由yysun实现,并且已经收录到Apache。其实现方式比较简单,即将每一个汉字作为一个Token,例如:“这是中文字”,在经过一元分词模式分词后的结果为五个Token:这、是、中、文、字。而二元分词,则将两个相连的汉字作为一个Token划分,例如:“这是中文字”,运用二元分词模式分词后,得到的结果为:这是、是中、中文、文字。 一元分词和二元分词实现原理比较简单,基本支持所有东方语言。但二者的缺陷也比较明显。一元分词单纯的考虑了中文的文字而没有考虑到中文的词性,例如在上述的例子中,“中文”、“文字”这两个十分明显的中文词语就没有被识别出来。相反,二元分词则分出了太多的冗余的中文词,如上所述,“这是”、“是中”毫无意义的文字组合竟被划分为一个词语,而同样的缺陷,命中的词语也不十分准确,如上:在“这是中文字”中,“中文字”这个词语应该优先考虑的。而二元分词也未能实现。 基于词库的分词实现难度比较大,其模式也有多种,如微软在自己的软件中的汉语分词、海量的中文分词研究版,还有目前在.Net下实现的使用率较高的猎兔,和一些其他人自发实现的分词工具等等。其都有自己的分析体系,虽然分析精度高,但实现难度大

lucene 学习之基础篇

纵饮孤独 提交于 2020-02-13 23:53:08
一、什么是全文索引 全文检索首先将要查询的目标文档中的词提取出来,组册索引(类似书的目录),通过查询索引达到搜索目标文档的目的,这种先建立索引,再对索引进行搜索的过程就叫全文索引。 从图可以看出做全文搜索的步骤: 1、对目标数据源中提取相应的词建立索引 2、通过检索索引(检索索引中的词),从而找到目标文件即源数据。 现在的全文检索不仅能对字符串进行匹配,而是已经发展到可以对大文本、语言、图像、活动影像等非结构化数据进行综合管理的发、大型软件。 二、lucene 百度百科 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个 开放源代码 的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分 文本分析 引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene 是一套用于 全文检索 和搜寻的开源程式库,由 Apache 软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费 开源 工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库

中文分词技术笔记

允我心安 提交于 2020-02-13 23:02:45
参考《python自然语言处理实战核心技术与算法》 分词是自然语言处理的一项核心技术。中文分词算法大致分为三类,基于规则的分词算法、基于统计的分词算法、两者结合的分词算法。 一、基于规则的分词算法 基于规则的分词算法核心思想是维护一个词表,收录所有可能词,分词时拿待切分的字符串和此表中的词逐一查询匹配。找到则切分出来,没找到则不切分。 这种方法简单高效,便于理解,但是维护词表是一个很庞大的工程,而且现在的网络新词更新很快,基于规则很难将它们纳入其中。 关键算法是最大匹配算法,即以词表中最长的词的长度为单位步长,在待切分字符串中取步长长度的字串,再在词表中匹配,匹配到则将其切分出来并继续处理下一个步长,没有匹配到则将长度减少1继续进行匹配,直到匹配到或者长度为零,再进行下一轮匹配,直到切分完成。 最大匹配算法分为三种,正向最大匹配算法(MM),逆向最大匹配算法(RMM),双向最大匹配算法(BMM)。 (1)正向最大匹配算法(MM) 正向最大匹配算法的思路是从待切分字符串的头部开始做最大匹配。比如词表中最长词的长度为l,则从字符串中取前l个字符,从词表中匹配,如果匹配到则切分出来,没有匹配到则取前(l-1)个字符继续匹配,直到字串的长度为1,将其单独切分出来。反复进行直到字符串全部被处理。 算法实现: class MM(object): def __init__(self,