Version 2 (modified by waue, 14 years ago) (diff) |
---|
讓 Nutch 支援中文分詞 方法教學
Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫
前言
- Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫 的詳細方法
- 本篇參考 nutch-1.0中文分词(原文連結),並且修正與補充
- nutch 1.0 的下載位置
nutch-1.0/ 你下載nutch-1.0 並解壓縮的資料夾目錄位址,也是用來重編nutch的資料夾 如:/home/user/nutch-1.0/ my_nutch_dir 原有的nutch資料夾,接著會被擴充ika中文詞庫 /opt/nutchez/nutch/ my_tomcat_dir 原本被用來放nutch網頁(在tomcat內)的資料夾 /opt/nutchez/tomcat/webapps/ROOT/
1. 安裝
- 安裝必要工具(java 已經安裝)
sudo apt-get install javacc unrar ant
- 修改NutchAnalysis.jj 約130行左右的程式碼 (原本為:| <SIGRAM: <CJK> >)
cd nutch-1.0/ vim src/java/org/apache/nutch/analysis/NutchAnalysis.jj
| <SIGRAM: (<CJK>)+ >
- 用編譯器 javacc 編譯出七個java檔
CharStream.java NutchAnalysisTokenManager.java TokenMgrError.java NutchAnalysisConstants.java ParseException.java NutchAnalysis.java Token.java
cd nutch-1.0/src/java/org/apache/nutch/analysis javacc -OUTPUT_DIRECTORY=./ika/ NutchAnalysis.jj mv ./ika/* ./ ; rm -rf ./ika/
- 編譯剛編出來的 NutchAnalysis?.java
vim nutch-1.0/src/java/org/apache/nutch/analysis/NutchAnalysis.java
- 在第48行加入ParseException:
public static Query parseQuery(String queryString, Configuration conf) throws IOException,ParseException
- 在第54行加入ParseException:
throws IOException,ParseException {
- 把 IKAnalyzer3.1.6GA.jar 放到lib文件夹
- nutch 1.0 用的是 lucene 2.4.0 hadoop 0.19
- 因此ik分詞器最新僅能用 3.1.6ga (3.2.0GA 以上版本只支援lucene 2.9以上版本)
cd nutch-1.0/ wget http://ik-analyzer.googlecode.com/files/IKAnalyzer3.1.6GA_AllInOne.rar mkdir ika unrar x ./IKAnalyzer3.1.6GA_AllInOne.rar ika/ cp ika/IKAnalyzer3.1.6GA.jar lib/ rm -rf IKAnalyzer3.1.6GA_AllInOne.rar ika/
- 修改 NutchDocumentAnalyzer.java 程式碼
cd nutch-1.0/ vim src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java
將
public TokenStream tokenStream(String fieldName, Reader reader) { Analyzer analyzer; if ("anchor".equals(fieldName)) analyzer = ANCHOR_ANALYZER; else analyzer = CONTENT_ANALYZER; return analyzer.tokenStream(fieldName, reader); }
修改成
public TokenStream tokenStream(String fieldName, Reader reader) { Analyzer analyzer = new org.wltea.analyzer.lucene.IKAnalyzer(); return analyzer.tokenStream(fieldName, reader); }
- 修改 build.xml,在 <include name="log4j-*.jar"/> 下(約195行),加入
cd nutch-1.0 vim build.xml
<include name="IKAnalyzer3.1.6GA.jar"/>
- 重新編譯 nutch-1.0
ant
- 完成則多一個資料夾 build,
- build/ 目錄裡面的 nutch-job-1.0.job 就是重編後的核心
- 接著將 build/classes 內的程式碼打包起來,建立nutch-1.0-ika.jar 函式庫
- 補充:我有把預設的 nutch-site.xml 以及 nutch-default.xml放進去一起打包
cd nutch-1.0/build/classes jar cvf nutch-1.0-ika.jar . cp nutch-1.0-ika.jar /opt/nutchez/nutch/lib/
- 補充:我有把預設的 nutch-site.xml 以及 nutch-default.xml放進去一起打包
開始使用
- 最後,將nutch-job-1.0.jar複製到我的nutchez資料夾內取代使用
cd nutch-1.0 sudo mv /opt/nutchez/nutch/nutch-1.0.job /opt/nutchez/nutch/nutch-1.0-ori.job sudo cp build/nutch-1.0.job /opt/nutchez/nutch/nutch-1.0-ika-waue-100715.job cp build/nutch-1.0.job sudo ln -sf /opt/nutchez/nutch/nutch-1.0-ika-waue-100715.job /opt/nutchez/nutch/nutch-1.0.job
- 把nutch-1.0.war重新生成的文件夾下lib中的nutch-1.0.jar跟換成你新生成的 nutch-1.0.jar文件,還要放入ik分詞器的jar文件
- 最後爬取,搜索的結果就是按ik分過的中文詞
cd nutch-1.0/ cp lib/IKAnalyzer3.1.6GA.jar /opt/nutchez/nutch/lib/ cd /opt/nutchez/tomcat/webapps/ROOT/WEB-INF/lib cp nutch-1.0/build/nutch-1.0-ika.jar ./ cp nutch-1.0/lib/IKAnalyzer3.1.6GA.jar ./
完成
Attachments (4)
- 1.png (162.6 KB) - added by waue 14 years ago.
- 2.png (107.5 KB) - added by waue 14 years ago.
- 3.png (13.7 KB) - added by waue 14 years ago.
- 4.png (46.5 KB) - added by waue 14 years ago.
Download all attachments as: .zip