`
deepfuture
  • 浏览: 4397145 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80019
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69953
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103276
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285481
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14999
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67479
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32088
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45961
社区版块
存档分类
最新评论

lucene-JE中文分词

阅读更多

1、比较好的JAVA写的JE分词http://jesoft.cn:9080/je-analysis-1.5.3.jar,官网http://www.jesoft.cn/

2、提供相关的API

//采用正向最大匹配的中文分词算法,相当于分词粒度等于0
MMAnalyzer analyzer = new MMAnalyzer();

//参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来
MMAnalyzer analyzer = new MMAnalyzer(int wordLength);

//字符串切分,常用于客户的关键字输入
analyzer.segment(String text, String separator);


词典维护API(静态方法):

//增加一个新词典,采用每行一个词的读取方式(注意:多线程状态下此时的分词效果将不可预料)
MMAnalyzer.addDictionary(Reader reader);

//增加一个新词
MMAnalyzer.addWord(String newWord);

//删除词库中的全部词语(注意:非常危险的操作,在没有加载新的词库前所有的分词都将失效)
MMAnalyzer.clear();

//词库中是否包含该词
MMAnalyzer.contains(String word);

//从词库中移除该词
MMAnalyzer.removeWord(String word);

//当前词库中包含的词语总数
MMAnalyzer.size();

3、使用说明

 

符串切分  
package demo.analysis;  
 
import java.io.IOException;  
 
import jeasy.analysis.MMAnalyzer;  
 
public class Segment  
{  
 
public static void main(String[] args)  
{  
String text = "据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,"  
+ "日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,"  
+ "20000余人受伤,近20万人无家可归。";  
 
MMAnalyzer analyzer = new MMAnalyzer();  
try  
{  
System.out.println(analyzer.segment(text, " | "));  
}  
catch (IOException e)  
{  
e.printStackTrace();  
}  
}  
}  
 
生成效果:  
   
据 | 路透社 | 报道 | 印度尼西亚 | 社会 | 事务 | 部 | 官员 | 星期二 | 29日 | 表示 | 日惹 | 市 |
附近 | 当地时间 | 27日 | 晨 | 5时 | 53分 | 发生 | 里氏 | 6.2级 | 地震 | 已经 | 造成 | 至少 |
5427人 | 死亡 | 20000 | 余人 | 受伤 | 近 | 20万人 | 无家可归 |
 
Lucene搜索  
package demo.analysis;  
 
import jeasy.analysis.MMAnalyzer;  
 
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.queryParser.QueryParser;  
import org.apache.lucene.search.Hits;  
import org.apache.lucene.search.IndexSearcher;  
import org.apache.lucene.search.Query;  
import org.apache.lucene.store.Directory;  
import org.apache.lucene.store.RAMDirectory;  
 
public class Segment  
{  
 
public static void main(String[] args)  
{  
String fieldName = "text";  
String text = "据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,"  
+ "日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,"  
+ "20000余人受伤,近20万人无家可归。"; //检索内容  
 
//采用正向最大匹配的中文分词算法  
Analyzer analyzer = new MMAnalyzer();  
 
Directory directory = new RAMDirectory();  
//Directory directory = FSDirectory.getDirectory("/tmp/testindex", true);  
 
try  
{  
IndexWriter iwriter = new IndexWriter(directory, analyzer, true);  
iwriter.setMaxFieldLength(25000);  
Document doc = new Document();  
doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.TOKENIZED));  
iwriter.addDocument(doc);  
iwriter.close();  
 
IndexSearcher isearcher = new IndexSearcher(directory);  
QueryParser parser = new QueryParser(fieldName, analyzer);  
Query query = parser.parse("印度尼西亚 6.2级地震");//检索词  
Hits hits = isearcher.search(query);  
System.out.println("命中:" + hits.length());  
 
for (int i = 0; i < hits.length(); i++)  
{  
Document hitDoc = hits.doc(i);  
System.out.println("内容:" + hitDoc.get(fieldName));  
}  
 
isearcher.close();  
directory.close();  
}  
catch (Exception e)  
{  
e.printStackTrace();  
}  
}  
 
}  
 
生成效果:  
   
命中:1  
内容:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的
里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归。
 
 
搜索词加亮  
package demo.analysis;  
 
import jeasy.analysis.MMAnalyzer;  
 
import org.apache.lucene.analysis.Analyzer;  
import org.apache.lucene.analysis.TokenStream;  
import org.apache.lucene.document.Document;  
import org.apache.lucene.document.Field;  
import org.apache.lucene.index.IndexReader;  
import org.apache.lucene.index.IndexWriter;  
import org.apache.lucene.index.TermPositionVector;  
import org.apache.lucene.queryParser.QueryParser;  
import org.apache.lucene.search.Hits;  
import org.apache.lucene.search.IndexSearcher;  
import org.apache.lucene.search.Query;  
import org.apache.lucene.search.highlight.Highlighter;  
import org.apache.lucene.search.highlight.QueryScorer;  
import org.apache.lucene.search.highlight.TokenSources;  
import org.apache.lucene.store.Directory;  
import org.apache.lucene.store.RAMDirectory;  
 
public class Segment  
{  
 
public static void main(String[] args)  
{  
String fieldName = "text";  
String text = "据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,"  
+ "日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,"  
+ "20000余人受伤,近20万人无家可归。"; //检索内容  
 
//采用正向最大匹配的中文分词算法  
Analyzer analyzer = new MMAnalyzer();  
 
Directory directory = new RAMDirectory();  
//Directory directory = FSDirectory.getDirectory("/tmp/testindex", true);  
 
try  
{  
IndexWriter iwriter = new IndexWriter(directory, analyzer, true);  
iwriter.setMaxFieldLength(25000);  
Document doc = new Document();  
doc.add(new Field(fieldName, text, Field.Store.YES,  
Field.Index.TOKENIZED,  
Field.TermVector.WITH_POSITIONS_OFFSETS));  
iwriter.addDocument(doc);  
iwriter.close();  
 
IndexSearcher isearcher = new IndexSearcher(directory);  
QueryParser parser = new QueryParser(fieldName, analyzer);  
Query query = parser.parse("印度尼西亚 6.2级地震");//检索词  
Hits hits = isearcher.search(query);  
System.out.println("命中:" + hits.length());  
 
Highlighter highlighter = new Highlighter(new QueryScorer(query));  
for (int i = 0; i < hits.length(); i++)  
{  
text = hits.doc(i).get(fieldName);  
TermPositionVector tpv = (TermPositionVector) IndexReader.open(  
directory).getTermFreqVector(hits.id(i), fieldName);  
TokenStream tokenStream = TokenSources.getTokenStream(tpv);  
String result = highlighter.getBestFragments(tokenStream, text, 3, "...");  
System.out.println("内容:" + result);  
}  
 
isearcher.close();  
directory.close();  
}  
catch (Exception e)  
{  
e.printStackTrace();  
}  
}  
 
}
分享到:
评论

相关推荐

    je-analysis-1.5.3、lucene-core-2.4.1分词组件

    Je-Analysis可以作为Lucene的分词插件,提供对中文文本的预处理服务,使得Lucene能更好地理解和索引中文内容。 使用"je-analysis-1.5.3"和"lucene-core-2.4.1"的组合,开发者可以构建出强大的文本搜索解决方案。在...

    MMAnalyzer 分词jar包(lucene-core-2.4.1.jar je-analysis-1.5.3.jar)

    Jeasy Analysis是为了简化中文分词而设计的,它主要由"je-analysis-1.5.3.jar"这个文件组成。这个分词器在Lucene的基础上,针对中文特性进行了优化,提高了分词效率和准确性,尤其适合对易读性和速度有较高要求的...

    MMAnalyzer 分词必导入jar包(lucene-core-2.4.1.jar je-analysis-1.5.3.jar)

    通过以上介绍,我们了解到MMAnalyzer作为JeasyAnalysis的一部分,是进行中文分词的重要工具,而`lucene-core-2.4.1.jar`则是其背后的基石,提供了必要的搜索和分析功能。正确地理解并使用这两个库,可以帮助开发者在...

    lucene-core-2.3.0 lucene-core2.4.0以及极易分词器 jar包

    `je-analysis-1.5.1` 是该分词器的一个版本,它为Lucene提供了一套专门针对中文的分词规则和算法,能够有效地将中文文本切分成有意义的词语,这是构建中文搜索引擎时必不可少的步骤。极易分词器的特点可能是易于使用...

    je-analysis-1.5.3;lucene-core-2.9.2

    "je-analysis-1.5.3"可能会负责对输入文本进行预处理,如分词,然后"lucene-core-2.9.2"则会利用这些预处理结果建立索引,进行高效的查询和匹配。这样的系统常见于内容管理系统、搜索引擎、数据分析平台等。 在实际...

    lucene je-analysis jar包

    JE-Analysis是针对Java环境的中文分词工具,它是基于Lucene进行扩展和优化的,特别适合处理中文文本。它提供了丰富的分词策略,如基于词典的精确分词、基于统计的分词等,可以有效地处理中文的复杂性,如词语的歧义...

    整合资源jsmartco_zh_CN+je-analysis-1.4.0+lucene-core-2.0.0+heritrix.14.4.

    je-analysis 1.4.0是针对中文的分析库,它提供了中文分词的功能,能够帮助搜索引擎更好地理解和索引中文内容。 **3. lucene-core-2.0.0**: Lucene是一个高性能、全文本搜索库,它是Apache软件基金会的一个项目。...

    je-analysis-1.5.1.jar+lucene-core-3.5.0.jar+IKAnalyzer2012.zip

    分词是Lucene处理文本的基础,它支持多种分词器插件,可以与"je-analysis-1.5.1.jar" 结合使用,提供定制化的中文分词功能。 最后,"IKAnalyzer2012.zip" 是一个开源的中文分词器,基于Java实现,专为满足中文信息...

    lucene_JE分词_htmlParser--jar包

    2. **JE(Java Enhanced)分词**:JE分词是针对中文的一种高效分词库,它通常用于对中文文本进行预处理,将连续的汉字序列分割成有意义的词汇。分词是自然语言处理的基础步骤,对于信息检索、机器翻译、情感分析等...

    Lucene中文分词组件 JE-Analysis 1.5.1

    //采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAnalyzer analyzer = new MMAnalyzer(); //参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 MMAnalyzer analyzer = new ...

    lucene和je-analysis-1.5.3

    在使用时,开发者通常会先将输入的中文文本通过JE-Analysis进行预处理,然后将处理后的结果交给Lucene构建索引。在查询阶段,用户输入的查询也会经过相同的分析过程,然后再进行匹配。 在压缩包文件中,"META-INF...

    compass2.1.4包+所用lucene包+中文分词器

    Je-Analysis 可能是基于 Java 实现的,适用于 Lucene 和 Solr 等搜索引擎,它提供了诸如词典分词、歧义消除、新词发现等功能,帮助搜索引擎更好地理解和索引中文内容。 在实际应用中,Compass 会使用 Lucene 的底层...

    转 Lucene中文分词组件 JE-Analysis 1.5.1 天狼

    《深入理解Lucene中文分词组件JE-Analysis 1.5.1——天狼解析》 在信息检索和自然语言处理领域,Lucene是一个广泛使用的全文检索库,它提供了强大的索引和搜索功能。然而,Lucene本身并不支持中文分词,因此我们...

    lucene中文分词

    总的来说,"lucene中文分词"是Lucene处理中文文本的关键环节,通过引入"je-analysis"这样的分词插件,我们可以构建出适用于各种场景的中文搜索引擎。在实际应用中,需要根据数据特性选择合适的分词策略,并进行适当...

    JE分词 1.4+1.5

    "JE分词 1.4+1.5"是一个针对中文文本处理的工具,主要用于将汉字字符串分割成有意义的词语,这是自然语言处理中的关键步骤。这个版本的JE分词在之前的基础上进行了多方面的改进和增强,使得其在处理中文文本时更为...

    Lucene中文分词组件 JE-Analysis 1.4.0

    分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词持平 运行环境: Lucene 1.9+ 内存消耗: 30M+ 1.4.0 —— 2006-08-21 增加词典的动态扩展能力 1.3.3 —— 2006-07...

    lucene2.0与其分词工具包

    "je-analysis"可能是一个早期的中文分析器,用于对中文文本进行预处理,包括词典匹配、分词、去除停用词等步骤,以便于Lucene理解并处理中文内容。这在处理大量中文文档时尤其关键,因为中文没有明显的词边界,传统...

    lucene需要的jar包

    lucene需要用到的基本架包 核心包 高亮 中文分词,希望有所帮助。je-analysis1.5.3.jar lucene-highlighter-3.0.0.jar lucene-core-3.0.0.jar lucene-memory-3.0.0.jar

    分词器je-analysis-1.5.3.jar

    分词器je-analysis的核心功能在于对中文文本进行精确的分词。中文不同于英文,单词之间没有明显的分隔符,因此需要通过特定算法识别出词语边界。je-analysis采用了基于词典的分词方法,结合正向最大匹配法(Forward ...

Global site tag (gtag.js) - Google Analytics