- 浏览: 99327 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
sulanyan29:
您 好,请问下android程序中调用以下两个命令,开启: s ...
linux 防火墙启动、添加规则 -
rainliu:
Can use jrockit monitor for IBM ...
java堆栈溢出 JRockit+Tomcat 实战调试
实现一个简单的分析器(Analyzer)的例子如下所示:]
一般在Tokenizer的子类实际执行词语的切分。需要设置的值有:和词相关的属性termAtt、和位置相关的属性offsetAtt。在搜索结果中高亮显示查询词时,需要用到和位置相关的属性。但是在切分用户查询词时,一般不需要和位置相关的属性。Tokenizer的子类需要重写incrementToken方法。通过incrementToken方法遍历Tokenizer分析出的词,当还有词可以获取时,返回true;已经遍历到结尾时,返回false。
基于属性的方法把无用的词特征和想要的词特征分隔开。每个TokenStream在构造时增加它想要的属性。在TokenStream的整个生命周期中都保留一个属性的引用。这样在获取所有和TokenStream实例相关的属性时,可以保证属性的类型安全。
在TokenStream.incrementToken()方法中,一个token流仅仅操作在构造方法中声明过的属性。例如,如果只要分词,则只需要TermAttribute。其他的属性,例如PositionIncrementAttribute或者PayloadAttribute都被这个TokenStream忽略掉了,因为这时不需要其他的属性。
虽然也可以通过termAtt对象中的term方法返回词,但这个方法返回的是字符串,直接返回字符数组的termBuffer方法性能更好。下面是采用正向最大长度匹配实现的一个简单的Tokenizer。
public class MyAnalyzer extends Analyzer { public TokenStream tokenStream(String fieldName, Reader reader) { //以空格方式切分Token TokenStream stream = new WhitespaceTokenizer(reader); //删除过短或过长的词,例如 in、of、it stream = new LengthFilter(stream, 3, Integer.MAX_VALUE); //给每个词标注词性 stream = new PartOfSpeechAttributeImpl.PartOfSpeechTagging Filter(stream); return stream; } }
一般在Tokenizer的子类实际执行词语的切分。需要设置的值有:和词相关的属性termAtt、和位置相关的属性offsetAtt。在搜索结果中高亮显示查询词时,需要用到和位置相关的属性。但是在切分用户查询词时,一般不需要和位置相关的属性。Tokenizer的子类需要重写incrementToken方法。通过incrementToken方法遍历Tokenizer分析出的词,当还有词可以获取时,返回true;已经遍历到结尾时,返回false。
基于属性的方法把无用的词特征和想要的词特征分隔开。每个TokenStream在构造时增加它想要的属性。在TokenStream的整个生命周期中都保留一个属性的引用。这样在获取所有和TokenStream实例相关的属性时,可以保证属性的类型安全。
protected CnTokenStream(TokenStream input) { super(input); termAtt = (TermAttribute) addAttribute(TermAttribute.class); }
在TokenStream.incrementToken()方法中,一个token流仅仅操作在构造方法中声明过的属性。例如,如果只要分词,则只需要TermAttribute。其他的属性,例如PositionIncrementAttribute或者PayloadAttribute都被这个TokenStream忽略掉了,因为这时不需要其他的属性。
public boolean incrementToken() throws IOException { if (input.incrementToken()) { final char[] termBuffer = termAtt.termBuffer(); final int termLength = termAtt.termLength(); if (replaceChar(termBuffer, termLength)) { termAtt.setTermBuffer(output, 0, outputPos); } return true; } return false; }
虽然也可以通过termAtt对象中的term方法返回词,但这个方法返回的是字符串,直接返回字符数组的termBuffer方法性能更好。下面是采用正向最大长度匹配实现的一个简单的Tokenizer。
public class CnTokenizer extends Tokenizer { private static TernarySearchTrie dic = new TernarySearchTrie("SDIC.txt"); //词典 private TermAttribute termAtt;// 词属性 private static final int IO_BUFFER_SIZE = 4096; private char[] ioBuffer = new char[IO_BUFFER_SIZE]; private boolean done; private int i = 0;// i是用来控制匹配的起始位置的变量 private int upto = 0; public CnTokenizer(Reader reader) { super(reader); this.termAtt = ((TermAttribute) addAttribute(TermAttribute.class)); this.done = false; } public void resizeIOBuffer(int newSize) { if (ioBuffer.length < newSize) { // Not big enough; create a new array with slight // over allocation and preserve content final char[] newnewCharBuffer = new char[newSize]; System.arraycopy(ioBuffer, 0, newCharBuffer, 0, ioBuffer. length); ioBuffer = newCharBuffer; } } @Override public boolean incrementToken() throws IOException { if (!done) { clearAttributes(); done = true; upto = 0; i = 0; while (true) { final int length = input. read(ioBuffer, upto, ioBuffer. length - upto); if (length == -1) break; upto += length; if (upto == ioBuffer.length) resizeIOBuffer(upto * 2); } } if (i < upto) { char[] word = dic.matchLong(ioBuffer, i, upto); // 正向最大长度匹配 if (word != null)// 已经匹配上 { termAtt.setTermBuffer(word, 0, word.length); i += word.length; } else { termAtt.setTermBuffer(ioBuffer, i, 1); ++i;// 下次匹配点在这个字符之后 } return true; } return false; } }
发表评论
-
微信群消息自动转发另一群
2017-09-04 18:46 11683周六,咱们小区业委会的秘书长娟姐找到我,说小区业主太多,一个群 ... -
java堆栈溢出 JRockit+Tomcat 实战调试
2012-07-24 10:19 27991. JRockit简介 Jrockit是Bea开发的符合J ... -
java.lang.OutOfMemoryError: unable to create new native thread
2012-02-12 16:09 3603今天系统突然收到错误日志: Feb 12, 2012 1:28 ... -
Lucene 分词解读(二)--Analyzer
2011-09-19 17:33 1380Lucene中的Analyzer 为了更好地搜索中文,在Lu ... -
Lucene 分词解读(一)
2011-09-19 17:31 1018Lucene中的中文分词 Lucene中处理中文的常用方法有 ... -
三叉Trie树
2011-09-19 17:30 1261在一个三叉搜索树(Tern ... -
三叉Trie树
2011-09-13 16:20 6在一个三叉搜索树(Tern ... -
Lucene写自己的Analyzer
2011-09-13 15:57 44实现一个简单的分析器(Analyzer)的例子如下所示:] ... -
Lucene 分词解读(二)--Analyzer
2011-09-13 15:51 9Lucene中的Analyzer 为了更好地搜索中文,在Lu ... -
Lucene 分词解读(一)
2011-09-13 15:46 1010Lucene中的中文分词 Lucene中处理中文的常用方法有 ... -
大并发搜索下关键词前缀匹配值得考虑的一种数据结构---Trie
2011-09-12 23:43 2350如果要实现一个能支撑 ... -
大并发搜索下值得考虑的一种数据结构---Trie
2011-09-12 23:42 0如果要实现一个能支撑大数据量并发搜索的引擎,一般不会采用luc ... -
cannot make any changes to the index (it was opened with readOnly = true)
2011-09-10 13:13 1436在调用IndexReader.open(final Di ... -
nginx 301 重定向 包括域名、目录、文件等方法 (二)
2011-09-09 14:24 10609nginx rewrite 伪静态配置参数详细说明 正则表达 ... -
nginx 301 重定向 包括域名、目录、文件等方法 (一)
2011-09-09 14:15 1473在网站建设中需要网页 ... -
查看Oracle表空间大小的方法
2011-09-08 10:16 859Oracle表空间大小的查看方法应该是我们都需要掌握的知识,下 ... -
[推荐] java生成csv文件
2011-08-15 10:08 1332import java.io.File; import ...
相关推荐
solr的IK分词器JAR及配置文件 jar包和配置文件的放置位置不一样,详情可搜索 IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。...org.wltea.analyzer.lucene.IKAnalyzer jar
本话题主要探讨的是在Java 1.5环境下,如何利用Lucene 3.0.1版本和IKAnalyzer 3.2来实现模糊查询的功能。Lucene是一个高性能、全文本搜索库,而IKAnalyzer是一个专门针对中文分词的开源分析器,它们的结合能够有效地...
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本
《Lucene5.21与IkAnalyzer2012_V5入门详解》 在信息技术领域,数据检索和...希望这个入门案例能帮助你开启Lucene和IkAnalyzer的探索之旅,如果你在实践中遇到困难,欢迎进一步学习和研究,不断提升自己的技术实力。
3. **插件化设计**:IKAnalyzer提供了插件化的扩展机制,用户可以定制自己的过滤器、分析器等,以满足特定场景的需求。 4. **支持多种搜索引擎**:除了Lucene之外,IKAnalyzer还兼容Solr、Elasticsearch等其他全文...
1. **Document**:文档是Lucene中最小的单位,可以包含多个字段(Field),每个字段都有自己的类型,如文本、数值或日期。 2. **IndexWriter**:负责创建和更新索引,它可以添加、删除或修改Document。 3. **...
在给定的标题和描述中,我们看到IKAnalyzer已经更新以支持Lucene的高版本,包括5.x、6.x以及最新的7.3.1版本,这表明它持续跟进了Lucene的发展,确保与主流搜索引擎框架的兼容性。 1. **IKAnalyzer详解**: - IK...
《深入理解Lucene5与IKAnalyzer5:构建高效全文搜索引擎》 在信息技术高速发展的今天,搜索引擎已经成为信息获取的重要工具。Lucene和IKAnalyzer作为Java领域内广泛应用的全文检索库和中文分词器,它们的结合为开发...
IK Analyzer 3.0 是一个专为 Lucene 设计的开源中文分词器,它基于 Java 开发,提供轻量级且高效的分词功能。自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,...
lucene-IKAnalyzer2012_u6-lukeall.rar压缩包中包含lucene-4.10.3依赖包、中文分词器IKAnalyzer2012_u6的依赖包和索引库查看工具lukeall-4.10.0.jar(将jar拷贝到相应的索引库中双击打开即可查看)。解压后就可以...
【Lucene4.7+IK Analyzer中文分词入门教程】 Lucene是一个开源的全文检索库,它提供了文本分析、索引和搜索的核心工具。在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源...
IKAnalyzer 是一个专门为 Lucene 设计的开源中文分词库,它在中文处理领域有着广泛的应用。这个版本的 IKAnalyzer 特别适用于 Lucene 5.2.1,这意味着它与该版本的 Lucene 兼容性极佳,能够提供高效、准确的中文分词...
该jar包之前只支持Lucene4.7.2,因为我自己的项目用到的是Lucene5.3.1,所以我自己重写了IKAnalyzer.java以及IKTokenizer.java,并且重新编译之后替换了之前的.class文件,现在可以适用于Lucene5.3.1
解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;...
提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。
使用lucene-3.5和IKAnalyzer2012,实现基础的全文检索实现
导入: import net.teamhot.lucene.ThesaurusAnalyzer; import org.apache.lucene.analysis.Analyzer; 实例化: Analyzer analyzer = new ThesaurusAnalyzer();
IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词语言包,它是以Lucene为应用主体,结合词典分词和文法分析算法的中文词组组件。从3.0版本开始,IK发展为面向java的公用分词组件,独立Lucene项目,同时...
5. **用户自定义扩展**:除了内置的Analyzer,用户还可以通过继承`Analyzer`类,结合自己的业务需求,实现定制化的分词逻辑。例如,可以添加特定领域的专业术语到词典,或者编写特定的分词规则。 总的来说,Lucene...