IKanalyzer 分词器(???)

2024-02-25 02:48
文章标签 分词器 ikanalyzer

本文主要是介绍IKanalyzer 分词器(???),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//今天看了看IKanalyzer 扩充词汇看得我一头雾水    分词器的使用还没理解直接搞扩充词汇有点知识脱节

//谁能举个例看看怎么扩充????

网上提供的方法是:

.基于api 我的想法如下 利用一个数据库表保存实时动态添加的词元,如果对应的实体类有更新,就执行添加词元的操作 具体的话就是从数据库读取词元,然后存在List<String> termList,执行 Dictionary.loadExtendWords(termList); 其实就是监听,也可以利用线程池实时扫描,目的是知道系统正在添加词元到数据库表,然后就是加载词典了

2.IK的文档这么写道3.1基于 API的词典扩充  
IK 分词器支持使用 API 编程模型扩充您的词典和停止词典。如果您的个性化词典
储于数据库中,这个方式应该对您适用。API 如下:
?  类org.wltea.analyzer.dic.Dictionary
说明: IK 分词器的词典对象。它负责中文词汇的加载,内存管理和匹配检索。
?  public static void addWords(Collection<String> words)
说明:加载用户扩展的词汇列表到 IK 的主词典中,增加分词器的可识别词语
参数1:Collection<String> words , 扩展的词汇列表
返回值:无
 
?  public static void disableWords(Collection<String> words)
说明:屏蔽词典中的词元
参数1:Collection<String> words, 待删除的词列表
返回值:无
 
3.2基于配置的词典扩充  
IK 分词器还支持通过配置 IKAnalyzer.cfg.xml 文件来扩充您的专有词典以及停止
(过滤词典)。
1.  部署IKAnalyzer.cfg.xml
IKAnalyzer.cfg.xml 部 署 在 代 码 根 目 录 下 ( 对 于 web 项 目 , 通 常
WEB-INF/classes 目录)同 hibernate、log4j 等配置文件相同。
2.  词典文件的编辑与部署

 

 

选择ikanalyzer作分词组件,它的词典是自带的,然后用户可以在配置文件中加入扩展词典,也可以用api实现往里面加入新词  比如利用

              Dictionary.loadExtendWords(List<String> l);
不过这个好像只是加载一次,下次再启动词典的时候就没有这些词了。    所以我改成从配置文件添加,但是词典加载之后好像并没有这些词。用
              Dictionary.matchInMainDict("甲流".toCharArray());
,查看输出false.
  然后把它写在扩展词典文件中(采用无boom的utf8格式),然后重新建索引
                Analyzer a = new IKAnalyzer();
              writer = new IndexWriter(index, a, this.create,new IndexWriter.MaxFieldLength(1000000));
    再查询 甲流 的时候,用 
                keyword = "甲流";
                IKQueryParser.parse("content", keyword);
然后搜索结果用
                System.out.println("this document's score is " + docs[i].score);
     System.out.println(search.searcher.explain(q, docs[i].doc));
输出的结果是这样的(以第一个结果为例):this document's score is NaN
           2.5944433 = (MATCH) sum of:
                 1.1501259 = (MATCH) weight(content:甲 in 806), product of:
                      0.6658104 = queryWeight(content:甲), product of:
                      3.454815 = idf(docFreq=401, maxDocs=4681)
                      0.19271956 = queryNorm
                1.7274075 = (MATCH) fieldWeight(content:甲 in 806), product of:
                      1.0 = tf(termFreq(content:甲)=1)
                      3.454815 = idf(docFreq=401, maxDocs=4681)
                      0.5 = fieldNorm(field=content, doc=806)
                 1.4443176 = (MATCH) weight(content:流 in 806), product of:
                       0.746121 = queryWeight(content:流), product of:
                       3.8715372 = idf(docFreq=264, maxDocs=4681)
                        0.19271956 = queryNorm
1.9357686 = (MATCH) fieldWeight(content:流 in 806), product of:
                       1.0 = tf(termFreq(content:流)=1)
                       3.8715372 = idf(docFreq=264, maxDocs=4681)
                       0.5 = fieldNorm(field=content, doc=806)

这篇关于IKanalyzer 分词器(???)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744181

相关文章

【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)

