符串切分 |
|
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可以作为Lucene的分词插件,提供对中文文本的预处理服务,使得Lucene能更好地理解和索引中文内容。 使用"je-analysis-1.5.3"和"lucene-core-2.4.1"的组合,开发者可以构建出强大的文本搜索解决方案。在...
Jeasy Analysis是为了简化中文分词而设计的,它主要由"je-analysis-1.5.3.jar"这个文件组成。这个分词器在Lucene的基础上,针对中文特性进行了优化,提高了分词效率和准确性,尤其适合对易读性和速度有较高要求的...
通过以上介绍,我们了解到MMAnalyzer作为JeasyAnalysis的一部分,是进行中文分词的重要工具,而`lucene-core-2.4.1.jar`则是其背后的基石,提供了必要的搜索和分析功能。正确地理解并使用这两个库,可以帮助开发者在...
`je-analysis-1.5.1` 是该分词器的一个版本,它为Lucene提供了一套专门针对中文的分词规则和算法,能够有效地将中文文本切分成有意义的词语,这是构建中文搜索引擎时必不可少的步骤。极易分词器的特点可能是易于使用...
"je-analysis-1.5.3"可能会负责对输入文本进行预处理,如分词,然后"lucene-core-2.9.2"则会利用这些预处理结果建立索引,进行高效的查询和匹配。这样的系统常见于内容管理系统、搜索引擎、数据分析平台等。 在实际...
JE-Analysis是针对Java环境的中文分词工具,它是基于Lucene进行扩展和优化的,特别适合处理中文文本。它提供了丰富的分词策略,如基于词典的精确分词、基于统计的分词等,可以有效地处理中文的复杂性,如词语的歧义...
je-analysis 1.4.0是针对中文的分析库,它提供了中文分词的功能,能够帮助搜索引擎更好地理解和索引中文内容。 **3. lucene-core-2.0.0**: Lucene是一个高性能、全文本搜索库,它是Apache软件基金会的一个项目。...
分词是Lucene处理文本的基础,它支持多种分词器插件,可以与"je-analysis-1.5.1.jar" 结合使用,提供定制化的中文分词功能。 最后,"IKAnalyzer2012.zip" 是一个开源的中文分词器,基于Java实现,专为满足中文信息...
2. **JE(Java Enhanced)分词**:JE分词是针对中文的一种高效分词库,它通常用于对中文文本进行预处理,将连续的汉字序列分割成有意义的词汇。分词是自然语言处理的基础步骤,对于信息检索、机器翻译、情感分析等...
//采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAnalyzer analyzer = new MMAnalyzer(); //参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 MMAnalyzer analyzer = new ...
在使用时,开发者通常会先将输入的中文文本通过JE-Analysis进行预处理,然后将处理后的结果交给Lucene构建索引。在查询阶段,用户输入的查询也会经过相同的分析过程,然后再进行匹配。 在压缩包文件中,"META-INF...
Je-Analysis 可能是基于 Java 实现的,适用于 Lucene 和 Solr 等搜索引擎,它提供了诸如词典分词、歧义消除、新词发现等功能,帮助搜索引擎更好地理解和索引中文内容。 在实际应用中,Compass 会使用 Lucene 的底层...
《深入理解Lucene中文分词组件JE-Analysis 1.5.1——天狼解析》 在信息检索和自然语言处理领域,Lucene是一个广泛使用的全文检索库,它提供了强大的索引和搜索功能。然而,Lucene本身并不支持中文分词,因此我们...
总的来说,"lucene中文分词"是Lucene处理中文文本的关键环节,通过引入"je-analysis"这样的分词插件,我们可以构建出适用于各种场景的中文搜索引擎。在实际应用中,需要根据数据特性选择合适的分词策略,并进行适当...
"JE分词 1.4+1.5"是一个针对中文文本处理的工具,主要用于将汉字字符串分割成有意义的词语,这是自然语言处理中的关键步骤。这个版本的JE分词在之前的基础上进行了多方面的改进和增强,使得其在处理中文文本时更为...
分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词持平 运行环境: Lucene 1.9+ 内存消耗: 30M+ 1.4.0 —— 2006-08-21 增加词典的动态扩展能力 1.3.3 —— 2006-07...
"je-analysis"可能是一个早期的中文分析器,用于对中文文本进行预处理,包括词典匹配、分词、去除停用词等步骤,以便于Lucene理解并处理中文内容。这在处理大量中文文档时尤其关键,因为中文没有明显的词边界,传统...
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的核心功能在于对中文文本进行精确的分词。中文不同于英文,单词之间没有明显的分隔符,因此需要通过特定算法识别出词语边界。je-analysis采用了基于词典的分词方法,结合正向最大匹配法(Forward ...