前提nutch1.2已部署到eclipse中

详见:http://www.cnblogs.com/cy163/archive/2013/02/19/2916419.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 = ;//中文片段的起始位置定义

(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();
else
termAtt = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (termAtt == null || termAtt.term().equals("")) {
stream = null;
cjkStartOffset = ;
}
}

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>

Ubuntu环境下Nutch1.2 二次开发(添加中文分词)的更多相关文章

  1. VB6.0环境下的CATIA二次开发简介

    CATIA作为CAD/CAE/CAM/PDM一体化的软件,广泛用于航空航天.汽车.船舶及电子工业,尤其在航空航天业,有八成以上厂商使用CATIA的市场[11].然而由于使用习惯和使用的侧重点不用,功能 ...

  2. JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误

    问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabi ...

  3. 搭建eclipse环境下 Nutch+Mysql 二次开发环境

    最近看了下Nutch,目前Nutch最新版本2.3.1,支持Hbase.MongoDB等存储,但在搭建和测试过程中发现对Mysql 的支持好像有点问题. 后来将Nutch版本改为2.2.1.基于Nut ...

  4. Ubuntu环境下配置Android Studio【转】

    本文转载自:https://www.jianshu.com/p/1f6295f9c955 之前学习Android开发的时候,一直跟各种教程一样,使用的是Eclipse+ADT,主要是比较方便,容易上手 ...

  5. Linux(Ubuntu)环境下使用Fiddler

    自己的开发环境是Ubuntu, 对于很多优秀的软件但是又没有Linux版本这件事,还是有点遗憾的.比如最近遇到一个问题,在分析某个网站的请求路径和cookie时就遇到了问题.本来Chome浏览器自带的 ...

  6. Ubuntu环境下SSH的安装及使用

    Ubuntu环境下SSH的安装及使用 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 .SSH的简介和工作机制可参看上篇文章SSH简介及工作机 ...

  7. ubuntu 环境下的QT程序打包

    很多的时候 需要将自己写的QT 程序发布一下  所以今天教一下 怎么在ubuntu 环境下将自己的写的Qt 程序打包打包是为了不依赖 开发环境 和开发的库. 1. QtCreate使用Release版 ...

  8. ubuntu环境下eclipse的安装以及hadoop插件的配置

    ubuntu环境下eclipse的安装以及hadoop插件的配置 一.eclipse的安装 在ubuntu桌面模式下,点击任务栏中的ubuntu软件中心,在搜索栏搜索eclipse 注意:安装过程需要 ...

  9. 在Ubuntu环境下配置Proxmark3(PM3)使用环境

    参考资料:PM3官方Wiki 因为国内网络上大多是在Kali系统上使用PM3的教程(链接1.链接2.链接3),而这些教程的步骤对于Ubuntu系统并不完全适用.所以写下本文,记录我个人的安装经历. 本 ...

随机推荐

  1. VMWare 不能识别SD卡

    打开service

  2. hadoop2.2.0伪分布式搭建

    1.准备Linux环境     1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ...

  3. 将double类型的值保留几位小数

    1.第一个参数(3.1415926)是要处理的数值.第二个参数(1)为要保留的几位小数.第三个参数是按照“四舍五入”还是"直接取这一位的值"(MidpointRounding.To ...

  4. Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装

     Hadoop介绍 Hadoop是一个能对大量数据进行分布式处理的软件框架.其基本的组成包括hdfs分布式文件系统和可以运行在hdfs文件系统上的MapReduce编程模型,以及基于hdfs和MapR ...

  5. Spark菜鸟学习营Day3 RDD编程进阶

    Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...

  6. CentOS 6.4 安装搭建 Scrapy 0.22 环境

    一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...

  7. 【Web学习日记】——C#引用WebService,从配置文件改变引用地址

    开发环境:Win7 32位,开发工具:VS2013,.Net:4.0 初用WebService,很多地方都搞不清楚怎么回事,但稍作研究之后,也就用上了,根本就没有考虑后续事情. 但是,随着项目的进行, ...

  8. Windows7 sp1 64位下安装配置eclipse+jdk+CDT+minGW

    需要的工具: jdk-7u11-windows-x64.exe  eclipse-SDK-4.2.2-win32-x86_64.zip cdt-master-8.1.2.zip mingw-get-i ...

  9. c语言调试接口

    http://blog.chinaunix.net/uid-10106787-id-2985587.html 在C语言程序设计中,常会出现各种各样的bug:段错误.参数异常等等.我们需要尽快定位错误, ...

  10. 还原没有日志文件的SQL数据库

    1.执行命令示例: EXEC sys.sp_attach_db @dbname = 'AdventrueWorks2012_Data',     @filename1 = N'C:\Program F ...