MMAnalyzer: 免费下载Java中文分词jar包

需积分: 0 6 下载量 189 浏览量 更新于2024-10-28 收藏 1.57MB ZIP 举报
资源摘要信息:"MMAnalyzer 是一个基于 Java 的中文分词工具,主要包含在 jeasy.analysis 包中。MMAnalyzer 的主要功能是对中文文本进行分词处理,即将连续的文本切分成有意义的单词或字符序列。对于中文分词技术来说,它需要特别处理中文文本的特性,例如中文没有明显的词间分隔符,如空格。MMAnalyzer 设计了一系列算法来识别和划分中文词语,这些算法可能包括基于词典的匹配、基于统计学的方法、以及结合语义理解的更复杂方法。 由于中文与英文在书写上的根本不同,中文分词成为了自然语言处理领域的一个独特分支,它对于中文搜索引擎、文本挖掘、信息检索等应用场景至关重要。分词的质量直接影响到后续处理的效果,因此选择一个可靠和高效的中文分词工具是进行中文文本分析的重要步骤。 根据描述,MMAnalyzer 包含在 jeasy.analysis 包中,是一个开源的 Java 实现,旨在提供给开发者免费使用和下载。这种开源的做法鼓励了技术的共享和创新,对社区贡献良多,也体现了开源精神和共享文化的积极意义。 在使用 MMAnalyzer 进行中文分词时,开发者需要将其相关的 jar 包引入到自己的 Java 项目中。这可以通过在项目构建工具(如 Maven 或 Gradle)的依赖管理配置中添加相应的依赖来实现,或者直接将 jar 文件放置在项目的类路径中。 MMAnalyzer 的使用方法可能会涉及到创建分词实例、调用分词方法等步骤。开发者通常需要阅读其官方文档或示例代码来了解具体的 API 使用方式。此外,MMAnalyzer 的性能和功能也可能会随着版本的迭代而有所增强,因此关注其官方发布信息,以获取最新版本和改进的详情也是一个不错的选择。 在标签方面,提到的“java jar 中文分词 开发语言 后端”,说明了 MMAnalyzer 是一个 Java 开发的工具,通常以 jar 文件的形式存在,专注于中文文本的处理,适用于需要后端处理逻辑的开发场景。由于中文分词是一个复杂的过程,涉及到大量的算法和数据处理,因此后端开发人员需要熟悉相应的技术,并能够合理地利用工具来优化性能和提高效率。 综上所述,MMAnalyzer 是一个开源的中文分词 Java 工具包,它通过分词处理帮助开发者对中文文本进行有效的分析和处理。它易于下载和使用,并且鼓励技术共享。开发者可以根据自己的需求,通过引入 MMAnalyzer 的 jar 包到 Java 项目中,来实现复杂的中文分词功能。"
272 浏览量
该组件免费安装使用传播,无限制商业应用,但暂不开源,也不提供任何保证 分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词持平 运行环境: Lucene 1.9+ 内存消耗: 30M+ 1.4.0 —— 2006-08-21 增加词典的动态扩展能力 1.3.3 —— 2006-07-23 修正无法多次增加词典的问题 1.3.2 —— 2006-07-03 修正细粒度分词错误的问题 1.3.1 —— 2006-06-23 修正在某些情况下分词遗漏的问题 1.3 —— 2006-06-22 实现了词尾消歧算法中第一层的过滤 增加日期时间的匹配 1.2.2 —— 2006-06-13 完善了中英文噪声词典 1.2.1 —— 2006-06-10 修正中文数字成语无法识别的问题 1.2 —— 2006-06-08 增加中文数字的匹配(如:二零零六) 数量词采用“n”作为数字通配符 优化词典结构以便修改调整 1.1 —— 2006-06-06 增加扩展词典的静态读取方法 1.0.1 —— 2006-06-02 修正无法识别生僻字的问题 1.0 —— 2006-05-29 支持英文、数字、中文(简体)混合分词 常用的数量和人名的匹配 超过22万词的词库整理 实现正向最大匹配算法 //采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAnalyzer analyzer = new MMAnalyzer(); //参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 MMAnalyzer analyzer = new MMAnalyzer(2); //增加一个新词典,采用每行一个词的读取方式 MMAnalyzer.addDictionary(reader); //增加一个新词 MMAnalyzer.addWord(newWord); 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万人 | 无家可归 | 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(); } } } 生成效果: 命中:1 内容:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的 里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归