`
deepfuture
  • 浏览: 4375388 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79860
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69450
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:102784
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:283926
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14910
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:66977
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31807
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45791
社区版块
存档分类
最新评论

lucene-同义词分析器

阅读更多

这个分析器用SynonymFilter过滤器对StandardAnalyzer类进行封装,当向这个过滤器输入各个项时,会对这些项进行缓冲,并使用栈存储这些项的同义词

public class SynonymFilter extends TokenFilter{

publicstatic final String TOKEN_TYPE_SYNONYM="SYNONYM";

 

privateStack synonymStack;

privateSynonynEngine engine;

 

publicSynonymFilter(TokenStream in,SynonymEngine engine){

super(in);

synonymStack=new Stack();//缓存同义词

this.engine=engine;

}

 

publicTOken next() throws IOException{

if (synonymStack.size()>0){//如何还有当前词的同义词没有输出,则输出

return (Token) synonymStack.pop();

}

Token token=input.next();//读取新词

if (token==null) {

return null;

}

 

addAliasesToStack(token);//存储新词的同义词

returntoken;

}

private voidaddAliasesToStack(Token token) throws IOException{

String[] synonyms=engine.getSynonyms(token.termText());

if (synonyms==mull) return;

for (int i=0;i<synonyms.length;i++){

Token synToken=newToken(synonyms[i],token.startOffset(),token.endOffset(),TOKEN_TYPE_SYNONYM);

synToken.setPositionIncrement(0);

synonymStack.push(synToken);

}

}

以下这个接口是关键,可以自由实现,目的是返回s的同义词数组

public interface SynonymEngine{

String[] getSynonyms(String s) throws IOException;

}

对于这个接口要小心使用,在查询时不必列出所有的同义词,如下例

Query query=QueryParser.parse("\"foxjumps\"","content",synonymAnalyzer);

Hits hits=searcher.search(query);

是会出错的,找不到任何结果,因为QueryParser不会区别位置增量,所以位置增量为0这一个表明同义的特征无法体现,会将"foxjumps"直接加上同义词解释为"fox jumps hops leaps"

分享到:
评论
1 楼 zr19851213 2013-03-15  
能不能给一个比较完整的例子

相关推荐

    lucene5.5做同义词分析器

    本篇文章将深入探讨如何基于Lucene 5.5版本构建一个同义词分析器,以及它对理解Lucene内部分析构造的重要性。 首先,我们要明白同义词分析器在文本处理中的作用。在信息检索系统中,同义词分析器能够识别并处理具有...

    lucene-4.6.1全套jar包

    在4.6.1版本中,Lucene 支持分词、分析和标准化,这使得搜索时能够进行模糊匹配和同义词查询。同时,它支持倒排索引,这是一种将词汇表映射到包含这些词汇的文档的索引结构,大大提高了搜索速度。 **2. 查询解析与...

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

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

    lucene-5.3.1.zip

    2. 断词搜索:支持模糊搜索和同义词搜索,增强用户查询的灵活性。 3. 布尔查询:通过AND、OR、NOT等逻辑运算符组合多个查询条件。 4. 跳过列表(Skip Lists):加速高频率词项的搜索。 5. 分块索引(Block Indexing...

    Lucene-common-functions-introduced_v1

    8. **多语言支持(Multilingual Support)**:Lucene内置了多种语言的分析器,可以处理不同语言的文本,如英文、中文、法文等。 9. **分布式搜索(Distributed Search)**:通过Solr或Elasticsearch等项目,Lucene...

    lucene-3.6.2.tgz

    - **同义词处理**:引入了同义词库,使得搜索结果更全面,提高了用户满意度。 - **模糊搜索**:通过支持音近词和形近词搜索,用户输入错误也能找到相关结果。 4. **API与开发** - **简洁API**:Lucene提供了直观...

    最新版windows lucene-8.7.0.zip

    - **新的分析器**:此版本可能引入了新的文本分析器,用于更好地处理多语言文本,包括中文分词。 - **改进的搜索功能**:可能增加了对模糊搜索、同义词搜索、拼写纠错等功能的支持,提升了用户体验。 - **更丰富...

    lucene-2.0.0.tar.gz

    4. 高级特性:除了基本的搜索功能,2.0.0版本还包含了如近似搜索、同义词处理、字段搜索、多字段搜索等高级特性。 三、工作流程 Lucene的工作流程主要包括以下几个步骤: 1. 创建索引:首先,开发者需要创建一个`...

    lucene3.4 jar

    分析器是Lucene中处理文本的关键组件,它们负责将原始文本分解为一系列的词汇项(tokens),并去除停用词、标点符号,进行词干提取和同义词扩展等。在3.4版本中,Lucene提供了多种内置分析器,如标准分析器、简体...

    Lucene.Net-2.9.2.rar

    7. **扩展性**:Lucene.Net提供了丰富的插件机制和API,开发者可以根据需要自定义分析器、查询解析器、评分函数等,实现个性化的搜索功能。 在实际应用中,开发人员通常需要结合Lucene.Net与其他技术,如数据库、...

    lucene in action 电子版

    - **近似匹配**:讲解了如何实现模糊匹配、同义词扩展等功能,以提高搜索的灵活性和准确性。 - **排序与评分**:分析了Lucene中如何根据相关性对搜索结果进行排序,并介绍了不同评分策略的影响。 - **章节6:扩展...

    关于Lucene的词典FST深入剖析-申艳超1

    FST在Lucene中的应用不仅限于词典,它还可以用于实现词性标注、同义词扩展等功能。通过FST,Lucene可以在不增加太多内存开销的情况下,提供复杂的查询逻辑和高效的索引服务。 在实际应用中,FST的构建和查询性能是...

    java实现高亮显示的jar包,lucene用的jar包

    ThesaurusAnalyzer可能扩展了标准的Analyzer,添加了对同义词的处理,使得搜索不仅匹配原词,还能匹配到其同义词,从而提高搜索的准确性和召回率。 至于"lucene-core-2.4.0.jar",这是Lucene的核心库,包含了Lucene...

    Lucene 3.0 原理与代码分析完整版

    2. 查询扩展:根据查询语句,Lucene可能进行同义词扩展、短语匹配等。 3. 相关性评分:使用TF-IDF、BM25等算法计算文档与查询的相关性分数。 4. 结果排序:根据评分进行结果排序,返回最相关的文档。 四、Lucene...

    Lucene学习源码.rar

    索引过程涉及分词(Tokenization)、词干提取(Stemming)、同义词扩展(Synonym Expansion)等步骤,将文本转换为可搜索的结构。 4. 分词器(Analyzer):负责将输入文本分解成一系列独立的词语,这是构建索引的...

    lucene4.6例子

    2. 同义词:为了提高召回率,Lucene支持同义词扩展。可以使用`SynonymFilter`在查询时将同义词合并,扩大查询覆盖范围。 四、近实时搜索 Lucene 4.6引入了近实时搜索(Near Real-Time Search)特性,允许在添加或...

    Lucene 原理与代码分析

    语言处理组件(LinguisticProcessor)可能会涉及词形还原、同义词处理等步骤,以确保搜索的准确性。 在索引创建过程中,首先需要将原文档(Document)传给分词组件(Tokenizer),得到词元(Token),随后将其传给...

    LUCENE分析介绍功能

    总体来说,文章提出了一种融合潜在语义分析、贝叶斯分类和关联规则采掘的BBS文档鉴别方法,通过自然语言处理技术抽取典型短语,利用LSA减少同义词的影响,再通过关联规则采掘提高短语独立性,最后由贝叶斯分类器完成...

    lucene实现企业产品检索

    - **模糊搜索**:支持部分匹配或同义词搜索,可以通过设置查询分析器的同义词扩展或使用模糊查询。 - **排序与评分**:根据相关性(如TF-IDF)对结果进行排序,可以自定义评分函数。 - **过滤与聚合**:通过Filter和...

Global site tag (gtag.js) - Google Analytics