Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)4
Cygwin,Nutch安裝配置,檢驗是否正確(對網友守望者博客的修改---在此感謝守望者)1
Cygwin,Nutch安裝配置,檢驗是否正確(對網友守望者博客的修改---在此感謝守望者)2
Cygwin,Nutch安裝配置,檢驗是否正確(對網友守望者博客的修改---在此感謝守望者)3
Cygwin,Nutch安裝配置,檢驗是否正確(對網友守望者博客的修改---在此感謝守望者)4
一、開發環境介紹(以我個人為例):
個人開發端:windows Server 2003 + Cygwin + Eclipse3.2
二、準備工作:
<1>.將Nutch導入eclipse,導入過程詳情請點擊查看文章
<2>.下載IKAnalyzer(http://code.google.com/p/ik-analyzer/downloads/list),本文采用的IKAnalyzer版本是3.2.8
<3>.下載Ant(http://ant.apache.org/bindownload.cgi)
<4>.下載Javacc(http://javacc.java.net/)
三、具體步驟:
注:在進行這些操作的之前請先將IKAnalyzer復制到nutch\lib文件夾下
并在eclipse的Nutch項目中添加這個jar包。
過程如下:
(1).先把工程刷新一下。
(2).右鍵工程名->build path –> configure build path
(3).在Libraries選項卡中點擊add Jars,然后在你的工程的目錄下lib文件中選擇剛剛添加的IKAnalyzer3.2.8.jar。
<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 : { 部分,找到| <SIGRAM: <CJK> >,這代表按字劃分,修改為| <SIGRAM: (<CJK>)+ >
并在其后面加上
{?
??? if (stream == null) {?
??????????????? stream? = new IKTokenizer(new StringReader(image.toString()),true);?
??????????????? //stream = Analyzer.tokenStream("",new StringReader(image.toString()));?
??????????????? cjkStartOffset = matchedToken.beginColumn;?
??????????????? try {?
??????????????????? stream.reset();?
??????????????? } catch (IOException e) {?
??????????????????? e.printStackTrace();?
??????????????? }?
??????????????? termAtt = (TermAttribute) stream.addAttribute(TermAttribute.class);?
??????????????? offAtt = (OffsetAttribute) stream.addAttribute(OffsetAttribute.class);?
??????????????? try {?
??????????????????? if (stream.incrementToken() == false)?
??????????????????????? termAtt = null;?
??????????????? } catch (IOException e) {?
??????????????????? // TODO Auto-generated catch block?
??????????????????? e.printStackTrace();?
??????????????? }?
??????????? }?
??????????? if (termAtt != null && !termAtt.term().equals("")) {?
??????????????? matchedToken.image = termAtt.term();?
??????????????? matchedToken.beginColumn = cjkStartOffset + offAtt.startOffset();?
??????????????? matchedToken.endColumn = cjkStartOffset + offAtt.endOffset();?
??????????????? try {?
??????????????????? if (stream.incrementToken() != false)?
??????????????????????? input_stream.backup(1);?
??????????????????? else?
??????????????????????? termAtt = null;?
??????????????? } catch (IOException e) {?
??????????????????? e.printStackTrace();?
??????????????? }?
??????????? }?
??????????? if (termAtt == null || termAtt.term().equals("")) {?
??????????????? stream = null;?
??????????????? cjkStartOffset = 0;?
??????????? }?
}
(4).將NutchAnalysis.jj復制到其他目錄下,進行Javacc編譯.
用javacc工具生成NutchAnalysis.jj的源代碼,將生成的所有java源代碼(7個文件)全部覆蓋到 src/java/org/apache/nutch/analysis包下.
javacc的使用方法:cmd進入命令行,切換到NutchAnalysis.jj所在目錄(最后把它拷貝到其它目錄進行編譯,如D盤),D:輸入命令
javacc NutchAnalysis.jj
就會生成7個文件了。
(5).此時NutchAnalysis.java會報錯
在兩個位置加入ParseException異常捕捉命令(詳情見圖)
(6).修改完上面的你會發現org.apache.nutch.searcher包中的Query.java報錯。
解決方法是找到報錯的地方用try{}catch(){}語句抓住異常,不要拋出,否則接下來還要改很多文件。
<2>.修改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;
}
<3>.修改nutch/build.xml
(1).在 <target name="war" depends="jar,compile,generate-docs"></target>的<lib></lib>之間<include name="log4j-*.jar"/> 下(約200行),加入下面的命令使的編譯war文件的時候加入je-analysis的jar文件,注意IKAnalyzer3.2.8.jar的版本號
<include name="IKAnalyzer3.2.8.jar"/>
(2).修改<targe tname="job" depends="compile">,改為<target name="job" depends="compile,war">這樣編譯后能自動在bulid文件夾下生成nutch-1.2.job,nutch-1.2.war,nutch-1.2.jar文件了。(注:不這樣也可以,最后直接ant war, ant jar 就能生成nutch-1.2.war,nutch-1.2.jar)
<4>.Ant
cmd進入命令行,切換到nutch所在目錄,執行ant命令,就會開始ant工作。完成后會在nutch目錄下生成build目錄。
在build文件夾中會生成三個文件,nutch-1.2.job、nutch-1.2.jar、nutch-1.2.war。
這三個文件用來替換你正式線上的Nutch目錄下的文件。如果你只在本機做測試,那就用這三個文件代替根目錄下的原來的三個同名文件即可。之后將nutch-1.2.war重新部署。測試成功。
<5>.分詞后出現的問題
在重新部署后,你在搜索時會發現有時會出先空白頁,有的句子、詞輸入進去無法查詢。
針對與這個情況,查看tomcat log發現如下提示:
org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet jsp threw exception
java.lang.StringIndexOutOfBoundsException: String index out of range: -3
解決方法:
在tomcat中部署的nutch目錄下進入WEB-INF\classes
找到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>
總結
以上是生活随笔為你收集整理的Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挂盘什么意思
- 下一篇: JNI方面的笔记(未完待续)