admin管理员组文章数量:1794759
Lucene
庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。Paoding填补了国内中文分词方面开源组件的空白,致力于此并希翼成为互联网网站首选的中文分词开源组件。 Paoding中文分词追求分词的高效率和用户良好体验。Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。
引入隐喻,采用完全的面向对象设计,构思先进。
高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。
采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。
能够对未知的词汇进行合理解析。
缺点:官网:,跟不上Lucene的更新,可以找到支持Lucene4.8.*的Link:
一、下载Lucene(.8.1/lucene-4.8.1.zip),下载后解压,Lucene所需要的基本jar文件如下列表: lucene-core-4.8.1.jar Lucene核心jar lucene-analyzers-4.8.1.jar Lucene分词jar lucene-highlighter-4.8.1.jar Lucene高亮显示jar 二、由于Lucene中的中文分词实现不了我们所需要的功能,所以,需要下载第三方包(疱丁解牛) (1)下载支持Lucene4.8.*的Link: (2)修改pom.xml编译引用lib包lucene-4.8.1 (3)mvn package (4) 找到Lucene使用'疱丁'所需要的jar文件如下列表: paoding-analysis.jar Lucene针对中文分词需要jar commons-logging.jar 日志文件 {PADODING_HOME}/dic 疱丁解牛词典目录(PAODING_HOME:代表解压后的paoding目录) 三、打开Eclipse并创建一个Java Project(项目名称和项目所在的路径不能包含空格),本例中Project Name:Paoding 1_1:在Paoding Project 创建一个Folder--lib(用于存放所有的jar),把前面所说的jar文件拷贝到lib目录下,并把lib下所有的jar添加到项目ClassPath下. 1_2:拷贝{PAODING_HOME}/dic目录 至 Paoding项目/src下整个项目结构图如下: 四、创建TestFileIndex.java类,实现功能是:把./data/*.txt所有文件读入内存中,并写入索引目录(./luceneindex)下 TestFileIndex.javapackage com.wugang.paoding.index; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;public class TestFileIndex { public static void main(String[] args) throws Exception { String dataDir="data"; String indexDir="luceneindex"; File[] files=new File(dataDir).listFiles(); System.out.println(files.length); Analyzer analyzer=new PaodingAnalyzer(); Directory dir=FSDirectory.open(new File(indexDir)); IndexWriter writer=new IndexWriter(dir, new IndexWriterConfig(Version.LUCENE_48,analyzer)); for(int i=0;i<files.length;i++){ StringBuffer strBuffer=new StringBuffer(); String line=""; FileInputStream is=new FileInputStream(files[i].getCanonicalPath()); BufferedReader reader=new BufferedReader(new InputStreamReader(is,"utf8")); line=reader.readLine(); while(line != null){ strBuffer.append(line); strBuffer.append("\n"); line=reader.readLine(); } Document doc=new Document(); doc.add(new Field("fileName", files[i].getName(), Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("contents", strBuffer.toString(), Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); reader.close(); is.close(); } writer.commit(); writer.close(); dir.close(); System.out.println("ok"); }
}
五、创建TestFileSearcher.java,实现在的功能是:读取索引中的内容:
TestFileSearcerh.java
package com.wugang.paoding.index;import java.io.File;
import java.io.StringReader;
import java.util.Set;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Term;
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.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.util.AttributeImpl;public class TestFileSearcher {public static void main(String[] args) throws Exception {String indexDir = "luceneindex";Analyzer analyzer = new PaodingAnalyzer();String search_text = "六小龄童的眼睛和耳朵变成小和尚";StringReader reader = new StringReader(search_text);TokenStream ts = analyzer.tokenStream(search_text, reader);boolean hasnext = ts.incrementToken();while (hasnext) {CharTermAttribute ta = ts.getAttribute(CharTermAttribute.class);System.out.print(ta.toString() + " ");hasnext = ts.incrementToken();}ts.close();Directory dir = FSDirectory.open(new File(indexDir));DirectoryReader dr = DirectoryReader.open(dir);IndexSearcher searcher = new IndexSearcher(dr);QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",analyzer); Query query = parser.parse(search_text);//Term term=new Term("contents", search_text);//TermQuery query=new TermQuery(term);System.out.println("\n"+ query.toString()); TopDocs docs = searcher.search(query, 1000);ScoreDoc[] hits = docs.scoreDocs;System.out.println(hits.length);for (int i = 0; i < hits.length; i++) {Document doc = searcher.doc(hits[i].doc);System.out.print(doc.get("fileName") + "--:\n");System.out.println(doc.get("contents") + "\n");}// searcher.close();dir.close();}
}
参考:
本文标签: Lucene
版权声明:本文标题:Lucene 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1692961495a226953.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论