zoukankan
html css js c++ java
lucene的中文分词器
ucene的中文分词器到现在还没有好的解决办法。下边介绍了两个lucene自己提供的分词器和一个javaeye上的网友实现的分词器。关于各个分词器的不同见代码中的print信息。直接运行得到console的输出结果更容易对比不同。
package
analyzer;
import
java.io.Reader;
import
java.io.StringReader;
import
org.apache.lucene.analysis.Analyzer;
import
org.apache.lucene.analysis.StopFilter;
import
org.apache.lucene.analysis.Token;
import
org.apache.lucene.analysis.TokenFilter;
import
org.apache.lucene.analysis.TokenStream;
import
org.apache.lucene.analysis.cjk.CJKAnalyzer;
import
org.apache.lucene.analysis.cn.ChineseAnalyzer;
import
org.apache.lucene.analysis.standard.StandardAnalyzer;
import
org.mira.lucene.analysis.IK_CAnalyzer;
import
org.mira.lucene.analysis.MIK_CAnalyzer;
import
com.sohospace.lucene.analysis.xanalyzer.XAnalyzer;
import
com.sohospace.lucene.analysis.xanalyzer.XFactory;
import
com.sohospace.lucene.analysis.xanalyzer.XTokenizer;
//
中文分词使用了Paoding的分词技术,特表示感谢
public
class
TestCJKAnalyzer
{
private
static
String testString1
=
"
中华人民共和国在1949年建立,从此开始了新中国的伟大篇章
"
;
private
static
String testString2
=
"
比尔盖茨从事餐饮业和服务业方面的工作
"
;
public
static
void
testStandard(String testString)
throws
Exception
{
Analyzer analyzer
=
new
StandardAnalyzer();
Reader r
=
new
StringReader(testString);
StopFilter sf
=
(StopFilter) analyzer.tokenStream(
""
, r);
System.err.println(
"
=====standard analyzer====
"
);
System.err.println(
"
分析方法:默认没有词只有字
"
);
Token t;
while
((t
=
sf.next())
!=
null
)
{
System.out.println(t.termText());
}
}
public
static
void
testCJK(String testString)
throws
Exception
{
Analyzer analyzer
=
new
CJKAnalyzer();
Reader r
=
new
StringReader(testString);
StopFilter sf
=
(StopFilter) analyzer.tokenStream(
""
, r);
System.err.println(
"
=====cjk analyzer====
"
);
System.err.println(
"
分析方法:交叉双字分割
"
);
Token t;
while
((t
=
sf.next())
!=
null
)
{
System.out.println(t.termText());
}
}
public
static
void
testChiniese(String testString)
throws
Exception
{
Analyzer analyzer
=
new
ChineseAnalyzer();
Reader r
=
new
StringReader(testString);
TokenFilter tf
=
(TokenFilter) analyzer.tokenStream(
""
, r);
System.err.println(
"
=====chinese analyzer====
"
);
System.err.println(
"
分析方法:基本等同StandardAnalyzer
"
);
Token t;
while
((t
=
tf.next())
!=
null
)
{
System.out.println(t.termText());
}
}
public
static
void
testPaoding(String testString)
throws
Exception
{
XAnalyzer analyzer
=
XFactory.getQueryAnalyzer();
Reader r
=
new
StringReader(testString);
XTokenizer ts
=
(XTokenizer) analyzer.tokenStream(
""
, r);
System.err.println(
"
=====paoding analyzer====
"
);
System.err.println(
"
分析方法:字典分词,去掉停止词。在字典不能匹配的情况下使用CJKAnalyzer的分割发。
"
);
Token t;
while
((t
=
ts.next())
!=
null
)
{
System.out.println(t.termText());
}
}
public
static
void
testJe(String testString)
throws
Exception
{
//
Analyzer analyzer = new MIK_CAnalyzer();
Analyzer analyzer
=
new
IK_CAnalyzer();
Reader r
=
new
StringReader(testString);
TokenStream ts
=
(TokenStream)analyzer.tokenStream(
""
, r);
System.err.println(
"
=====je analyzer====
"
);
System.err.println(
"
分析方法:字典分词,正反双向搜索,具体不明
"
);
Token t;
while
((t
=
ts.next())
!=
null
)
{
System.out.println(t.termText());
}
}
public
static
void
main(String[] args)
throws
Exception
{
//
String testString = testString1;
String testString
=
testString1;
System.out.println(testString);
testStandard(testString);
testCJK(testString);
testPaoding(testString);
//
testChiniese(testString);
//
testJe(testString);
}
}
查看全文
相关阅读:
Integer类的parseInt和valueOf的区别
华为实习小结
程序员浪费生命的几种方式
移动前端中viewport(视口) 转
Console API 与命令行
Ajax
浏览器缓存机制
mysql之各种命令总结
jquery file upload 文件上传插件
文件上传插件uploadify详解
原文地址:https://www.cnblogs.com/pony/p/1486285.html
最新文章
案例:用ajax get方法 查询用户列表
ajax 用 get方法 验证登录
js变量声明提升
数据库收集的好的练习:
mysql 简单查询
mysql 复杂查询
mysql 列约束
mysql中的列类型
常用的SQL命令:
mysql创建数据库
热门文章
使用Eclipse创建Maven javaweb项目
SpringMVC多个拦截器
Java String.split()用法小结
后台传Map到ftl
Java获取当前时间
Mybatis避免出现语法错
前端弹出框
前端下拉框学习1
白夜行读后感
String的字符串相加是怎么实现的?
Copyright © 2011-2022 走看看