Ubuntu環境下でNutch 1.2二次開発(中国語の分詞を追加)

10593 ワード

前提nutch 1.2 eclipseに配備されました
  詳しく見る :http://www.cnblogs.com/cy163/archive/2013/02/19/2916419.html
1 IKAnalyzer 3を配備する.2.8
1.1 IKAnalyzer 3をダウンロードする.2.8
1.2 IKAnalyzer 3.2.8 nutch/libにコピーし、eclipseにjarを追加
 
2 analysisソースコードの変更
2.1 src/java/org/apache/nutch/analysisパッケージの下でNutchAnalysisを見つけた.jj
(1)PARSER_BEGIN(NutchAnalysis)セクションのインポート宣言に追加:
import org.wltea.analyzer.lucene.IKTokenizer;


(2)TOKEN_MGR_DECLSに追加:
IKTokenizer Analyzer;



TermAttribute termAtt = null;//                 



OffsetAttribute offAtt = null;//         



TokenStream stream = null;



private int cjkStartOffset = 0;//           

(3)TOKEN部分で,|>を見つけ,これは字別に区分され,|)+>に変更されることを表す.
さらに、以下を追加します.

 1 {  

 2     if (stream == null) {  

 3                 stream  = new IKTokenizer(new StringReader(image.toString()),true);  

 4                 //stream = Analyzer.tokenStream("",new StringReader(image.toString()));  

 5                 cjkStartOffset = matchedToken.beginColumn;  

 6                 try {  

 7                     stream.reset();  

 8                 } catch (IOException e) {  

 9                     e.printStackTrace();  

10                 }  

11                 termAtt = (TermAttribute) stream.addAttribute(TermAttribute.class);  

12                 offAtt = (OffsetAttribute) stream.addAttribute(OffsetAttribute.class);  

13                 try {  

14                     if (stream.incrementToken() == false)  

15                         termAtt = null;  

16                 } catch (IOException e) {  

17                     // TODO Auto-generated catch block  

18                     e.printStackTrace();  

19                 }  

20             }  

21             if (termAtt != null && !termAtt.term().equals("")) {  

22                 matchedToken.image = termAtt.term();  

23                 matchedToken.beginColumn = cjkStartOffset + offAtt.startOffset();  

24                 matchedToken.endColumn = cjkStartOffset + offAtt.endOffset();  

25                 try {  

26                     if (stream.incrementToken() != false)  

27                         input_stream.backup(1);  

28                     else  

29                         termAtt = null;  

30                 } catch (IOException e) {  

31                     e.printStackTrace();  

32                 }  

33             }  

34             if (termAtt == null || termAtt.term().equals("")) {  

35                 stream = null;  

36                 cjkStartOffset = 0;  

37             }  

38 }

View Code
2.2 NutchAnalysisをコンパイルする.jj
(1)NutchAnalysis.jjを別のファイルの場所にコピーし、javaccでコンパイルする(コマンド:javacc NutchAnalysis.jj)
(2)生成した7つのjavaソースコードをすべてsrc/java/org/apache/nutch/analysisパッケージに上書きする.
 
3 refresh工事、各種の報告ミスを解決する
3.1 NutchAnalysis.JAvaはエラーを報告します
eclipseプロンプトに従って、ParseException例外スナップコマンドを2つの場所に追加できます.
3.2 org.apache.nutch.SearcherパッケージのQuery.JAvaエラー
エラーを報告する場所を見つけてtry{}catch(){}文で異常を捕まえる(投げ出さないでください.そうしないと、次は多くのファイルを変更します).
 
4ソースコードの追加or修正
(1)src/java/org/apache/nutch/analysisパッケージの下のNutchDocumentAnalyzerを修正する
private static Analyzer ANCHOR_でANALYZER;追加:
private static Analyzer MY_ANALYZER;


ANCHOR_でANALYZER = new AnchorAnalyzer();追加:
MY_ANALYZER = new IKAnalyzer();


tokenStreamを次のように変更します.
public TokenStream tokenStream(String fieldName, Reader reader) {

  Analyzer analyzer;  

        analyzer = MY_ANALYZER;  

        TokenStream tokenStream = analyzer.tokenStream(fieldName, reader);

        tokenStream.addAttribute(TypeAttribute.class);

        tokenStream.addAttribute(FlagsAttribute.class);

        tokenStream.addAttribute(PayloadAttribute.class);

        tokenStream.addAttribute(PositionIncrementAttribute.class);

        return tokenStream;

}


(2)nutch/build.xmlの変更
の下に、次のコマンドで使用するコンパイルwarファイルを追加する際にje-analysisのjarファイルを追加し、IKAnalyzer 3に注意する.2.8.JArのバージョン番号
<include name="IKAnalyzer3.2.8.jar"/>

を変更し、に変更すると、コンパイル後にbulidフォルダの下でnutch-1.2が自動的に生成されます.job,nutch- 1.2.war,nutch-1.2.jarファイルです
 
5コンパイルant
ソースコードsrcを他のnutch 1にコピーする.2でantでコンパイル
コンパイルが完了するとbuildフォルダに3つのファイルが生成されますnutch-1.2.job、nutch-1.2.jar、nutch-1.2.war.
この3つのファイルは、正式なオンライン上のNutchディレクトリの下にあるファイルを置き換えるために使用されます.本機でのみテストを行う場合は、ルートディレクトリの元の3つの同名ファイルの代わりに、この3つのファイルを使用します.その後nutch-1.2.war再配置.テストに成功しました.
 
6次の質問
再配置すると、検索時に空白のページが表示され、文や語が入力されてクエリーできないことがあります.
この場合、tomcat logを表示すると、次のヒントが表示されます.
org.apache.catalina.core.StandardWrapperValve invoke重大:サーブレットservice() for servlet jsp threw exceptionjava.lang.StringIndexOutOfBoundsException: String index out of range: -3
解決方法:
tomcatに配備されているnutchディレクトリの下でWEB-INFclassesに入ります
nutch-siteが見つかりました.xmlはここに以下のコードを追加すればよい.
<property> 

  <name>plugin.includes</name> 

  <value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-lucene|scoring-opic|urlnormalizer-(pass|regex|basic)</value> 

</property>