永发信息网

java 怎么用lucenes进行分词

答案:2  悬赏:10  手机版
解决时间 2021-02-12 15:46
java 怎么用lucenes进行分词
最佳答案
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.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
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.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;


public class LuceneIndexAndSearchDemo {


public static void main(String[] args){
//Lucene Document的域名
String fieldName = "text";
//检索内容
String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。";

//实例化IKAnalyzer分词器
Analyzer analyzer = new IKAnalyzer(true);

Directory directory = null;
IndexWriter iwriter = null;
IndexReader ireader = null;
IndexSearcher isearcher = null;
try {
//建立内存索引对象
directory = new RAMDirectory();

//配置IndexWriterConfig
IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_40 , analyzer);
iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
iwriter = new IndexWriter(directory , iwConfig);
//写入索引
Document doc = new Document();
doc.add(new StringField("ID", "10000", Field.Store.YES));
doc.add(new TextField(fieldName, text, Field.Store.YES));
iwriter.addDocument(doc);
iwriter.close();

//搜索过程**********************************
//实例化搜索器
ireader = DirectoryReader.open(directory);
isearcher = new IndexSearcher(ireader);

String keyword = "中文分词工具包";
//使用QueryParser查询分析器构造Query对象
QueryParser qp = new QueryParser(Version.LUCENE_40, fieldName, analyzer);
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = qp.parse(keyword);
System.out.println("Query = " + query);

//搜索相似度最高的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();
} catch (ParseException e) {
e.printStackTrace();
} finally{
if(ireader != null){
try {
ireader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(directory != null){
try {
directory.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
全部回答
&gt;&gt;&gt;seg_list = jieba.cut(&quot;他来到了网易杭研大厦&quot;) &gt;&gt;&gt;print &quot;, &quot;.join(seg_list) 他, 来到, 了, 网易, 杭研, 大厦 这是python版的使用示例
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
报什村地址有知道的么?有点事想过去
为进一步扎实有效地开展阳光体育运动,保证学
皇家宝贝儿童摄影·游泳我想知道这个在什么地
浅论骑行手套(半指和全指)的区别和作用
什奋村地址有知道的么?有点事想过去
战锤40K星际战士 画面很卡 玩一会儿就卡
“知章骑马似乘船“这首诗词怎么解释,谢
下列关于计算加权平均资本成本的说法中,正确
金庸群侠传苍龙逐日为什么推荐用毒啊?
跨境金融 离岸金融 用什么词可以包住
三弓村怎么去啊,我要去那办事
打lol能使用赛扬j1800处理器吗?把特效人物细
为什么csol选频道时卡了几下就进不去了
当今世界上,最值得尊敬的人,配做偶像的人应
田滚村地址在哪,我要去那里办事
推荐资讯
中国电信梨树湾店在什么地方啊,我要过去处理
余香酒楼地址有知道的么?有点事想过去
穿越火线在登陆进入游戏后,还没进入选择服务
【杯水车薪】杯水车薪与何人有关?
合营企业外方投资者以现金出资时,应当以外币
古代神话所说的十神器究竟指的是哪些
与醉酒相关的成语
京都清吧KyotoBar地址在哪,我要去那里办事
彡是什么意思
亦涛电气焊机床加工地址在哪,我要去那里办事
桦南县体育局地址在什么地方,我要处理点事
天兴大药房长松路店在什么地方啊,我要过去处
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?