IK Analyzer 3 中文分词器的学习笔记

本文介绍如何使用IKAnalyzer进行中文分词,包括建立内存索引、使用IKSimilarity评估器以及通过IKQueryParser构造Query对象进行查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 下载地址:http://code.google.com/p/ik-analyzer

package com.yycs.lucene;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

public class IKAnalyzerDemo {

	public static void main(String[] args) {
		
		//Lucene Document的域名   
        String fieldName = "text";   
         //检索内容   
        String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。";   
           
        //实例化IKAnalyzer分词器   
        Analyzer analyzer = new IKAnalyzer();   
  
        Directory directory = null;   
        IndexWriter iwriter = null;   
        IndexSearcher isearcher = null;   
        try {   
            //建立内存索引对象   
            directory = new RAMDirectory();     
            iwriter = new IndexWriter(directory, analyzer, true , IndexWriter.MaxFieldLength.LIMITED);   
            Document doc = new Document();   
            doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED));   
            iwriter.addDocument(doc);   
            iwriter.close();   
               
            //实例化搜索器      
            isearcher = new IndexSearcher(directory);              
            //在索引器中使用IKSimilarity相似度评估器   
            isearcher.setSimilarity(new IKSimilarity());   
               
            String keyword = "中文分词工具包";   
               
            //使用IKQueryParser查询分析器构造Query对象   
            Query query = IKQueryParser.parse(fieldName, keyword);   
               
            //搜索相似度最高的5条记录   
            TopDocs topDocs = isearcher.search(query , 5);   
            System.out.println("命中:" + topDocs.totalHits);   
            //输出结果   
            ScoreDoc[] scoreDocs = topDocs.scoreDocs;   
            for (int i = 0; i < topDocs.totalHits; i++){   
                Document targetDoc = isearcher.doc(scoreDocs[i].doc);   
                System.out.println("内容:" + targetDoc.toString());   
            }              
               
        } catch (CorruptIndexException e) {   
            e.printStackTrace();   
        } catch (LockObtainFailedException e) {   
            e.printStackTrace();   
        } catch (IOException e) {   
            e.printStackTrace();   
        } finally{   
            if(isearcher != null){   
                try {   
                    isearcher.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
            }   
            if(directory != null){   
                try {   
                    directory.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
            }   
        } 
	}
}


使用的Jar包:

IKAnalyzer3.2.5Stable.jar

lucene-core-3.0.2.jar

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值