Jcseg是使用Java开发的一款开源的中文分词器, 基于流行的mmseg算法实现,分词准确率高达98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤等。并且提供了最新版本的lucene,solr,elasticsearch分词接口。
1.9.5 org.lionsoul.jcseg jcseg-core ${jcseg.version}
如何配置jcseg.properties
# jcseg function#-正向最大化匹配数目(建议位于4-7 之间)。jcseg.maxlen=10#-开启中文人名识别(1.7.0 后, 0 关闭, 1 开启)。jcseg.icnname=1#-中英混合词最大中文词数,例如:A 计划 A 后面有两个字“计划”。jcseg.mixcnlen=4#最大的配对标点内容长度。jcseg.pptmaxlen=15#-姓氏修饰词长度,例如:老陈 中的“陈”(通常为1)。jcseg.cnmaxlnadron=1#是否自动过滤停止词(0 关闭, 1 开启)jcseg.clearstopword=1#是否自动中文数字转阿拉伯数字(0 关闭, 1 开启)jcseg.cnnumtoarabic=1#是否自动中文分数转阿拉伯分数(0 关闭, 1 开启)jcseg.cnfratoarabic=0#-姓名成词歧义阕值(不用更改, 除非你知道你改了什么)。jcseg.nsthreshold=1000000#自动保留标点,用于识别负载的英文标点组合词.jcseg.keeppunctuations=@%.&+# about the lexicon#-词库文件前缀(例如: lex-main.lex)。lexicon.prefix=lex#-词库文件后缀(例如: lex-main.lex)。lexicon.suffix=lex#-词库存放路径({jar.dir}/lexicon 为默认路径, 表示词库位于jar 目录下的lexicon 目录下)#从jcseg-1.9.2 开始: 支持多目录加载词库.不同的路径使用';'隔开就可以了.#例如: lexicon.path=/java/jcseg/lex1;/java/jcseg/lex2lexicon.path=#-是否词库更新自动加载(1 开启, 0 关闭)lexicon.autoload=1#-词库更新轮询时间(单位: 秒)lexicon.polltime=120# lexicon load#载入词库时是否载入词条的词性。(0 关闭, 1 开启)jcseg.loadpos=0#载入词库时是否载入词条的拼音(1.7.0 后, 0 关闭, 1 开启)。jcseg.loadpinyin=1#载入词库时是否载入词条的同义词(0 关闭, 1 开启)。jcseg.loadsyn=0#是否保留Jcseg 不是别的字符.(1 保留, 0 关闭)jcseg.keepunregword=1#是否二次切分复杂的英文切分结果. (1 开启, 0 关闭)jcseg.ensencondseg = 0#最小二次切分长度. (建议大于1)jcseg.stokenminlen = 4
怎么初始化jcseg
static ISegment seg; static{ JcsegTaskConfig config = null;// new JcsegTaskConfig(); final File jcseg_config_file = FileMgr.findFile(InformationService.class,"jcseg.properties"); if(jcseg_config_file != null && jcseg_config_file.exists()){ config = new JcsegTaskConfig(jcseg_config_file.getAbsolutePath()); }else{ InformationService.LOG.info("Could Not Found jcseq.properties ,Use Default!!"); config = new JcsegTaskConfig(); } String webRootpath=JavaPath.getAutoRootPath()+"VitalData/info/lexicon"; String[] lexPath = {webRootpath}; config.setLexiconPath(lexPath); ADictionary dic = DictionaryFactory.createDefaultDictionary(config); try { InformationService.seg =SegmentFactory.createJcseg(JcsegTaskConfig.COMPLEX_MODE, config, dic); } catch (JcsegException e) { e.printStackTrace(); } }
使用
public Listsegment(final String str) throws IOException, JcsegException { final List hashSet = new ArrayList (); IWord word = null; final long _start = System.nanoTime(); int counter = 0; seg.reset(new StringReader(str)); while ( (word = seg.next()) != null ) { if(word.getValue().length()>=2){ hashSet.add(word.getValue()); counter++; } word = null; } final long e = System.nanoTime(); return hashSet; }