登山之道
C++博客
::
首頁
::
新隨筆
:: :: ::
管理
Lucene入門級筆記五 -- 分詞器,使用中文分詞器,擴展詞庫,停用詞
Posted on 2011-04-17 19:25
Kevin_Zhang
閱讀(3481)
評論(1)
編輯
收藏
引用
所屬分類:
搜索引擎
1
. 常見的中文分詞器有:極易分詞的(MMAnalyzer) 、
"
庖丁分詞
"
分詞器(PaodingAnalzyer)、IKAnalyzer 等等。其中 MMAnalyzer 和 PaodingAnalzyer 不支持 lucene3.0及以后版本。
使用方式都類似,在構建分詞器時
Analyzer analyzer
=
new
[My]Analyzer();
2
. 這里只示例 IKAnalyzer,目前只有它支持Lucene3.
0
以后的版本。
首先需要導入 IKAnalyzer3.
2
.0Stable.jar 包
3
. 示例代碼
view plaincopy to clipboardprint
?
public
class
AnalyzerTest
{
@Test
public
void
test()
throws
Exception
{
String text
=
"
An IndexWriter creates and maintains an index.
"
;
/**/
/*
標準分詞器:單子分詞
*/
Analyzer analyzer
=
new
StandardAnalyzer(Version.LUCENE_30);
testAnalyzer(analyzer, text);
String text2
=
"
測試中文環境下的信息檢索
"
;
testAnalyzer(
new
IKAnalyzer(), text2);
//
使用IKAnalyzer,詞庫分詞
}
/** */
/**
* 使用指定的分詞器對指定的文本進行分詞,并打印結果
*
*
@param
analyzer
*
@param
text
*
@throws
Exception
*/
private
void
testAnalyzer(Analyzer analyzer, String text)
throws
Exception
{
System.out.println(
"
當前使用的分詞器:
"
+
analyzer.getClass());
TokenStream tokenStream
=
analyzer.tokenStream(
"
content
"
,
new
StringReader(text));
tokenStream.addAttribute(TermAttribute.
class
);
while
(tokenStream.incrementToken())
{
TermAttribute termAttribute
=
tokenStream.getAttribute(TermAttribute.
class
);
System.out.println(termAttribute.term());
}
}
}
public
class
AnalyzerTest
{
@Test
public
void
test()
throws
Exception
{
String text
=
"
An IndexWriter creates and maintains an index.
"
;
/**/
/*
標準分詞器:單子分詞
*/
Analyzer analyzer
=
new
StandardAnalyzer(Version.LUCENE_30);
testAnalyzer(analyzer, text);
String text2
=
"
測試中文環境下的信息檢索
"
;
testAnalyzer(
new
IKAnalyzer(), text2);
//
使用IKAnalyzer,詞庫分詞
}
/** */
/**
* 使用指定的分詞器對指定的文本進行分詞,并打印結果
*
*
@param
analyzer
*
@param
text
*
@throws
Exception
*/
private
void
testAnalyzer(Analyzer analyzer, String text)
throws
Exception
{
System.out.println(
"
當前使用的分詞器:
"
+
analyzer.getClass());
TokenStream tokenStream
=
analyzer.tokenStream(
"
content
"
,
new
StringReader(text));
tokenStream.addAttribute(TermAttribute.
class
);
while
(tokenStream.incrementToken())
{
TermAttribute termAttribute
=
tokenStream.getAttribute(TermAttribute.
class
);
System.out.println(termAttribute.term());
}
}
}
3
. 如何擴展詞庫:很多情況下,我們可能需要定制自己的詞庫,例如 XXX 公司,我們希望這能被分詞器識別,并拆分成一個詞。
IKAnalyzer 可以很方便的實現我們的這種需求。
新建 IKAnalyzer.cfg.xml
view plaincopy to clipboardprint
?
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<!
DOCTYPE properties SYSTEM
"
http://java.sun.com/dtd/properties.dtd
"
>
<
properties
>
<!--
1
,文件要是 UTF
-
8
編碼。
2
,一行寫一個詞
-->
<!--
用戶可以在這里配置自己的擴展字典
-->
<
entry key
=
"
ext_dict
"
>/
mydict.dic
</
entry
>
</
properties
>
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<!
DOCTYPE properties SYSTEM
"
http://java.sun.com/dtd/properties.dtd
"
>
<
properties
>
<!--
1
,文件要是 UTF
-
8
編碼。
2
,一行寫一個詞
-->
<!--
用戶可以在這里配置自己的擴展字典
-->
<
entry key
=
"
ext_dict
"
>/
mydict.dic
</
entry
>
</
properties
>
解析:
<
entry key
=
"
ext_dict
"
>/
mydict.dic
</
entry
>
擴展了一個自己的詞典,名字叫 mydict.dic
因此我們要建一個文本文件,名為:mydict.dic (此處使用的 .dic 并非必須)
在這個文本文件里寫入:
北京XXXX科技有限公司
這樣就添加了一個詞匯。
如果要添加多個,則新起一行:
詞匯一
詞匯二
詞匯三
需要注意的是,這個文件一定要使用 UTF
-
8編碼
4
. 停用詞:
有些詞在文本中出現的頻率非常高,但是對文本所攜帶的信息基本不產生影響,例如英文的
"
a、an、the、of
"
,或中文的
"
的、了、著
"
,以及各種標點符號等,這樣的詞稱為停用詞(stop word)。
文本經過分詞之后,停用詞通常被過濾掉,不會被進行索引。在檢索的時候,用戶的查詢中如果含有停用詞,檢索系統也會將其過濾掉(因為用戶輸入的查詢字符串也要進行分詞處理)。
排除停用詞可以加快建立索引的速度,減小索引庫文件的大小。
IKAnalyzer 中自定義停用詞也非常方便,和配置
"
擴展詞庫
"
操作類型,只需要在 IKAnalyzer.cfg.xml 加入如下配置:
<
entry key
=
"
ext_stopwords
"
>/
ext_stopword.dic
</
entry
>
同樣這個配置也指向了一個文本文件
/
ext_stopword.dic (后綴名任意),格式如下:
也
了
仍
從
本文來自CSDN博客,轉載請標明出處:http:
//
blog.csdn.net/wenlin56/archive/2010/12/13/6074124.aspx
Feedback
#
re: Lucene入門級筆記五 -- 分詞器,使用中文分詞器,擴展詞庫,停用詞
回復
更多評論
2016-07-05 20:08 by
回家看回家看
54544554
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
Lucene入門級筆記五 -- 分詞器,使用中文分詞器,擴展詞庫,停用詞
網頁解析開源項目
一個 Java 搜索引擎的實現,第 2 部分: 網頁預處理
一個 Java 搜索引擎的實現,第 1 部分: 網絡爬蟲
java 下載網頁
Apache+php+mysql在XP下搭配詳解
MonoDevelop
heritrix1.14.4
tomcatPlugin下載地址
Heritrix-1.14.1怎么配置?
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © Kevin_Zhang
日歷
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我參與的隨筆
隨筆分類
數據庫(1)
ACM基礎知識(9)
ARM(2)
C/C++(12)
DOS(1)
Google Map API
Heritrix(1)
IT News(22)
JAVA(3)
Jsp
Linux(9)
Lucene(1)
PHP(6)
Python
Tree
Trie樹(1)
博弈
動態規劃(1)
回溯
匯編
計算幾何(1)
模擬(4)
排序(2)
嵌入式
數據結構(2)
數論(2)
數學(3)
搜索(2)
搜索引擎(12)
隨機數
貪心(1)
圖論(1)
圖形學(1)
萬花筒(22)
網絡流
硬件(1)
隨筆檔案
2011年6月 (5)
2011年5月 (22)
2011年4月 (24)
2010年12月 (1)
2010年11月 (13)
2010年10月 (7)
2010年9月 (14)
2010年8月 (52)
2010年7月 (9)
文章分類
ACM題目分類(13)
C
C#
C++
DP動態規劃
JAVA
LUNIX
Python
博弈
計算幾何
模擬
數論(1)
搜索(1)
貪心
圖論
文章檔案
2010年8月 (4)
2010年7月 (22)
程序的靈魂--算法
沙場秋點兵,壯士凱歌還
北大POJ
他山之石,可以攻玉
圍觀強人
搜索
最新評論
1.?re: Lucene入門級筆記五 -- 分詞器,使用中文分詞器,擴展詞庫,停用詞
54544554
--回家看回家看
2.?re: 水
評論內容較長,點擊標題查看
--Jason Huang
3.?re: 10項技能讓前端開發者價值百萬!
評論內容較長,點擊標題查看
--BURKERosie25
4.?re: (轉載)ACM經歷總結[未登錄]
謝謝
--xingyezhi
5.?re: 世界頭號營銷大師們的營銷素質
大道至簡,殊途同歸,值得借鑒。
--Kevin_Zhang
閱讀排行榜
1.?Java動態數組的用法詳解(12193)
2.? Lucene入門級筆記五 -- 分詞器,使用中文分詞器,擴展詞庫,停用詞(3481)
3.?用scanf輸入字符串空格不識別??(2072)
4.?php java交互 php/java bridge (1930)
5.?設置MFC坐標系(1793)
久久电影网一区
|
大美女久久久久久j久久
|
亚洲欧美日韩精品久久亚洲区
|
中文国产成人精品久久亚洲精品AⅤ无码精品
|
女人高潮久久久叫人喷水
|
久久亚洲熟女cc98cm
|
18岁日韩内射颜射午夜久久成人
|
偷窥少妇久久久久久久久
|
欧美精品久久久久久久自慰
|
国产69精品久久久久APP下载
|
久久国产亚洲精品
|
无码精品久久久久久人妻中字
|
亚洲愉拍99热成人精品热久久
|
国产三级精品久久
|
7777精品伊人久久久大香线蕉
|
国产成人精品免费久久久久
|
东方aⅴ免费观看久久av
|
国产精品久久波多野结衣
|
久久夜色精品国产欧美乱
|
精品久久久久中文字
|
欧美一级久久久久久久大
|
久久婷婷五月综合色99啪ak
|
中文字幕一区二区三区久久网站
|
一本久久综合亚洲鲁鲁五月天
|
97久久超碰成人精品网站
|
久久久久久久久久久久久久
|
漂亮人妻被中出中文字幕久久
|
99热精品久久只有精品
|
久久电影网一区
|
成人免费网站久久久
|
久久影院综合精品
|
久久久久亚洲AV无码麻豆
|
久久国产乱子伦精品免费强
|
色88久久久久高潮综合影院
|
欧美国产成人久久精品
|
四虎国产精品成人免费久久
|
国产精品成人99久久久久
|
一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区
|
久久AAAA片一区二区
|
国产精品99久久久久久宅男
|
欧美久久综合性欧美
|