切词框架jcseg,入门

Jcseg是使用Java开发的一款开源的中文分词器, 基于流行的mmseg算法实现,分词准确率高达98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤等。并且提供了最新版本的lucene,solr,elasticsearch分词接口。

        <jcseg.version>1.9.5</jcseg.version>   
        <dependency>
          <groupId>org.lionsoul.jcseg</groupId>
          <artifactId>jcseg-core</artifactId>
          <version>${jcseg.version}</version>
        </dependency>            

如何配置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/lex2
lexicon.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 List<String> segment(final String str) throws IOException, JcsegException
    {
        final List<String> hashSet = new ArrayList<String>();
        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;
    }

 

posted @ 2019-07-05 15:50  爱学习~天天学习  阅读(1840)  评论(0编辑  收藏  举报