新手建站选择CMS程序时需要注意什么
2011-05-23 23:53
441 查看
http://blog.csdn.net/aidayei/archive/2011/06/05/6526986.aspx
我在solr中尝试了以下三种开源中文分词器,其中两种都因为solr版本过高不能用,郁闷,后来将JAR包反编译,找到了原因,下面先简要说明一下三种开源中文分词器
庖丁解牛:google code上最后一次代码提交是2008.6月,不是很活跃,但用的人还很多
mmseg4j:google code上最后一次代码提交是2010.12月,应该还算活跃,采用MMSeg算法,有两种分词方法:Simple和Complex
IKAnalyzer:最近很活跃,2011.3月在google code上提交了一个版本
lucene于今年5月份出了3.2版,solr也对应出了3.2版,高版本有个不好的地方,就是开源的中文分词库,跟不上相应的更新速度,本人用的是3.1 版,在lucene中加入庖丁解牛中文分词器和IKAnalyzer最新版,都会报错。
错误原因如下(以IKAnalyzer为例说明):
不论是庖丁解牛还是IKAnalyzer,要把分词器放到solr中,需要经承solr中的BaseTokenizerFactory这个类,
view plaincopy to clipboardprint?
import java.io.Reader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class ChineseTokenizerFactory extends BaseTokenizerFactory {
@Override
public TokenStream create(Reader reader) {
return new IKAnalyzer().tokenStream("text", reader);
}
}
这个基类中实现TokenizerFactory接口,create就定义在这个接口中,但返回的类型是Tokenizer,而在solr3.1版本中Tokenizer是继承TokenStream的,所以这里需要强制转换才不会报错。而庖丁解牛就没那么简单了,需要修改源码才可以,庖丁解牛现在只支持到solr1.4版本
还有庖丁解牛都不能直接在lucene3.1中使用,代码不提示任何错误,但一运行就报错,不知道为什么原因,估计原因同上,需要修改源代码,有知道的,请转告
mmseg4j也要下最新版本,否则也会报错,具体配置如下:
把 mmseg4j-all-1.8.4.jar 放到 tomcat/webapps/solr/lib下,mmseg4j1.84包中的字典解压出来,放在solr.home/data目录下,修改solr配置文件:
view plaincopy to clipboardprint?
<fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
mmseg4j 在 solr 中主要支持两个参数:mode、dicPath。mode 表示是什么模式分词。dicPath 是词库目录,网上说可以默认在当前data目录下寻找,经测试好像不行,必须人工给出绝对路径,或许是高版本的问题吧,或许是我哪里设置错了,然后在 http://localhost:8080/solr/admin/analysis.jsp 可以看 mmseg4j 的分词效果,在Field的下拉菜单选择type,然后输入textComplex,特别是和CJK分词器作对比,很明显,CJK是solr官方自带的支持中日韩的分词器,它对中文是采用的二元分词
其实中文分词一直以来是很多人在研究的东西,怎么提高分词效率和匹配正确率是目标,里面的算法实现是它的核心,把它完全吃透,估计都可以写论文了,呵呵,由于时间有限,只是粗略拿来体验了一下。还有就是关于solr/lucene的搜索效率,优化索引,也是一个值得研究的课题。
参考资料:
1.http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html
2.http://lianj-lee.iteye.com/blog/464364
3.http://www.blogjava.net/RongHao/archive/2007/11/06/158621.html
4.http://www.iteye.com/news/9637
5.http://blog.csdn.net/foamflower/archive/2010/07/09/5723361.aspx
突然发现IKAnalyzer在3.1.5版本中,已经实现了对solr的TokenizerFactory接口配置的支持,详见下面这篇文章:
/article/3942287.html
我在solr中尝试了以下三种开源中文分词器,其中两种都因为solr版本过高不能用,郁闷,后来将JAR包反编译,找到了原因,下面先简要说明一下三种开源中文分词器
庖丁解牛:google code上最后一次代码提交是2008.6月,不是很活跃,但用的人还很多
mmseg4j:google code上最后一次代码提交是2010.12月,应该还算活跃,采用MMSeg算法,有两种分词方法:Simple和Complex
IKAnalyzer:最近很活跃,2011.3月在google code上提交了一个版本
lucene于今年5月份出了3.2版,solr也对应出了3.2版,高版本有个不好的地方,就是开源的中文分词库,跟不上相应的更新速度,本人用的是3.1 版,在lucene中加入庖丁解牛中文分词器和IKAnalyzer最新版,都会报错。
错误原因如下(以IKAnalyzer为例说明):
不论是庖丁解牛还是IKAnalyzer,要把分词器放到solr中,需要经承solr中的BaseTokenizerFactory这个类,
view plaincopy to clipboardprint?
import java.io.Reader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class ChineseTokenizerFactory extends BaseTokenizerFactory {
@Override
public TokenStream create(Reader reader) {
return new IKAnalyzer().tokenStream("text", reader);
}
}
这个基类中实现TokenizerFactory接口,create就定义在这个接口中,但返回的类型是Tokenizer,而在solr3.1版本中Tokenizer是继承TokenStream的,所以这里需要强制转换才不会报错。而庖丁解牛就没那么简单了,需要修改源码才可以,庖丁解牛现在只支持到solr1.4版本
还有庖丁解牛都不能直接在lucene3.1中使用,代码不提示任何错误,但一运行就报错,不知道为什么原因,估计原因同上,需要修改源代码,有知道的,请转告
mmseg4j也要下最新版本,否则也会报错,具体配置如下:
把 mmseg4j-all-1.8.4.jar 放到 tomcat/webapps/solr/lib下,mmseg4j1.84包中的字典解压出来,放在solr.home/data目录下,修改solr配置文件:
view plaincopy to clipboardprint?
<fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:/apache/apache-solr-3.1.0/example/solr/data"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
mmseg4j 在 solr 中主要支持两个参数:mode、dicPath。mode 表示是什么模式分词。dicPath 是词库目录,网上说可以默认在当前data目录下寻找,经测试好像不行,必须人工给出绝对路径,或许是高版本的问题吧,或许是我哪里设置错了,然后在 http://localhost:8080/solr/admin/analysis.jsp 可以看 mmseg4j 的分词效果,在Field的下拉菜单选择type,然后输入textComplex,特别是和CJK分词器作对比,很明显,CJK是solr官方自带的支持中日韩的分词器,它对中文是采用的二元分词
其实中文分词一直以来是很多人在研究的东西,怎么提高分词效率和匹配正确率是目标,里面的算法实现是它的核心,把它完全吃透,估计都可以写论文了,呵呵,由于时间有限,只是粗略拿来体验了一下。还有就是关于solr/lucene的搜索效率,优化索引,也是一个值得研究的课题。
参考资料:
1.http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html
2.http://lianj-lee.iteye.com/blog/464364
3.http://www.blogjava.net/RongHao/archive/2007/11/06/158621.html
4.http://www.iteye.com/news/9637
5.http://blog.csdn.net/foamflower/archive/2010/07/09/5723361.aspx
突然发现IKAnalyzer在3.1.5版本中,已经实现了对solr的TokenizerFactory接口配置的支持,详见下面这篇文章:
/article/3942287.html
相关文章推荐
- 新手站长选择WordPress程序建站需要注意的8个问题
- 新手站长如何选择域名 虚拟主机 CMS建站程序(转)
- 游戏的新手任务的作用是什么,是否一定有必要?新手任务设计需要注意什么?
- 新手配置服务器需要注意些什么?
- 选择Android程序开发机构开发app需要注意哪几点
- 新手选择Linux VPS过程中需要注意的几个问题
- 来选择一款适合我网站的CMS建站程序吧?
- 自己写一个BLOG程序需要注意什么
- (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
- 新手选择Linux VPS过程中需要注意的几个问题
- 营销型网站建设的选择需要注意什么
- 来选择一款适合你网站的CMS建站程序吧
- 开发S60 3rd开机后台运行的程序需要注意些什么?
- 选择login_activity作为程序运行的入口需要注意的情况
- 我是SOHO新手,该如何选择我的建站程序?
- 选择响应式建站工具需要注意的几点
- 在Android开发过程中搭建一个自己的应用框架有几个步骤?需要注意什么?
- 深拷贝和浅拷贝的区别?如果要delete一个浅拷贝,需要注意什么条件?
- 使用静态库时需要注意的事项(gcc下程序调用静态库编译命令:主文件必须在静态库前面!)