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);
}
}
查看全文
相关阅读:
lamp
ssh 交互脚本
mysql 备份检测主从脚本
RANDOM 猜数字脚本
ansible+playbook 搭建lnmp环境
集群搭建
grafana
nginx lnmp搭建
shell 基础(1): 变量
seq 增量输出命令
原文地址:https://www.cnblogs.com/pony/p/1486285.html
最新文章
Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note (vector 替换)
uva 111
Codeforces Round #247 (Div. 2) C. k-Tree (dp)
hdu 4825 Xor Sum (建树) 2014年百度之星程序设计大赛
hdu 3038 How Many Answers Are Wrong (带权并查集)
2014年百度之星程序设计大赛
省赛总结
第六届华为创新杯编程大赛-进阶1第1轮 洞穴逃生 (bfs + 优先队列)
hdu 3501 Calculation 2 (欧拉函数)
hdu 4143 A Simple Problem (变形)
热门文章
acdream B
sdut 2840 Best string Orz~ (dp)
sdut 2846 Remove Trees (二分 + 贪心)
hdu 1885 Key Task (三维bfs)
Unique Encryption Keys (思维题 预处理)
sdut 2847 Monitor (思维题)
Codeforces Round #243 (Div. 2) C. Sereja and Swaps(优先队列 暴力)
Codeforces Round #242 (Div. 2) C. Magic Formulas (位异或性质 找规律)
JVM笔记
内存泄露和内存溢出
Copyright © 2011-2022 走看看