Nutch1.2 添加IKAnalyzer中文分词

news/2024/7/4 5:22:48 标签: ant, tomcat, 工具, 2010, build, null
   原版nutch中对中文的处理是按字划分,而不是按词划分,我们可以为其添加一些中文分词插件,例如IKAnalyzer。参看了网上很多教程,最后也没能成功,最后综合了几个教程的内容,最终成功。
首先作以下几点说明,以方便理解:
(1)目前,Nutch中文分词方式大致有两种方式:
一是修改源代码。这种方式是直接对Nutch分词处理类进行修改,调用已写好的一些分词组件进行分词。
二是编写分词插件。这种方式是按照Nutch定义的插件编写规则重新编写或者添加中文分词插件。
以上两种方式都是可取的。目前,由于开源社区的活跃,已经有很多种分词组件的出现,无论是修改源代码的方式还是编写分词插件的方式,都是依赖于这些分词组件的。如IK、JE、庖丁等。
(2)NutchAnalysis.jj文件用于搜索时;NutchDocumentAnalyzer.java  用于索引时。
(3)用到了javacc、ant两种工具。javacc用于编译NutchAnalysis.jj文件,该文件最好拷贝到其它目录编译,编译后再把生成的7个文件拷贝回原目录,如果在原目录下编译的话只会生成4个文件。
(4)build.xml文件是ant的配置文件
(5)ant、javacc工具的使用方法类似,解压后把bin目录的路径加到系统目录(path)中,重启计算机即可。详看: Ant、Javacc 等安装与使用
 
好了,下面是具体过程:
一、准备工作:  
把IKAnalyzer3.2.8.jar文件拷入nutch/lib目录下
 
二、代码修改:
1. NutchAnalysis.jj
在nutch/src/java/org/apache/nutch/analysis目录
在该文件里找到  <SIGRAM:  <CJK>  >,这代表按字划分,修改为  <SIGRAM:  (<CJK>)+  >
用javacc工具生成NutchAnalysis.jj的源代码,将生成的所有java源代码(7个文件)全部覆盖到  src/java/org/apache/nutch/analysis包下.
javacc的使用方法:cmd进入命令行,切换到NutchAnalysis.jj所在目录(最后把它拷贝到其它目录进行编译,如D盘),D:,输入命令
javacc  NutchAnalysis.jj
就会生成7个文件了。
 
