Archive for the ‘java’ Category

(转)lucene安装

Wednesday, January 31st, 2007

网上有许多的材料,中文材料大家看的都是车东的那篇(http://www.chedong.com/tech/.),而大家在网上讨论最多的是中文的全文检索,而对中文的全文检索最有影响力的文章,还是车东写的那篇weblucene(http://www.chedong.com/tech/weblucene.),但那些都是lucene1.2版本的事,现在不同了,lucene1.3-final据称完全支持中文的全文检索了。
因为在lucene1.3-final.zip包中的changes.txt中的第五项描述如下:
5. Fix StandardTokenizer’s handling of CJK characters (Chinese,
 Japanese and Korean ideograms). Previously contiguous sequences
 were combined in a single token, which is not very useful. Now
 each ideogram generates a separate token, which is more useful.
这说明lucene1.3-final可以检索中日韩等表意文字了。

测试一下:
测试环境: 2000 pro,jdk1.3.1或以上版本
1、下载-1.3-final.zip。

2、解压-1.3-final.zip,并将其中的-1.3-final.jar和-demos-1.3-final.jar加入到系统的classpath中。

3、建一个目录,并将一些或txt文件(文件内容要中文的!)拷入到这个目录中,作为全文检索的材料。如:建一个目录d:\lucenetest\index,在其中拷入一些中文内容的文件,其中也可以有多级子目录的。
OK,环境准备好了,可以试验了!

4、进入dos模式,输入命令: org.apache..demo.IndexFiles d:\lucenetest\index
如:c:\> org.apache..demo.IndexFiles d:\lucenetest\index 回车,这时会索引d:\lucenetest\index目录下的所有文件,包括子目录中的文件,并将索引文件写入:c:\index目录中(自动创建的,根据你的dos符起始路径,将在其下建index目录)。
好,索引建完了,下面试验检索。

5、输入命令: org.apache..demo.SearchFiles
如:c:\> org.apache..demo.SearchFiles 回车
Query:在这里输入检索内容,如:“建议最好自己先做一下语法检查”,这么长:)
成功了,结果出来了:
Searching for: “建 议 最 好 自 己 先 做 一 下 语 法 检 查”
1 total matching documents
0. d:\lucenetest\index\学习的一点心得.txt
可以看出-1.3-final完全支持中文的全文检索了,使用的是单字切分!!

为lucene加入简单中文分词

Wednesday, January 31st, 2007

看到很多人做的应用时候都要面临中文分词怎么加的问题,下面介绍一个简单的中文词库,这个词库附带相应的算法,数据结构学过的人看懂没什么问题,只要简单的构造一个对象,就可以分词了,对于不是太大的应用来说,还是相当可行的,点击下载
      该分词库使用很简单,先初试化该类
      ChineseSegmenter seg = ChineseSegmenter.getGBSegmenter();
      然后调用seg.segmentLine(”要分词的中文段”, ” “)//第二个参数为分词之间以什么间隔
      譬如
    输出为儿童 节日 儿童节   
    
     下面简要说以下如何加到搜索代码里,
      建立索引的代码引入的analysis分词法为 WhitespaceAnalyzer
      import org.apache..analysis.WhitespaceAnalyzer;

  IndexWriter writer = new IndexWriter(Directory, new WhitespaceAnalyzer(),true);     public void AddDocument(String Title , String Content , ..)
    {
        Document doc 
= new Document();
        
        ChineseSegmenter cs
= ChineseSegmenter.getGBSegmenter();    //初始化该类
        
            doc.add(Field.Text(
content, cs.segmentLine(Content,  ))); // 将分好的词写进索引 
    
            doc.add(Field.Text(
title, cs.segmentLine(Title,  )));        try
        {
            writer.addDocument(doc);
        }
        
catch(IOException e)
        {
            System.
out.println(wrong);
            e.printStackTrace();
        }
    }

        上面建立索引时候为把文章的标题和内容进行断词然后存入了索引, 搜索的时候同样用WhitespaceAnalyzer,
 然后把结果hit中的结果合并就可以了.

 public static void main(String[] args) throws Exception {      ChineseSegmenter seg = ChineseSegmenter.getGBSegmenter();
      System.
out.println(seg.segmentLine(儿童节日 ));
    
   }