`
wx1568905209
  • 浏览: 25136 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ik分词器动态加载数据到ik的系统词库(不采用配置文件配置自定义词库的方式)...

 
阅读更多

   网上对于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分词器动态自定义词库的方法.doc

    IKAnalyzer提供了动态自定义词库的方法,使得开发者可以根据不同的应用场景和需求,灵活地配置分词器的词库。 动态自定义词库的方法主要通过自定义Configuration类来实现。Configuration类是IKAnalyzer的核心配置类...

    ik分词器7.17.10

    - **智能分析**:ik分词器采用动态词库加载机制,能根据上下文环境进行词语切分,提高分词准确性。 - **高性能**:ik分词器采用多线程并行处理,提高了分词效率,降低了系统负载。 - **扩展性**:ik分词器支持扩展...

    基于ik动态词库分词实现--无需重启服务

    IK Analyzer提供了动态加载和更新词库的功能,通过监听词库文件的变化,一旦检测到更新,即可立即应用,从而实现了“无需重启服务”的目标。 实现动态词库更新,主要涉及以下几个步骤: 1. **配置IK Analyzer**:...

    elasticsearch-ik中文分词器7.6.2.zip

    IK分词器的特点在于它的动态词典加载和自定义扩展词功能,能够根据实际需求进行灵活配置,提高分词效果。 **安装与配置** 在Elasticsearch中使用IK分词器,首先需要将"elasticsearch-analysis-ik-7.6.2.jar"文件放...

    ElasticSearch 重写IK分词器源码设置mysql热词更新词库1

    首先,我们要了解IK分词器的几种常用词库配置方式。 **0. 常用热词词库配置方式** 0.1 **IK内置词库** 优点:部署简单,无需额外指定词库位置。 缺点:分词单一,无法针对特定词汇进行定制。 0.2 **IK外置静态...

    elasticserach 7.17.4版本的中文 IK分词器

    2. **智能分析**:IK 分词器采用了动态词典加载和智能切分算法,可以适应各种复杂的中文语境,提高分词的准确性和灵活性。 3. **多模式切换**: - **精确模式**:尽可能将句子切分成最精确的词语,适用于搜索引擎...

    ik中文分词词库,包含不低于20万词

    2. **词典加载**:接着,你需要配置ik分词器加载“中文分词词库.txt”文件。这通常在分词器的配置文件中完成,确保分词器在启动时能够找到并使用这个词库。 3. **自定义词典**:除了默认词库外,ik分词器还支持用户...

    elasticsearch7.8.0版本的IK分词器

    2. **自定义扩展词库**: 用户可以自定义扩展词库,将一些专业术语或者新词加入到词库中,增强分词器对特定领域文本的理解和处理能力。 3. **动态词典加载**: 在运行时,IK 分词器支持动态加载和更新词典,无需重启...

    ik分词器tar包 7.10.2

    3. **动态扩展**:IK分词器具备动态扩展词能力,能够在遇到未登录词时尝试通过词根和词缀规则进行分词。 4. **多线程支持**:为了提升效率,IK分词器支持多线程处理,可以在高并发环境下保持高性能。 5. **配置...

    ik中文分词词库35万中文分词词库(含电商)

    ik中文分词词库35万中文分词词库(含电商)

    elasticsearch ik 7.4.2 分词器

    2. 配置:将下载的jar文件放置到Elasticsearch的`plugins`目录下,并创建`config`子目录,用于存放IK分词器的配置文件,如`ik_analyzer.cfg.xml`。配置文件可以自定义分词器的参数,如停用词表、扩展词库等。 3. ...

    elasticsearch-analysis-ik-7.4.0 ik分词器7.4.0

    type: ik_max_word # 使用IK分词器的全模式 dictionary: my_dict # 自定义词典路径 ``` **依赖库** 在提供的文件列表中,我们看到有如下几个依赖库: - `httpclient-4.5.2.jar`:Apache HttpClient,用于 HTTP ...

    Elasticsearch IK分词器扩展说明1

    在251行添加热加载,定时刷新缓存或DB的热词到IK分词器中。在571行添加从缓存或mysql加载热词,调用org.wltea.analyzer.dic.Dictionary.loadMySQLExtDict()方法。 五、添加配置文件 在添加配置文件时,需要在...

    IK分词常用停止词库约1500个

    IK分词常用停止词库约1500个 elasticsearch analysis ik分词器常用停止词库

    IK分词器源码

    IK分词器采用动态多模式、基于字典的分词策略,同时支持用户自定义扩展词库,提高了分词的准确性和灵活性。 1. **动态多模式**:IK分词器有两种运行模式,即“精确模式”和“全模式”。精确模式力求每个分词结果都...

    elasticsearch-analysis-ik 7.10.0 分词器

    在配置文件 `elasticsearch.yml` 中可以设置 IK 分词器的参数,如 `analysis.ik.smart_split` 控制是否开启智能切分。 **应用场景** Elasticsearch-analysis-ik 在各种需要中文搜索的场景中大显身手,如电子商务、...

    es:7.17.3-ik.tar.gz

    2. 特性:IK支持动态加载词典,可自定义扩展词库,同时具备智能分析模式和精确分析模式,适应不同场景需求。 3. 集成:在Elasticsearch中集成IK,可以优化对中文文档的索引和查询,提升用户体验。 三、x86架构上的...

    elasticsearch-analysis-ik-7.7.1 分词器下载

    IK分词器支持用户自定义词典,可以通过以下方式添加: 1. 在`config/IKAnalyzer.cfg.xml`配置文件中指定自定义词典路径。 2. 使用` IKAnalyzer.addUserWord(String word)`方法动态添加单个词语。 3. 使用` IK...

    支持solr5.5 solr6.0中IK分词需要的资料

    1. **动态词典加载**:IK分词器支持在线更新词典,无需重启服务即可生效。 2. **最大切分模式**:当遇到一个词时,IK会尝试尽可能多地切分,以获取更细粒度的词语。 3. **最小切分模式**:相反,它也会尝试找到最短...

Global site tag (gtag.js) - Google Analytics