网上对于ik分词器的自定义词库大多是采用配置文件配置自定义词库,这里直接将需要添加的词库加到ik的系统词库中。
需求:项目中用到了ik分词器,ik自带有自己的系统词库,以下为ik获取各个词库路径的方法;
System.out.println(cfg.getExtDictionarys());
System.out.println(cfg.getMainDictionary()); // 系统默认词库
System.out.println(cfg.getQuantifierDicionary());
现在公司有自己的词库,好几张表,这几张表用户是可以操作的,比如增加,这时候就需要将公司词库动态的加入到系统词库中,设定了一个计划线程,以下是具体做法:
private static ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
private static Boolean wordDBLoadScheduleFlag = false;
private static Set<String> wordDBSet = new HashSet<String>();
/**
* 用于更新ik词库
* @throws InterruptedException
*/
public PcDocumentService(){
if (wordDBLoadScheduleFlag == false) {
synchronized (wordDBLoadScheduleFlag) {
if (wordDBLoadScheduleFlag == false) {
WordThread wt=new WordThread();
wordDBLoadScheduleFlag = true;
ex.scheduleWithFixedDelay(wt, 10, 600, TimeUnit.SECONDS);
}
}
}
}
//ik词库更新线程类
public static class WordThread extends Thread{
public void run() {
//取出词库数据存入set
try {
System.out.println("开始更新词库======================="+Thread.currentThread().getName());
/**/
Map<String, Object> params= new HashMap<String, Object>();
WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
ZlAreaAliasService zlAreaAliasService=(ZlAreaAliasService) context.getBean("zlAreaAliasService");
List<ZlAreaAliasEntity> zAreaList= zlAreaAliasService.selectForList(params);
for(ZlAreaAliasEntity zArea:zAreaList){
wordDBSet.add(zArea.getAreaName());
}
ZlLexiconService zlLexiconService=(ZlLexiconService) context.getBean("zlLexiconService");
List<ZlLexiconEntity> zLexiList=zlLexiconService.selectForList(params);
for(ZlLexiconEntity zLexi:zLexiList){
wordDBSet.add(zLexi.getLexName());
}
ZlProdAliasService zlProdAliasService=(ZlProdAliasService) context.getBean("zlProdAliasService");
List<ZlProdAliasEntity> zProdList=zlProdAliasService.selectForList(params);
for(ZlProdAliasEntity zProd:zProdList){
wordDBSet.add(zProd.getProdName());
}
ZlLexiconRelationService zlLexiconRelationService=(ZlLexiconRelationService) context.getBean("zlLexiconRelationService");
List<ZlLexiconRelationEntity> zLeReList=zlLexiconRelationService.selectForList(params);
for(ZlLexiconRelationEntity zLeRe:zLeReList){
wordDBSet.add(zLeRe.getLexicon1());
wordDBSet.add(zLeRe.getLexicon2());
}
ZlCompAliasService zlCompAliasService=(ZlCompAliasService) context.getBean("zlCompAliasService");
List<ZlCompAliasEntity> zCompList=zlCompAliasService.selectForList(params);
for(ZlCompAliasEntity zComp:zCompList){
wordDBSet.add(zComp.getCompName());
}
Dictionary.initial(DefaultConfig.getInstance()).addWords(wordDBSet);
System.out.println("数据库词库大小:======================="+wordDBSet.size());
System.out.println("================词库更新完成================");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
转载于:https://my.oschina.net/u/3734816/blog/2049548
分享到:
相关推荐
IKAnalyzer提供了动态自定义词库的方法,使得开发者可以根据不同的应用场景和需求,灵活地配置分词器的词库。 动态自定义词库的方法主要通过自定义Configuration类来实现。Configuration类是IKAnalyzer的核心配置类...
- **智能分析**:ik分词器采用动态词库加载机制,能根据上下文环境进行词语切分,提高分词准确性。 - **高性能**:ik分词器采用多线程并行处理,提高了分词效率,降低了系统负载。 - **扩展性**:ik分词器支持扩展...
IK Analyzer提供了动态加载和更新词库的功能,通过监听词库文件的变化,一旦检测到更新,即可立即应用,从而实现了“无需重启服务”的目标。 实现动态词库更新,主要涉及以下几个步骤: 1. **配置IK Analyzer**:...
IK分词器的特点在于它的动态词典加载和自定义扩展词功能,能够根据实际需求进行灵活配置,提高分词效果。 **安装与配置** 在Elasticsearch中使用IK分词器,首先需要将"elasticsearch-analysis-ik-7.6.2.jar"文件放...
首先,我们要了解IK分词器的几种常用词库配置方式。 **0. 常用热词词库配置方式** 0.1 **IK内置词库** 优点:部署简单,无需额外指定词库位置。 缺点:分词单一,无法针对特定词汇进行定制。 0.2 **IK外置静态...
2. **智能分析**:IK 分词器采用了动态词典加载和智能切分算法,可以适应各种复杂的中文语境,提高分词的准确性和灵活性。 3. **多模式切换**: - **精确模式**:尽可能将句子切分成最精确的词语,适用于搜索引擎...
2. **词典加载**:接着,你需要配置ik分词器加载“中文分词词库.txt”文件。这通常在分词器的配置文件中完成,确保分词器在启动时能够找到并使用这个词库。 3. **自定义词典**:除了默认词库外,ik分词器还支持用户...
2. **自定义扩展词库**: 用户可以自定义扩展词库,将一些专业术语或者新词加入到词库中,增强分词器对特定领域文本的理解和处理能力。 3. **动态词典加载**: 在运行时,IK 分词器支持动态加载和更新词典,无需重启...
3. **动态扩展**:IK分词器具备动态扩展词能力,能够在遇到未登录词时尝试通过词根和词缀规则进行分词。 4. **多线程支持**:为了提升效率,IK分词器支持多线程处理,可以在高并发环境下保持高性能。 5. **配置...
ik中文分词词库35万中文分词词库(含电商)
2. 配置:将下载的jar文件放置到Elasticsearch的`plugins`目录下,并创建`config`子目录,用于存放IK分词器的配置文件,如`ik_analyzer.cfg.xml`。配置文件可以自定义分词器的参数,如停用词表、扩展词库等。 3. ...
type: ik_max_word # 使用IK分词器的全模式 dictionary: my_dict # 自定义词典路径 ``` **依赖库** 在提供的文件列表中,我们看到有如下几个依赖库: - `httpclient-4.5.2.jar`:Apache HttpClient,用于 HTTP ...
在251行添加热加载,定时刷新缓存或DB的热词到IK分词器中。在571行添加从缓存或mysql加载热词,调用org.wltea.analyzer.dic.Dictionary.loadMySQLExtDict()方法。 五、添加配置文件 在添加配置文件时,需要在...
IK分词常用停止词库约1500个 elasticsearch analysis ik分词器常用停止词库
IK分词器采用动态多模式、基于字典的分词策略,同时支持用户自定义扩展词库,提高了分词的准确性和灵活性。 1. **动态多模式**:IK分词器有两种运行模式,即“精确模式”和“全模式”。精确模式力求每个分词结果都...
在配置文件 `elasticsearch.yml` 中可以设置 IK 分词器的参数,如 `analysis.ik.smart_split` 控制是否开启智能切分。 **应用场景** Elasticsearch-analysis-ik 在各种需要中文搜索的场景中大显身手,如电子商务、...
2. 特性:IK支持动态加载词典,可自定义扩展词库,同时具备智能分析模式和精确分析模式,适应不同场景需求。 3. 集成:在Elasticsearch中集成IK,可以优化对中文文档的索引和查询,提升用户体验。 三、x86架构上的...
IK分词器支持用户自定义词典,可以通过以下方式添加: 1. 在`config/IKAnalyzer.cfg.xml`配置文件中指定自定义词典路径。 2. 使用` IKAnalyzer.addUserWord(String word)`方法动态添加单个词语。 3. 使用` IK...
1. **动态词典加载**:IK分词器支持在线更新词典,无需重启服务即可生效。 2. **最大切分模式**:当遇到一个词时,IK会尝试尽可能多地切分,以获取更细粒度的词语。 3. **最小切分模式**:相反,它也会尝试找到最短...