`

Lucene中的Analyzer

阅读更多

Lucene中的Analyzer

为了更好地搜索中文,先通过图4-2了解一下在Lucene中通过WhitespaceTokenizer、WordDelimiter Filter、LowercaseFilter处理英文字符串的流程。

 
图4-2  Lucene处理英文字符串流程

Lucene中的StandardAnalyzer对于中文采用了单字切分的方式,这样的结果是单字匹配,如搜索"上海",可能会返回和"海上"有关的结果。

CJKAnalyzer采用了二元覆盖的方式实现。小规模搜索网站可以采用二元覆盖的方法,这样可以解决单字搜索"上海"和"海上"混淆的问题。采用中文分词的方法适用于中大规模的搜索引擎。猎兔搜索提供了一个基于Lucene接口的Java版中文分词系统。

可以对不同的索引列使用不同的Analyzer来切分。例如可以对公司名采用CompanyAnalyzer来分析;对地址列采用AddressAnalyzer来分析。这样可以通过更细分化的切分方式来实现更准确合适的切分效果。

例如把"唐山聚源食品有限公司"拆分成如表4-1所示的结果。

表4-1  公司名拆分结果表

开始位置

结束位置

标注类型

唐山

0

2

City

聚源

2

4

KeyWord

食品

4

6

Feature

有限公司

6

10

Function

这里的开始位置和结束位置是指词在文本中的位置信息,也叫做偏移量。例如"唐山"这个词在"唐山聚源食品有限公司"中的位置是0-2。OffsetAttribute属性保存了词的位置信息;TypeAttribute属性保存了词的类型信息。

切分公司名的流程如图4-3所示。

 
图4-3  Lucene处理公司名流程

 

专门用来处理公司名的CompanyAnalyzer实现代码如下所示:

  1. public class CompanyAnalyzer extends   
  2.    Analyzer {   
  3.     public TokenStream tokenStream   
  4.        (String fieldName, Reader reader) {  
  5.         //调用ComTokenizer切分公司名  
  6.         TokenStream stream = new           
    ComTokenizer(reader);  
  7.         //调用ComFilter后续加工  
  8.         stream = new ComFilter          (stream);  
  9.         return stream;  
  10.     }  
  11. }  

对不同的数据写了不同用途的分析器,需要在同一个索引中针对不同的索引列使用。一般情况下只使用一个分析器。为了对不同的索引列使用不同的分析器,可以使用PerFieldAnalyzerWrapper。在PerFieldAnalyzerWrapper中,可以指定一个默认的分析器,也可以通过addAnalyzer方法对不同的列使用不同的分析器,例如:

  1. PerFieldAnalyzerWrapper aWrapper =  
  2.       new PerFieldAnalyzerWrapper(new CnAnalyzer());  
  3.    aWrapper.addAnalyzer("address", new AddAnalyzer());  
  4.    aWrapper.addAnalyzer("companyName", 
    new CompanyAnalyzer());  

在这个例子中,将对所有的列使用CnAnalyzer,除了地址列使用AddAnalyzer且公司名称列使用CompanyAnalyzer。像其他分析器一样,PerFieldAnalyzerWrapper可以在索引或者查询解析阶段使用。

分享到:
评论

相关推荐

    c# 中文分词 LUCENE IKAnalyzer

    标题中的"C# 中文分词 LUCENE IKAnalyzer"是指使用C#语言实现的一个中文分词工具,它基于开源全文检索引擎Lucene,并且采用了IKAnalyzer(智能汉字分词系统)的Java版本进行移植。Lucene是一个强大的、高性能的信息...

    lucene Analyzer 庖丁解牛 中文分词

    Analyzer是Lucene中的一个关键类,它的主要任务是对用户输入的原始文本进行预处理,包括分词、去除停用词、词形还原等步骤,以生成适合索引的Token流。对于中文来说,分词是Analyzer面临的最大挑战,因为中文没有...

    模糊查询-lucene-IKAnalyzer

    通过阅读和理解这些代码,你可以了解到如何在实际项目中整合Lucene和IKAnalyzer,实现模糊查询的功能。 在开发过程中,确保正确地配置了Lucene和IKAnalyzer的依赖,并且理解它们的工作原理是非常关键的。对于模糊...

    IKAnalyzer 支持高版本最新Lucene 5.x、6.x、7.x

    在给定的标题和描述中,我们看到IKAnalyzer已经更新以支持Lucene的高版本,包括5.x、6.x以及最新的7.3.1版本,这表明它持续跟进了Lucene的发展,确保与主流搜索引擎框架的兼容性。 1. **IKAnalyzer详解**: - IK...

    实现lucene的Analyzer接口的一个分词器

    导入: import net.teamhot.lucene.ThesaurusAnalyzer; import org.apache.lucene.analysis.Analyzer; 实例化: Analyzer analyzer = new ThesaurusAnalyzer();

    org.wltea.analyzer.lucene.IKAnalyzer jar

    solr的IK分词器JAR及配置文件 jar包和配置文件的放置位置不一样,详情可搜索 IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。...org.wltea.analyzer.lucene.IKAnalyzer jar

    PanGu.Lucene.Analyzer.rar

    在实际应用中,开发者可以利用“PanGu.Lucene.Analyzer.dll”这个库,轻松集成到他们的Lucene项目中,从而提升中文文本的处理能力。无论是搜索引擎的构建,还是大数据分析系统,Pangu分析器都能提供强大的中文处理...

    Lucene5.21+IkAnalyzer

    1. **环境配置**:确保你已经安装了Java运行环境,并将Lucene和IkAnalyzer的jar包添加到项目的类路径中。 2. **创建索引**:首先,你需要使用Lucene的API建立索引。使用Analyzer接口的实现,如IkAnalyzer,来处理...

    IKAnalyzer中文分词支持lucene6.5.0版本

    由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词

    Lucene4.7+IK Analyzer中文分词入门教程

    在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源分析器,来学习如何构建一个简单的搜索引擎。 首先,你需要下载Lucene 4.7和IK Analyzer 2012-FF Hotfix 1。Lucene的...

    中文分词库 IKAnalyzer For Lucene 5.2.1(适用Lucene 5.2.1)

    在实际应用中,开发者需要将 `\8878575_IKAnalyzer2012_V5.jar` 添加到项目的类路径中,然后按照 IKAnalyzer 提供的文档进行配置,就可以在 Lucene 中使用这个分词库进行中文文本的索引和搜索操作。同时,根据项目...

    lucene增删改查+IKAnalyzer

    《深入理解Lucene与IKAnalyzer:构建全文搜索引擎》 在信息技术高速发展的今天,数据的存储与检索变得至关重要。Lucene,作为一个开源的全文检索库,为开发者提供了强大的文本搜索功能。而IKAnalyzer作为针对中文...

    elasticsearch-analysis-ik,ik分析插件将lucene ik analyzer集成到elasticsearch中,支持自定义字典。.zip

    Elasticsearch 是一款功能强大的全文搜索引擎,而 IK Analyzer 是一个在 Lucene 上构建的智能中文分词库。本文将深入探讨如何将 Elasticsearch Analysis IK 插件应用于 Elasticsearch 中,以实现对中文文本的高效、...

    lucene的IKAnalyzer以及兼容4.3

    本文将深入探讨IKAnalyzer的特性和其在Lucene 4.3中的兼容性问题及其解决方案。 **IKAnalyzer简介** IKAnalyzer( Intelligent Keyword Analyzer)是一款基于Java实现的中文分词工具,它主要针对中文的特性进行了...

    lucene5和IKAnalyzer5的jar包 相匹配

    然后,在Lucene的索引创建过程中,设置IKAnalyzer为默认的Analyzer,这样在建立索引时,文档中的中文内容就会被IKAnalyzer5正确地分词。在搜索阶段,同样使用IKAnalyzer5进行查询分析,确保查询关键词也能得到合理的...

    Lucene的IK Analyzer 3.0 中文分词器 全解

    IK Analyzer 3.0 是一个专为 Lucene 设计的开源中文分词器,它基于 Java 开发,提供轻量级且高效的分词功能。自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,...

    IKAnalyzer中文分词器支持Lucene6.0以上

    提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。

    ikanalyzer中文分词支持lucene7.1.0

    ikanalyzer中文分词支持lucene7.1.0是一个针对Lucene搜索引擎的中文分词扩展,由林良益先生开发,旨在提供高效、精准的中文词汇拆解功能。Lucene是一个开源全文检索库,它提供了索引和搜索文本的强大工具。然而,...

    lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

    中文分词IKAnalyzer和高亮highlighter的使用”指出,这个主题将探讨如何在Lucene中应用IKAnalyzer进行中文分词,以及如何使用高亮器(highlighter)来突出搜索结果中的关键词。Lucene是Apache软件基金会的一个开放源...

Global site tag (gtag.js) - Google Analytics