记录下,使用 docker-compose 安装 Elasticsearch 和 Kibana,并配置 IK 分词器,你可以按照以下步骤进行。此过程适用于 Elasticsearch 和 Kibana 8.10.4 版本。 安装 首先,在你的工作目录下创建一个 docker-compose.yml 文件,用于配置 Elasticsearch 和 Kibana 的服务。 version:

elasticsearch 2.3.4 java API 连接,ik分词器,设置集群节点,创建index,mapping的几种方式

1、默认集群连接 Client client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 2、自定义集群连接 Settings settings = S

重生之我们在ES顶端相遇第11 章 - 深入自定义语言分词器

文章目录 0. 前言1. 英语分词器2. 阿拉伯语分词器3. 结语 0. 前言 国内企业出海是大势所趋,那么基于不同的语种进行分词就显得尤为重要,因为这会让用户的搜索体验更棒! 国内出海企业,会更偏向于选择欧美、中东这 2 个地区。 因此本文章也重点介绍英语、阿拉伯语的分词。 在 ES 中内置的分词器中,有一个叫 Language analyzers,我们可以根据该分词

重生之我们在ES顶端相遇第10 章- 分分分词器的基本使用

文章目录 思维导图0. 前言1. 光速上手1.1 指定分词器1.2 测试分词器 2. 分词流程(重要)2.1 基本介绍2.2 深入如何测试分词器 3. 自定义一个简单的分词器 思维导图 0. 前言 分词器在 ES 搜索使用中非常关键,一个好的分词器能够提高搜索的质量,让用户搜索到其想要的内容。 下面我将带大家从整体了解分词器。 1. 光速上手 1.1 指定分词器

中文分词器性能比较

原文: http://www.cnblogs.com/wgp13x/p/3748764.html 摘要:本篇是本人在Solr的基础上,配置了中文分词器,并对其进行的性能测试总结,具体包括 使用mmseg4j、IKAnalyzer、Ansj,分别从创建索引效果、创建索引性能、数据搜索效率等方面进行衡量。   具体的Solr使用方法假设读者已有了基础,关于Solr的性能指标见前

【Python机器学习】NLP分词——利用分词器构建词汇表(四)——标点符号的处理

目录 正则表达式的工作机理 改进的用于分词的正则表达式 缩略语 某些情况下,除空格外还有一些字符用于将句子中的词分隔开,比如之前case中“26.”末尾的句号(英文)。分词器不仅可以利用空格还可以基于标点符号(如逗号、句号、分号、连字符等)将句子切开。在某些情况下,我们希望这些标点符号也像词一样,被看成独立的词条,但另一些情况下可能又要忽略这些标点符号。 在“26.”的例子中,由

【Python机器学习】NLP分词——利用分词器构建词汇表(六)——词汇表归一化

目录 大小写转换 词干还原 词形归并 使用场景 词汇表大小对NLP流水线的性能有很大的影响,有一种减少词汇表大小的方法是将词汇表归一化以便意义相似的词条归并成单个归一化的形式。这样做一方面可以减少需要再词汇表中保留的词条数,另一方面也会提高语料库中意义相似但是拼写不同的词条或者n-gram之间的语义关联。 大小写转换 当两个单词只有大小写形式不同时,大小写转换会用来把笔不同的

【Python机器学习】NLP分词——利用分词器构建词汇表(三)——度量词袋之间的重合度

如果能够度量两个向量词袋之间的重合度,就可以很好地估计他们所用词的相似程度,而这也是它们语义上重合度的一个很好的估计。因此,下面用点积来估计一些新句子和原始的Jefferson句子之间的词袋向量重合度: import pandas as pdsentence="""Thomas Jefferson Began buliding Monticelli as the age of 26.\n""

采用ELK搭建日志平台,安装elasticsearch中文分词器

1、进入ES安装目录下 cd /usr/local/elasticsearch7.17 2、安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip

docker安装ES(Elasticsearch)的IK分词器

大家可以先看我的Docker中部署Kibana: “Docker中部署Kibana:步骤与指南“-CSDN博客 其实这几篇博文都是有关系的,希望大家学有所成。 问题:命令中有一个unzip没有安装,需要先安装一下,安装命令: yum install unzip 1.打开目录: cd /usr/local/docker/es/plugins/ 2.创建ik文件夹