2. NutchAnalysis.java
在nutch/src/java/org/apache/nutch/analysis目录
(1)在import区域加入下面的代码(不确定需不需要这步)
import  org.wltea.analyzer.lucene.IKTokenizer;
(2)在两个位置加入ParseException异常捕捉命令,否则ant时会提示。下面的代码已经添加
view plain
  1. public static Query parseQuery(String queryString, Configuration conf) throws IOException,ParseException  
  2.     return parseQuery(queryString, nullconf);  
  3.    
  view plain
  1. public static Query parseQuery(String queryString, Analyzer analyzer, Configuration conf)  
  2.     throws IOException,ParseException  
  3.     NutchAnalysis parser new NutchAnalysis(  
  4.           queryString, (analyzer != nullanalyzer new NutchDocumentAnalyzer(conf));  
  5.     parser.queryString queryString;  
  6.     parser.queryFilters new QueryFilters(conf);  
  7.     return parser.parse(conf);  
  8.    
   
3. NutchDocumentAnalyzer.java
(1)引入IK包
import  org.wltea.analyzer.lucene.IKAnalyzer;  //tjt  update
import  org.apache.lucene.analysis.tokenattributes.*;
(2)修改public  TokenStream  tokenStream(String  fieldName,  Reader  reader)  {函数为:
view plain
  1. public TokenStream tokenStream(String fieldName, Reader reader)  
  2.      
  3.     Analyzer analyzer new org.wltea.analyzer.lucene.IKAnalyzer();  
  4.     return analyzer.tokenStream(fieldName, reader);  
  5.    
   
4. 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)
 
5. ant
cmd进入命令行,切换到nutch所在目录,执行ant命令,就会开始ant工作。完成后会在nutch目录下生成build目录
 
6.文件替换
(1)将build/nutch-1.2.job替换nutch目录下文件
(2)将build/nutch-1.2.jar替换nutch目录下文件
(3)将build/nutch-1.2.war替换nutch目录下文件,这步不需要的
注:如果ant后没有在build目录下生成nutch-1.2.jar和nutch-1.2.war文件,则命令行执行命令  ant  jar  和  ant  war生成这两个文件
 
7. 重新爬行与建立索引
注意需要配置好环境(conf/nutch-site.xml,crawl-urlfilter.txt,urls目录等,详看 环境配置
bin/nutch  crawl  urls  -dir  csdn  -threads  -depth  -topN  30    爬行
bin/nutch  org.apache.nutch.searcher.NutchBean  csdn      检索
 
8.查看结果
用Luke查看索引,如果已变成词组,则索引成功;也可以直接用Nutch自带的NutchBean命令检索网页中含有的词组,如果有结果说明成功,如 
bin/nutch  org.apache.nutch.searcher.NutchBean  '引擎' 
注:需要在conf/nutch-site.xml文件中如下配置,E:/nutch/csdn为搜索结果目录
<property>
<name>searcher.dir</name>
<value>E:/nutch/csdn</value>
<description></description>
</property>
 
9.Tomcat搜索
(1)将新生成的nutch-1.2.war拷贝到Tomcat  7.0/webapps目录,启动Tomcat服务后,会自动在该目录下生成一个nutch文件夹。
(2)将新生成的nutch-1.2.jar文件和分词包(IKAnalyzer3.2.8.jar)拷贝到tomcat中WEB-INF/lib下面
(3) http://localhost:8080/nutch   搜索测试
注意:Tomcat/webapps/nutch/WEB-INF/classes/nutch-site.xml  配置
 
其它说明:
(1)关于NutchDocumentAnalyzer的修改,网上有分成多步骤的,一开始我也没搞清楚哪个对,仔细看了下,发现是一样的,只是把变量定义等单独成一行命令而已。 http://blog.csdn.net/laigood12345/archive/2010/12/12/6071046.aspx
  (2)上面的步骤是直接修改源码方式的,其它的还有插件方式的,如例子 http://blog.csdn.net/oprah_7/archive/2011/03/09/6234296.aspx
 
以下参考自:       
讓  Nutch  支援中文分詞  方法教學  Nutch  1.0  IK-Analyzer  3.1.6  中文分詞庫 http://trac.nchc.org.tw/cloud/wiki/waue/2010/0715
已不能访问,可以到我的百度文库查看
 
選項:加入字典檔
        將  nutch-*.job  的檔案,用zip  工具解開,並將以下兩個檔案放入nutch-*.job  中即可
        IKAnalyzer.cfg.xml
        <properties>   
            <comment>IK  Analyzer</comment>
            <entry  key="ext_dict">/mydic.dic</entry> 
        </properties>
        mydic.doc
        國家高速
        國家高速網路
        國家高速網路與計算中心
 
网上略显麻烦的或错误的资讯:
(1)将build/classes打包成nutch-1.2.jar
cd  $nutch-1.0/build/classes
jar  cvf  nutch-1.0-ika.jar  .
或者(jar  cvf  e:/nutch/build/classes)
麻烦,可以直接用ant  jar命令,或者按第4步第(2)小步的操作进行
(2)即使用原始的nutch所crawl下來的資料,將  重編後的nutch-1.0.jar  nutch-1.0.job  IKAnalyzer3.1.6  正確放到你原本的nutch搜尋網頁中,重新啟動tomcat後,也可直接享用有分詞的結果  (不正確) 
(3)將  IKAnalyzer3.1.6GA.jar  的  /org/wltea/analyzer/dic/  資料夾內  ,放入你要得字典檔,可以參考同資料夾內的  main.dic  (不正確,沒用) 
 
参考资料:
1.  讓  Nutch  支援中文分詞  方法教學  Nutch  1.0  IK-Analyzer  3.1.6  中文分詞庫
http://trac.nchc.org.tw/cloud/wiki/waue/2010/0715
 
2.Nutch1.2增加IKAnalyzer中文分词
http://blog.csdn.net/laigood12345/archive/2010/12/12/6071046.aspx
 
3.  Nutch中文分词  (插件方式JE分词)
http://blog.csdn.net/oprah_7/archive/2011/03/09/6234296.aspx
 
4.  Nutch  分词  中文分词  paoding  疱丁  (插件方式)
http://blog.csdn.net/mutou12456/archive/2010/04/01/5439935.aspx
 
5.  为Nutch  1.0添加JE中文分词  (修改源码)
http://yjiezhao.blog.163.com/blog/static/115232239200910198383717 9/
 
Nutch中文分词IK-Analyzer搜索修改问题在创建index  索引的时候已经把  分词加进去了
Java  code         IndexWriter indexWrite  =   new  IndexWriter(indexDir,                 new  StandardAnalyzer(),  true );


而在搜索时,在创建  query  时也要把这个分词加进去,而且这个分词必须要和你创建索引时用的一样才可以
Java  code    String[] fields  =   " title " " body "  };                 BooleanClause.Occur[] clauses  =  BooleanClause.Occur.SHOULD,                BooleanClause.Occur.SHOULD };                 Query query  =  MultiFieldQueryParser.parse(searchString, fields,                clauses,  new  StandardAnalyzer());

