Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)4

简介: Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)1 Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)2 Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)3 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).先把工程刷新一下。

image

(2).右键工程名->build path –> configure build path

image

(3).在Libraries选项卡中点击add Jars,然后在你的工程的目录下lib文件中选择刚刚添加的IKAnalyzer3.2.8.jar。

image

<1>.在src/java/org/apache/nutch/analysis包下找到NutchAnalysis.jj

image

(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异常捕捉命令(详情见图)

image

image

(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>

目录
相关文章
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
356 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
206 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
405 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
4天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
204 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1363 8
|
9天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。