先看看下面几个概念:
分析器Analyzer
分词器Tokenizer
过滤器Filter
Tokenizer负责把词分开
Filter负责对分开的词进行处理
Analyzer包装组合Tokenizer和Filter以满足特定的分词需求
力琦已经写了几种不同的
WhitespaceAnalyzer();
SimpleAnalyzer();
StopAnalyzer();
StandardAnalyzer();
其中前三个的切分比较简单,只以空格作为分隔符,这里我就不打算解释了.
重点是StandardAnalyzer();
被这个分析器作用后,像这句话"we are 中国人"就会变成"[we] [are] [中] [国] [人]"
明显看到他根本就没有对中文进行词级上的切分,只是笼统地进行字切分.
那为什么呢?还是从代码上解释吧:
在\src\java\org\apache\lucene\analysis下我们可以看到有独立的一个包standard
就知道这个分析器有多么特别了。里面有一个文件StandardTokenizer.jj
整个决定性的东西都在里面了,
其中的
<ALPHANUM: (<LETTER>|<DIGIT>|<KOREAN>)+ >
//说明了英语的匹配正则表达
//.....省略无数行
| < CJ: // Chinese, Japanese
[
"\u3040"-"\u318f",
"\u3300"-"\u337f",
"\u3400"-"\u3d2d",
"\u4e00"-"\u9fff",
"\uf900"-"\ufaff"
]
>
说明了中文字符的unicode的范围(跟日文放在一起了),而且是一个字符成为一个token的.
然后我们再看看
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ALPHANUM:
token = jj_consume_token(ALPHANUM);
break;
//...........中间省略了无数行
case CJ:
token = jj_consume_token(CJ);
break;
case 0:
token = jj_consume_token(0);
break;
.......
可以看到,每遇到一个中文字,就进行分词
还是举个例子吧!不然估计很多人都会晕了的.
"we are 中国人"这个例子
由于<ALPHANUM: (<LETTER>|<DIGIT>|<KOREAN>)+ >(注意后面的这个加号)
所以we是一个token,遇到空格,是正则匹配到此为止,再下一次成功匹配are,遇到空格,得到另一个token:are
然后倒了"中",由于是CJ,所以只是两个字节的,直接匹配成功,进到下一个匹配"国".
如果对这个jj文件有所改动,就要用JavaCC(JavaCompilerCompiler,纯Java的词法分析生成器)重新生成几个重要的.java文件了.
分享到:
相关推荐
在3.0版本中,Lucene提供了多种预定义的Analyzer,如StandardAnalyzer,它们可以处理不同语言的文本。 2. **Document**: Document对象是信息存储的基本单元,它可以包含多个Field,每个Field代表文档的一个属性。...
**正文** ...通过深入研究这个Demo,开发者不仅可以理解Lucene的基本用法,还能掌握如何在实际项目中整合和优化分词过程。对于那些对自然语言处理或信息检索感兴趣的开发者来说,这是一个极好的学习资源。
Lucene 提供了多种内置的分词器,如 StandardAnalyzer、SimpleAnalyzer 和 StopAnalyzer,同时也支持自定义分词策略,以适应不同的语言和领域特性。 在 ASP.NET 应用程序中,Lucene.NET 的应用还包括构建搜索查询、...
在`lucene-1.4-final`这个压缩包中,包含了Lucene 1.4版本的源代码,你可以深入研究其内部实现,理解各个类和方法的工作原理。同时,这也可以帮助你定制分析器、优化搜索性能,或者扩展Lucene的功能,例如集成到你的...
总之,理解并选择适合的Lucene中文分词器对于构建高效的全文检索系统至关重要。每个分词器都有其特点和局限性,开发者应根据实际应用场景,结合分词器的性能、可扩展性和词典支持等因素,做出最佳决策。
Lucene内置了多种分词器,如StandardAnalyzer、SimpleAnalyzer等,也可自定义。 5. 查询解析器(QueryParser):将用户的查询字符串转换为内部表示,用于与索引进行匹配。 6. 搜索器(Searcher):执行搜索操作,...
这个"lucene3.0.3搜索的使用示例"压缩包文件很可能是为了帮助用户理解并学习如何在项目中应用Lucene 3.0.3版本的功能。 在Lucene 3.0.3中,主要包含了以下核心概念和知识点: 1. **索引(Indexing)**:这是Lucene...
通过 `API_lucene3.0.0.chm` 文件,开发者可以找到完整的 Lucene 3.0 API 文档,包括类、方法、接口的详细说明,以及示例代码,这对于理解和使用新版本的 Lucene 非常有帮助。 同样,`lucene-2.0.CHM` 文件则提供了...
在给定的代码示例中,展示了如何使用 Lucene 的 StandardAnalyzer 分析器来查看其分词效果。StandardAnalyzer 是 Lucene 提供的默认分析器,适用于英文文本,对于中文来说,它可能无法正确处理。在测试类中,我们...
在这个测试程序中,开发者可能使用了Lucene自带的标准分词器(StandardAnalyzer),它对英文文本进行了诸如词干提取和停用词过滤等处理,提高了搜索精度。 标准分词器(StandardAnalyzer)是Lucene提供的一种通用...
Lucene 4.7.0包含了一系列的分析器,如标准分析器(StandardAnalyzer)、关键词分析器(KeywordAnalyzer)等。分析器的选择会直接影响到搜索效果,因此在实际应用中,开发者需要根据具体需求选择合适的分析器。 三...
在Lucene.NET中,你可以选择不同的分词器,如StandardAnalyzer用于英文,或CJKAnalyzer用于处理中日韩等东亚语言。 过滤器则在分词之后进行操作,可以删除停用词、转换大小写、删除标点符号等,以优化索引质量和...
《Lucene 3.6 搜索实例解析》 Apache Lucene 是一个开源全文搜索引擎库,为开发者提供了在Java应用程序中实现高效...在实践中,理解并掌握Lucene的这些关键概念和流程,将有助于提升搜索体验,增强应用的核心竞争力。
在"lucene-1.4.3.src"中,包含了源代码,开发者可以直接查看和学习Lucene的实现细节,这对于理解其工作原理和进行二次开发非常有价值。而"lucene-1.4.3.zip"则包含了编译后的JAR文件"lucene-1.4.3.jar",这使得...
通过这些文件,你可以进一步学习和理解 Lucene 的实际应用。 总结,Java Lucene 提供了强大的全文搜索功能,从创建索引到执行复杂查询,涵盖了信息检索的各个方面。通过实践这个实例,你可以深入掌握 Lucene 的工作...
3. 查询(Query):用户输入的搜索条件转换为Lucene可以理解的查询对象。QueryParser用于解析用户输入,生成Query对象。 4. 搜索(Search):使用Searcher执行查询,返回匹配的结果集。ScoreDoc表示每个匹配文档的...
2. **分词器(Analyzer)**:Lucene 提供了多种分词器,如 StandardAnalyzer、SimpleAnalyzer 和 WhitespaceAnalyzer,它们负责将输入文本拆分成可搜索的词汇单元。在 Lucene 3.0 中,开发者可以根据需求选择或...
在"lucene-analysis.jar"中,我们可以找到多种预定义的分析器,如StandardAnalyzer、SimpleAnalyzer、StopAnalyzer等。StandardAnalyzer是最常用的分析器,它遵循Unicode文本分析标准,能处理多种语言的文本。...
标题中的"lucene-2.2.0zip"指的是Lucene的2.2.0版本,这是一个较早的版本,对于学习和理解Lucene的基础概念非常有帮助。 Lucene 2.2.0的主要特性包括: 1. **全文检索**:Lucene支持对文档内容进行全文检索,允许...
在LuceneDemo中,可能会使用StandardAnalyzer或其他定制Analyzer。 接下来,我们讨论高亮器的实现。在搜索结果中,用户通常希望看到与查询相关的关键词被突出显示。Lucene提供了Highlighter类来完成这个任务。它会...