{{{ #!html
讓 Nutch 1.2 支援中文分詞 方法教學
Nutch 1.2 + IK-Analyzer 3.2.8 中文分詞庫
}}} [[PageOutline]] = Change Log = * 20111019 解決 中文分詞 問題。輸入: 解析度 會出現錯誤 * 20110901 IKAnalyzer3.2.8_waue.jar 重編 = 編譯 = 下載解壓縮 nutch-1.2 (目前用 nutch-1.2-bin.tar.gz) {{{ cd $nutch-1.2/ vim src/java/org/apache/nutch/analysis/NutchAnalysis.jj }}} {{{ #!text | )+ > }}} * 用編譯器 javacc 編譯出七個java檔 {{{ CharStream.java NutchAnalysisTokenManager.java TokenMgrError.java NutchAnalysisConstants.java ParseException.java NutchAnalysis.java Token.java }}} {{{ cd $nutch-1.2/src/java/org/apache/nutch/analysis javacc -OUTPUT_DIRECTORY=./ika/ NutchAnalysis.jj mv ./ika/* ./ ; rmdir ika; }}} * 編譯剛編出來的 !NutchAnalysis.java {{{ vim $nutch-1.2/src/java/org/apache/nutch/analysis/NutchAnalysis.java }}} * 加入ParseException (共兩處): {{{ #!text public static Query parseQuery(....) throws IOException,ParseException }}} /opt/nutch-1.2/src/java/org/apache/nutch/searcher/Query.java {{{ #!java (:456) public static Query parse(String queryString, String queryLang, Configuration conf) throws IOException { Query que; try { que = fixup(NutchAnalysis.parseQuery( queryString, AnalyzerFactory.get(conf).get(queryLang), conf), conf); }catch (org.apache.nutch.analysis.ParseException e){ que = new Query(); } return que; } }}} * 下載 IKAnalyzer3.2.8.jar (2011/07/29) 解壓縮 * 此處可以使用官方原始檔來編譯 ,但最後要讓 nutch 頁面索引時索引入的IKAnalyzer 需要修正過,可直接使用我修好的 [http://trac.nchc.org.tw/cloud/attachment/wiki/waue/2011/0801/IKAnalyzer3.2.8_waue.jar IKAnalyzer3.2.8_waue.jar] [http://code.google.com/p/ik-analyzer/downloads/list] nutch-1.2 用的是 lucene-core-3.0.1.jar , 因此對應 ikanalyzer 為 3.2.8 版本 || 3.1.6GA || 兼容 2.9.1 及先前版本 ||对 solr1.3、solr1.4 提供接口实现 || || 3.2.0G 及后续版本 || 兼容 Lucene2.9 及 3.0 版本 || 仅对 solr1.4 提供接口实现 丌支持 Lucene2.4 及先前版本 || IKAnalyzer3.2.8 bin.zip 內的 IKAnalyzer3.2.8.jar 解壓縮出來,分別放到以下資料夾 {{{ cp IKAnalyzer3.2.8.jar $nutch-1.2/lib/ cp IKAnalyzer3.2.8.jar $my_nutch_dir/lib/ cp IKAnalyzer3.2.8.jar $my_tomcat_dir/webapps/ROOT/WEB-INF/lib }}} * 修改 NutchDocumentAnalyzer.java 程式碼 {{{ 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; if ("anchor".equals(fieldName)) analyzer = ANCHOR_ANALYZER; else //analyzer = CONTENT_ANALYZER; analyzer = new org.wltea.analyzer.lucene.IKAnalyzer(); return analyzer.tokenStream(fieldName, reader); } }}} * 修改 build.xml {{{ #!text }}} * 重新編譯 nutch 並產生 nutch-job-1.2.job {{{ ant }}} * build/ nutch-job-1.2.job 就是重編後的核心 {{{ ant jar; ant war; }}} * build/ nutch-job-1.2.jar 工作函式庫 = 佈署 = 分別將 [http://trac.nchc.org.tw/cloud/attachment/wiki/waue/2011/0801/IKAnalyzer3.2.8_waue.jar IKAnalyzer3.2.8-waue.jar(fixed)] ; nutch-1.2.jar ; nutch-1.2.job 放到以下目錄 || 目錄 || 放置檔案 || || /opt/crawlzilla/nutch/lib/ || IKAnalyzer3.2.8-waue.jar || || /opt/crawlzilla/nutch || nutch-1.2.jar [[BR]] nutch-1.2.job || || /opt/crawlzilla/tomcat/webapps/default/WEB-INF/lib/ || IKAnalyzer3.2.8-waue.jar [[BR]] nutch-1.2.jar || * 最後用nutch 的 crawl 抓取網頁,搜索的結果就是按ik分過的中文詞 * 不使用修正過後的IK分詞庫,雖然nutch 爬取沒問題,也能建立正確的分詞庫,但索引網頁return 回來的頁面會是空白一片,可參考Debug 一節 = 修改 = 修改Nutch 搜尋頁面參考 * [http://blog.csdn.net/jiutao_tang/article/details/6524346 Nutch 二次开发需要修改的东西 ] = Debug = crawlzilla 搜尋結果只會出現空白一片 * [http://blog.csdn.net/nxh_love/article/details/6609389 nutch研究—遇到的错误和解决办法] crawlzilla 搜尋 解析 ok ,但搜尋 解析度 則出現錯誤 * [http://blog.csdn.net/whiteotiger/article/details/6149377 加入中文分詞後 token 重疊錯誤] = 補充 = == 選項:加入字典檔 == 1. 編輯 IKAnalyzer.cfg.xml IK Analyzer /cyc.dic 2. 編輯你的字典檔 cyc.dic ,一行一個關鍵字,如: 數學 嘉義縣網 3. 用解壓縮工具打開 /opt/crawlzilla/nutch/nutch-1.2.job,塞入 cyc.dic 與 IKAnalyzer.cfg.xml 4. 重新啟動crawlzilla 的所有服務 之後抓的索引庫就有該中文分詞了了 補充: 如果有兩個字典檔以上的話,可以一起放到 nutch-1.0.job 的壓縮檔內, 修改 IKAnalyzer.cfg.xml ,加入字典檔, 每個字典檔各用分號區隔。 如 /cyc.dic;/cyc2.dic