Ubuntu环境下Nutch1.2 二次开发(添加中文分词)
2015-01-22 20:40
405 查看
前提nutch1.2已部署到eclipse中
详见:/article/4659281.html
1 部署IKAnalyzer3.2.8
1.1 下载IKAnalyzer3.2.8
1.2 将IKAnalyzer3.2.8复制到nutch/lib中,并在eclipse中添加该jar
2 修改analysis源码
2.1 在src/java/org/apache/nutch/analysis包下找到NutchAnalysis.jj
(1)在 PARSER_BEGIN(NutchAnalysis)部分的导入声明中增加:
(2)在 TOKEN_MGR_DECLS中增加:
(3)在 TOKEN 部分,找到| <SIGRAM: <CJK> >,这代表按字划分,修改为| <SIGRAM: (<CJK>)+ >
再在后面加上:
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异常捕捉命令
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;后面加上:
在ANCHOR_ANALYZER = new AnchorAnalyzer();后面加上:
把 tokenStream修改为:
(2)修改nutch/build.xml
在 <target name="war" depends="jar,compile,generate-docs"></target>的<lib>< /lib>之间<include name="log4j-*.jar"/> 下,加入下面的命令使的编译war文件的时候加入je-analysis的jar文件,注意IKAnalyzer3.2.8.jar的版本号
修 改<targe tname="job" depends="compile">,改为<target name="job" depends="compile,war">这样编译后能自动在bulid文件夹下生成nutch-1.2.job,nutch- 1.2.war,nutch-1.2.jar文件了
5 编译ant
把源码src复制到其他的nutch1.2中,再用ant编译
编译完成后在build文件夹中会生成三个文件,nutch-1.2.job、nutch-1.2.jar、nutch-1.2.war。
这三个文件用来替换你正式线上的Nutch目录下的文件。如果你只在本机做测试,那就用这三个文件代替根目录下的原来的三个同名文件即可。之后将nutch-1.2.war重新部署。测试成功。
6 后续问题
在重新部署后,你在搜索时会发现有时会出先空白页,有的句子、词输入进去无法查询。
针对与这个情况,查看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 在这里添加如下代码即可。
详见:/article/4659281.html
1 部署IKAnalyzer3.2.8
1.1 下载IKAnalyzer3.2.8
1.2 将IKAnalyzer3.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 部分,找到| <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; } }
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异常捕捉命令
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
在 <target name="war" depends="jar,compile,generate-docs"></target>的<lib>< /lib>之间<include name="log4j-*.jar"/> 下,加入下面的命令使的编译war文件的时候加入je-analysis的jar文件,注意IKAnalyzer3.2.8.jar的版本号
<include name="IKAnalyzer3.2.8.jar"/>
修 改<targe tname="job" depends="compile">,改为<target name="job" depends="compile,war">这样编译后能自动在bulid文件夹下生成nutch-1.2.job,nutch- 1.2.war,nutch-1.2.jar文件了
5 编译ant
把源码src复制到其他的nutch1.2中,再用ant编译
编译完成后在build文件夹中会生成三个文件,nutch-1.2.job、nutch-1.2.jar、nutch-1.2.war。
这三个文件用来替换你正式线上的Nutch目录下的文件。如果你只在本机做测试,那就用这三个文件代替根目录下的原来的三个同名文件即可。之后将nutch-1.2.war重新部署。测试成功。
6 后续问题
在重新部署后,你在搜索时会发现有时会出先空白页,有的句子、词输入进去无法查询。
针对与这个情况,查看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>
相关文章推荐
- Nutch1.2 添加IKAnalyzer中文分词
- ubuntu安装Android开发环境配置exit code = 13错误安装中文输入法及调整屏幕大小及添加快捷键到右边栏
- Nutch1.2 添加IKAnalyzer中文分词
- Nutch-1.2添加中文分词ICTCLAS以及常见问题解答
- WinXP+cygwin+eclipse配置nutch-1.2,添加IKAnalyzer中文分词
- Ubuntu+Eclipse+Jboss+EJB3 搭建开发环境 and Ubuntu系统安装安装模拟器(Android SDK)的方法 and 安装英汉词典 and 中文输入法
- 为Nutch 1.0添加JE中文分词
- Nutch1.2增加IKAnalyzer中文分词
- 为nutch 添加中文分词插件
- nutch 1.2 war的二次开发 第一步,重新编写首页
- nutch二次开发环境搭建
- 中文分词---2011-10-25 22:42 Lucene分词实现(二次开发流程)
- ubuntu下为lazarus添加sqlite3开发环境
- 为nutch 添加中文分词插件
- Ubuntu中没用自带C/C++开发环境,需要用户自己配置。在UBUNTU中文论坛中的一些帖子集合。
- *在ubuntu上搭建开发环境10---英文版ubuntu安装中文输入法
- Ubuntu下经典JAVA开发环境搭建 以及 Ubuntu中如何在桌面、启动面板以及应用程序菜单上添加图标
- Nutch1.2二次开发(关于中文分词)
- java开发环境搭建---如何给eclipse添加中文包(三)
- Nutch成功添加中文分词