admin管理员组

文章数量:1794759

Lucene

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.java  
package 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