`

十五、实现简单同义词分词器

 
阅读更多

public interface SamewordContext {
    public String[] getSamewords(String name);
}



public class MySameTokenFilter extends TokenFilter {
    private CharTermAttribute            cta        = null;
    private PositionIncrementAttribute    pia        = null;
    private AttributeSource.State        current;
    private Stack<String>                sames    = null;
    private final SamewordContext        samewordContext;
   
    protected MySameTokenFilter(TokenStream input, SamewordContext samewordContext) {
        super(input);
        cta = this.addAttribute(CharTermAttribute.class);
        pia = this.addAttribute(PositionIncrementAttribute.class);
        sames = new Stack<String>();
        this.samewordContext = samewordContext;
    }
   

    //找到同义词,在相同的位置上叠加
    @Override
    public boolean incrementToken() throws IOException {
       
if (sames.size() > 0) {
            //将元素出栈,并且获取这个同义词
            String str = sames.pop();
            //还原状态
            restoreState(current);
            cta.setEmpty();
            cta.append(str);
            //设置位置0
            pia.setPositionIncrement(0);
            return true;
        }
       
        if (!this.input.incrementToken())
            return false;
       
        if (addSames(cta.toString())) {
            //如果有同义词将当前状态先保存
            current = captureState();
        }
        return true;

    }
   
    private boolean addSames(String name) {
        String[] sws = samewordContext.getSamewords(name);
        if (sws != null) {
            for (String str : sws) {
                sames.push(str);
            }
            return true;
        }
        return false;
    }
   
}


public class MySameAnalyzer extends Analyzer {
    private final SamewordContext    samewordContext;
   
    public MySameAnalyzer(SamewordContext swc) {
        samewordContext = swc;
    }
   
    @Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        //Dictionary dic = Dictionary.getInstance("D:\\tools\\javaTools\\lucene\\mmseg4j-1.8.5\\data");
        Dictionary dic = Dictionary.getInstance();
        return
new MySameTokenFilter(new MMSegTokenizer(new MaxWordSeg(dic), reader),
            samewordContext);

    }
   
}



分享到:
评论

相关推荐

    Lucene5学习之自定义同义词分词器简单示例

    本篇将聚焦于"Lucene5学习之自定义同义词分词器简单示例",通过这个主题,我们将深入探讨如何在Lucene5中自定义分词器,特别是实现同义词扩展,以提升搜索质量和用户体验。 首先,理解分词器(Analyzer)在Lucene中...

    lucene5.5做同义词分析器

    例如,以下是一个简单的示例代码片段,展示了如何构建一个同义词分析器: ```java public class SynonymAnalyzer extends Analyzer { private WordList wordList; public SynonymAnalyzer(Reader reader) throws...

    elasticsearch7.8.0版本的IK分词器

    5. **同义词处理**: 支持同义词扩展,可以通过配置同义词词典,使得搜索时能同时匹配到原词和其同义词,提高搜索的包容性。 6. **停用词过滤**: 可以配置停用词表,忽略常见的无实际意义的词汇,如“的”、“和”等...

    maven 构建好的 IK 分词器,可直接使用

    - 实现模糊搜索:分词器可以帮助实现同义词搜索、近义词搜索等功能,提高用户体验。 3. **安装和使用 IK 分词器的步骤:** - 下载已构建好的 IK 分词器包。 - 将分词器解压后的文件复制到 Elasticsearch 安装...

    ik分词器tar包 7.10.2

    5. **配置灵活性**:用户可以通过修改配置文件调整分词策略,如设置最大深度、是否开启同义词扩展等。 6. **与Elasticsearch集成**:IK分词器与Elasticsearch有良好的集成,安装简单,只需将解压后的`elasticsearch...

    es中文分词器 ik分词器.zip

    5. **扩展功能**:IK分词器还有其他高级特性,如词语位置调整、同义词扩展、远程词典加载等,可以根据实际需求进行配置和利用。 总之,IK分词器是ES处理中文文本的重要工具,它的灵活性和易用性使其成为许多项目中...

    魂动罗java源码-jcseg:一个开源的分词器,增加同义词优化

    jcseg是使用Java开发的一个开源中文分词器,使用流行的mmseg算法实现,并且提供了最高版本的lucene-4.x和最高版本solr-4.x的分词接口. 1。目前最高版本:jcseg-1.9.2。兼容最高版本lucene-4.x和最高版本solr-4.x 2...

    solr中文分词器

    中文分词器的引入解决了英文分词相对简单,而中文以字为基本单位,需要特殊处理才能正确切分的问题。 一、Solr简介 Apache Solr是一款开源的企业级搜索平台,基于Java开发,它可以提供高效的全文检索、 faceted ...

    lucene的分词的测试工程

    本文将深入探讨一个以"lucene的分词的测试工程"为主题的项目,涵盖分词器的比较、扩展停用词以及同义词分词等多个关键知识点。 一、Lucene简介 Lucene是一款高性能、全文检索的开源库,它提供了索引和搜索功能,...

    易语言同义词替换

    在“易语言同义词替换”这个主题中,我们主要探讨的是如何利用易语言编写程序来实现文本中的同义词替换功能。 同义词替换在自然语言处理领域有着广泛的应用,如文本生成、文本摘要、信息检索等。它涉及到词汇的丰富...

    IK中文分词器

    同时,用户可以通过插件机制扩展其功能,如停用词过滤、同义词替换等。 总的来说,IKAnalyzer作为中文分词领域的优秀工具,不仅提高了中文文本的处理效率,而且简化了开发流程,降低了系统集成的复杂度,是构建高...

    中文分词的实现

    2. 同义词处理:将同义词视为相同的词,扩大搜索范围。 3. 词干提取:将动词、形容词等转化为基本形式,如“跑”-&gt;“跑”,“跑步”-&gt;“跑”。 4. 模糊匹配:考虑用户可能的拼写错误或输入不规范,进行近似匹配。 ...

    ES7.9.1Ik分词器

    4. **同义词扩展**:Ik 可以集成同义词库,对同义词进行合并处理,提升搜索效果。 5. **停用词过滤**:Ik 支持停用词过滤,排除常见的无意义词汇如“的”、“是”等。 6. **自定义分析器**:用户可以根据实际需求...

    ElasticSearch的IK分词器包

    4. **支持同义词扩展**:IK分词器可以结合同义词库进行扩展,提高搜索的准确性和覆盖率。 在微服务项目中,Elasticsearch的IK分词器通常用于以下场景: - **全文检索**:通过IK分词器对中文文本进行预处理,将文本...

    论文--一种新的中文分词词典结构--全哈希词典

    - **研究成果**:全哈希词典结构通过多级哈希表实现了高效、快速的中文分词,同时支持同义词存储,相较于现有的词典结构具有明显的优势。 - **未来发展方向**:为进一步提高分词准确性及处理效率,可探索更先进的...

    火车头同义词替换库伪原创词库共计16w词

    这样经过智能分词和同义词替换后,文章就初步具备了伪原创的特质。 需要注意的是,伪原创并非简单的词汇替换这么简单,它要求我们在替换过程中,确保词汇的语义连贯性,同时保持句子结构的合理性。16万词汇的同义...

    IKAnalyzer分词及solr4103配置说明

    同义词库通常是一个文本文件,包含多对同义词,IKAnalyzer在分词过程中会识别并处理这些同义词,使得搜索时能够匹配到更多相关的结果。 **Solr配置步骤** 1. **下载与安装**:首先,你需要下载Apache Solr的对应...

    elasticsearch集成ik分词器详细文档

    4. 为了进一步优化搜索性能,还可以考虑使用Elasticsearch的其他特性,如过滤器、n-grams、边缘n-grams、同义词等。 总之,集成IK分词器使得Elasticsearch在处理中文文本时更加得心应手,但要充分利用它的潜力,还...

    基于ASP的批量替换采集文章同义词ACCESS版 v1.0.zip

    3. **同义词匹配**: 对分词后的词汇进行同义词查找,匹配到合适的替代词。 4. **内容替换**: 在原文中将匹配到的词汇替换为同义词,确保语义的正确性。 5. **结果输出**: 最后,将处理后的文章返回或保存到数据库。 ...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-22.Lucene分词器3 共4页.pptx

    这仅仅是Lucene分词器功能的一部分,实际应用中,还需要考虑如词性标注、自定义词典、模糊搜索、同义词处理等多种复杂情况,以满足不同场景的需求。对于大型文档海量搜索系统来说,优化分词策略和提高搜索效率至关...

Global site tag (gtag.js) - Google Analytics