{{{ #!html
讓 Nutch 支援中文分詞 方法教學
Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫
}}} [[PageOutline]] = 前言 = * Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫 的詳細方法 * 本篇參考 [http://zha-zi.javaeye.com/blog/625619 nutch-1.0中文分词(原文連結)],並且修正與補充 * [http://ftp.twaren.net/Unix/Web/apache/nutch/ 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行左右的程式碼 (原本為:| >) {{{ cd nutch-1.0/ vim src/java/org/apache/nutch/analysis/NutchAnalysis.jj }}} {{{ #!text | )+ > }}} * 用編譯器 javacc 編譯出七個java檔 {{{ #!text 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: {{{ #!text public static Query parseQuery(String queryString, Configuration conf) throws IOException,ParseException }}} * 在第54行加入ParseException: {{{ #!text 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 }}} 將 {{{ #!text 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); } }}} 修改成 {{{ #!text public TokenStream tokenStream(String fieldName, Reader reader) { Analyzer analyzer = new org.wltea.analyzer.lucene.IKAnalyzer(); return analyzer.tokenStream(fieldName, reader); } }}} * 修改 build.xml,在 下(約195行),加入 {{{ cd nutch-1.0 vim build.xml }}} {{{ #!text }}} * 重新編譯 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-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 ./ }}} 完成 [[Image(2010-07-15-190139_751x697_scrot.png)]]