精华帖 (14) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-14
作者您好:我在用“庖丁”做为compass的中文分词(spring+hibernate+compass+tomcat),做了以下修改:
1、由于只能在配置文件中使用无参的构造函数,所以在PaodingAnalyzer 这个类的tokenStream方法中,把 if (knife == null) { throw new NullPointerException("knife should be set before token"); } 改成了: if (knife == null) { knife = PaodingMaker.make(Config.properties()); } 2、由于tomcat默认字符是iso-8859-1,因此在tokenStream方法中,把传入的reader对象读出保存到一个String中,然后转换字符集到utf-8,然后再构造一个StringReader传入返回语句: return new PaodingTokenizer(new StringReader(str), knife, createTokenCollector()); 然后在使用时,抛出java.lang.StringIndexOutOfBoundsException异常,提示CJKKnife 类的 && beaf.charAt(end) >= word.getNext().charAt(count); 处 String index out of range。 不知道此处是存在BUG?还是由于我做的两处修改而导致问题?如果我在这句话前面先加个判断,如果count溢出,则把word.getNext()的值的length-1赋值给 count,不知道这样修改是否会造成其它影响?谢谢~~ |
|
返回顶楼 | |
发表时间:2007-08-14
to yheart:
1、你的改法没有必要。而且这样改也不是良好的。 PaodingAnalyzer具有无参的构造函数,你可以使用无参构造函数,然后通过setKnife,setMode设置这两个值。 你可以参考前回复中给出的Spring配置方法。 2、和Tomcat默认字符无关。你要确认的是: 1)你的页面设置什么字符集? 2)你是否设置了CharacterEncodingFilter过滤器用来对请求和响应设置和页面一致的字符集 (如果是struts2,webwork等从MVC框架上就支持字符集配置的,可以不需要配置CharacterEncodingFilter) 如果你配置的是UTF-8编码的,就必须使用UTF-8编码的字典,同时你的操作系统要是UTF-8编码的(注) 如果你配置的是GBK编码的,就必须使用GBK编码的字典,同时你的操作系统要是GBK编码的(注) [注]: 2.0.0版本使用操作系统的字符集读取字典,所以要保证你使用的字典和操作系统是同一编码的 如果你使用的页面字符集和操作系统不一样,现在庖丁没有办法配置用页面的字符集读取字典, 作为暂时的做法,你可以直接去将net.paoding.analysis.dictionary.support.filewords.FileWordsReader 中的87行的new InputStreamReader(new FileInputStream(f))改为new InputStreamReader(new FileInputStream(f), "你页面配置的编码") 这些情况会在2.0.x进行改进。上面的一些贴子,已经叙述了这个问题 3、程序抛出的StringIndexOutOfBoundsException异常是因为使用错误的字符集导致的,设置正确了,也就不会有异常。 |
|
返回顶楼 | |
发表时间:2007-08-15
恭喜qieqie兄新版发布。
俺地IKAnalyzer新版分词器也在昨天发布了,这里搭个顺风车,咔咔!! http://download.csdn.net/source/227957 |
|
返回顶楼 | |
发表时间:2007-08-17
希望能够提供Solr的解决方案
在Spring中比较好配置,但是在Solr中好像没有类似Spring的<property name="knife" ref="paoding"/>的方式 Qieqie 写道 rainsf 写道 2、最终的Analyer子类(PaodingAnalyzer),应该提供一个无参构造器,因为大多数框架通常都是配置指定Analyer实现类通过反映加载Analyer的,如Hibernate Search. 参见: [url=http://analysis.group.iteye.com/group/post/15584 ]JavaEye:Spring Context下使用"庖丁解牛" [/url] 或: Google:Spring Context下使用"庖丁解牛" 简单摘要(以上面两个链接中的说明为准,这里只是摘要): <bean id="writerAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer"> <property name="knife" ref="paoding"/> <property name="mode" value="1"/> </bean> <bean id="queryAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer"> <property name="knife" ref="paoding"/> <property name="mode" value="2"/> </bean> <bean id="paoding" class="net.paoding.analysis.knife.PaodingMaker" factory-method="make"/> --------- 补: 1、建立索引和使用索引只能使用同一种/模式的分词器 2、2.0.2以后(包含)queryMode和writerMode这两个名称将重构为更好的名称,请留意倒是的API说明或readme变更说明。 |
|
返回顶楼 | |
发表时间:2007-08-19
我封装了一下,在solr1.2版本中测试通过,希望对您有用,也为了享受paoding的同时出一份力:
把附件 mysolr.jar 和 paoding-analysis.jar/commons-logging.jar 拷贝到solr实例的lib目录下(默认不存在,需要自己建立), 编辑schema.xml,加上对mysolr.analysis.ChineseTokenizerFactory的配置节 <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="mysolr.analysis.ChineseTokenizerFactory" mode="index"/> ..... </analyzer> <analyzer type="query"> <tokenizer class="mysolr.analysis.ChineseTokenizerFactory" mode="query"/> ..... </analyzer> </fieldType> ps:之所以使用mode=index来代替mode=write,是因为我觉得index更加符合lucene的习惯,呵呵 lanhuai 写道 希望能够提供Solr的解决方案
在Spring中比较好配置,但是在Solr中好像没有类似Spring的<property name="knife" ref="paoding"/>的方式 Qieqie 写道 rainsf 写道 2、最终的Analyer子类(PaodingAnalyzer),应该提供一个无参构造器,因为大多数框架通常都是配置指定Analyer实现类通过反映加载Analyer的,如Hibernate Search. 参见: [url=http://analysis.group.iteye.com/group/post/15584 ]JavaEye:Spring Context下使用"庖丁解牛" [/url] 或: Google:Spring Context下使用"庖丁解牛" 简单摘要(以上面两个链接中的说明为准,这里只是摘要): <bean id="writerAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer"> <property name="knife" ref="paoding"/> <property name="mode" value="1"/> </bean> <bean id="queryAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer"> <property name="knife" ref="paoding"/> <property name="mode" value="2"/> </bean> <bean id="paoding" class="net.paoding.analysis.knife.PaodingMaker" factory-method="make"/> --------- 补: 1、建立索引和使用索引只能使用同一种/模式的分词器 2、2.0.2以后(包含)queryMode和writerMode这两个名称将重构为更好的名称,请留意倒是的API说明或readme变更说明。 |
|
返回顶楼 | |
发表时间:2007-08-27
rainsf 写道 我终于发现在“高亮错误”的可笑原因,在JDK1.6环境下,直接命令行来运行那几个例子,高亮就没有问题,但我在Eclipse下无论用JDK1.5还是JDK1.6,编译级别无论用5还是6,高亮都一样是错误的,在Tomcat环境下运行情况同样。以上情况看起来很可笑。
真的很郁闷,具体原因出在哪里,还没有时间考究,只知道有这样的事实。切切.王,你也在Eclipse或服务器环境下,或JDK1.5下试试吧,看看情况怎样。。。 eclipse用的编译器是自己改造过的。 如果,是仅在eclipse下出问题,可以考虑用jdk的默认编译器编译下。 ant+javac |
|
返回顶楼 | |
发表时间:2007-09-03
高亮确实有些问题,我也好奇怪的。
看了你们的说法,我换用netbeans 5.5.1重新编译了一下,发现高亮还是有问题的,会出现一些无关的内容。 |
|
返回顶楼 | |
发表时间:2007-09-03
高亮的问题是1.x的bug,已经在2.x修改,现在不存在这个问题。
上面rainsf是因为其修改了代码,未改回来导致的。---rainsf最终给我的邮件说明的。 所以,请确认是用的是2.x的。 如有疑问,站内短信联系为佳。 谢谢。 |
|
返回顶楼 | |