http://www.niftyadmin.cn/n/1760302.html

相关文章

高并发秒杀业务 WEB层

WEB层 前端页面流程 详情页流程逻辑 Restful接口设计 是一种优雅的URL表述方式&#xff0c;资源的状态和状态转移 整合SpringMVC框架 在web.xml配置前端控制器&#xff0c;加载配置文件 <?xml version"1.0" encoding"UTF-8"?> <web-app …

冲刺会议第三天

昨天&#xff1a;界面资料查询 今天&#xff1a;优化界面设计 增加更多按钮 明天&#xff1a;尝试连接数据库 转载于:https://www.cnblogs.com/lisu123/p/10061049.html

Nutch 二次开发总结 - Nutch查询分析得出的结论

Nutch构建好了一种搜索引擎架构&#xff0c;在此基础上可以进行二次开发&#xff0c;实现个人规模的搜索引擎、企业局域网搜索引擎、对整个WEB的搜索引擎等不同规模的搜索引擎。另外还可以为达到一些特殊的目的建立起的搜索引擎。不论是建立何种规模的搜索引擎&#xff0c;一般…

巨思维题

题目链接&#xff1a; https://codeforces.com/contest/1082/problem/B 题目意思&#xff1a; 给定字符串长度&#xff0c;再输入该长度的字符串&#xff08;只包含G和S&#xff09;,求交换一次两个字符位置后得到的G的最大连续长度。 题目思路&#xff1a; 统计连续的G数目&am…

2021-09-16sizeof与strlen的区别

char str[20]“0123456789”; int astrlen(str); /*a10;strlen 计算字符串的长度&#xff0c;以\0’为字符串结束标记。 int bsizeof(str); /*b20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小&#xff0c;不受里面存储的内容影响 char *str1“absde”; char str…

Nutch 使用总结

Nutch 目录结构&#xff1a;在bin文件夹下存放的是用于命令行运行的文件&#xff1b;Nutch的配置文件都放在了conf下&#xff0c;lib是一些运行所需要的jar文件&#xff1b;plugins下存放的相应的插件&#xff1b;在src文件夹中的是Nutch的所有源文件&#xff1b;webapps文件夹…

Java高并发秒杀优化

高并发优化分析 高并发发生在哪里 红色区域都是高并发发生的点 为什么要单独获取系统时间 因为detail页和他的静态化资源都放在CDN上&#xff0c;所以访问的时候就不再请求我们的服务器&#xff0c;也就不能拿到系统时间&#xff0c;所以要有一个接口来返回系统时间 什么是C…

nutch1.2 eclipse tomcat6.0 配置

1.安装cygwin&#xff08;windows下跑linux环境的软件&#xff09;&#xff0c;地址http://www.cygwin.com/&#xff0c;可以在线安装或下载到本地 我使用的我们的校内软件下载资源进行的下载和安装&#xff0c;镜像选用的http://mirrors.163.com/cygwin/ 速度出奇的快&#…