Hanlp分词之CRF中文词法分析详解

Hanlp分词之CRF中文词法分析详解

 

这是另一套基于CRF的词法分析系统,类似感知机词法分析器,提供了完善的训练与分析接口。

Hanlp分词之CRF中文词法分析详解

CRF的效果比感知机稍好一些,然而训练速度较慢,也不支持在线学习。

默认模型训练自OpenCorpus/pku98/199801.txt,随hanlp 1.6.2以上版本发布

语料格式等与感知机词法分析器相同,请先阅读《感知机词法分析器》。

中文分词

训练

        CRFSegmenter segmenter = new CRFSegmenter(null);

        segmenter.train(“data/test/pku98/199801.txt”, CWS_MODEL_PATH);

输出为HanLP私有的二进制模型,有兴趣的话还可以通过命令导出为兼容CRF++的纯文本格式。

java -cp hanlp.jar com.hankcs.hanlp.model.crf.crfpp.crf_learn -T cws.bin cws.txt

与CRF++兼容

由于C++的运行效率和内存效率优于Java,所以推荐直接利用CRF++执行大规模训练。

首先将人民日报语料转换为CRF++格式:

 

        CRFSegmenter segmenter = new CRFSegmenter(null);

        segmenter.convertCorpus(“data/test/pku98/199801.txt”, “data/test/crf/cws-corpus.tsv”);

然后准备一份特征模板,或者直接用HanLP默认的:

        segmenter.dumpTemplate(“data/test/crf/cws-template.txt”);

接着用CRF++的crf_learn执行训练:

crf_learn cws-template.txt cws-corpus.tsv cws -t

·此处必须使用-t命令CRF++输出文本格式的模型cws.txt

·HanLP只兼容CRF++的文本模型,不兼容二进制

 

将cws.txt格式的模型传入CRFSegmenter或CRFLexicalAnalyzer的构造函数即可创建分词器,同时HanLP会自动创建二进制缓存.txt.bin,下次加载耗时将控制在数百毫秒内。

预测

可通过如下方式加载:

        CRFSegmenter segmenter = new CRFSegmenter(CWS_MODEL_PATH);

        List<String> wordList = segmenter.segment(“商品和服务”);

        System.out.println(wordList);

不传入模型路径时将默认加载配置文件指定的模型。

词性标注

CRF词性标注器的训练与加载与中文分词类似,对应CRFPOSTagger。

命名实体识别

CRF命名实体识别也是类似的用法,对应CRFNERecognizer。

CRF词法分析器

训练了1至3个模型后,可以构造CRF词法分析器:

    /**

     * 构造CRF词法分析器

     *

     * @param cwsModelPath CRF分词器模型路径

     * @param posModelPath CRF词性标注器模型路径

     * @param nerModelPath CRF命名实体识别器模型路径

     */

    public CRFLexicalAnalyzer(String cwsModelPath, String posModelPath, String nerModelPath) throws IOException

    

    /**

     * 加载配置文件指定的模型

     *

     * @throws IOException

     */

    public CRFLexicalAnalyzer() throws IOException

构造后可以调用analyze接口或与旧接口兼容的seg:

 

        CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();

        String[] tests = new String[]{

            “商品和服务”,

            “上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观”,

            “微软公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。” // 支持繁体中文

        };

        for (String sentence : tests)

        {

            System.out.println(analyzer.analyze(sentence));

            System.out.println(analyzer.seg(sentence));

        }

在1.6.2以上版本中,所有的词法分析接口都同时支持简繁。

转载于:https://my.oschina.net/u/3793864/blog/3011433

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101115.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网站开发团队成员(项目团队)

    1.项目带头人(Boss):通常是项目的发起人,为项目规划企业战略目标,对项目的成败负最终责任。2.项目经理:这个不用说了是项目当然需要PM,建议是通过PMP认证的项目经理,主要负责项目各个过程的管理,以及过程优化降低开发风险。 3.系统架构师:架构师不单单是技术架构,还

    2022年4月10日
    134
  • MutationObserver 方法

    MutationObserver 方法MutationObserver是什么MutationObserverAPI让我们能监听DOM树变化,该API设计用来替换掉在DOM3事件规范中引入的Mutationevents。Mutationevents是同步触发的,每次变动都会触发一次调用。MutationObserverAPI是异步触发的,DOM的变动并不会马上触发,而是要等到当前所有DOM操作都结束才触发。所以MutationObserver相比Mutationevents性能要更高。代码

    2025年6月10日
    0
  • 7道常见的数据分析面试题[通俗易懂]

    7道常见的数据分析面试题[通俗易懂]InfoQ内容来自极客时间《数据分析实战45讲》数据分析师近几年在国内互联网圈越来越火,很多开发都因为薪资和发展前景,希望转行到数据分析岗。今天,我们就来聊聊面试数据分析师的那些事。其实,数据分析能力是每个互联网人的必备技能,哪怕你没有转行数据分析师的计划,也推荐你看看这个专题,提升你的数据能力。数据分析的能力要求与数据分析相关的工作有一个特质,就是对数字非常敏感,同时也要求对数据具…

    2022年5月27日
    34
  • Django设置超时时间_Django orm

    Django设置超时时间_Django orm前言我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,所以我们存储在数据库中的时间是UTC的时间,但是当我们做的网站只面向国内用户,或者只是提供内部平台使用,我们希望存储在

    2022年7月30日
    8
  • vsftp 用户_共享提示用户账户限制

    vsftp 用户_共享提示用户账户限制背景Oracle全库备份,异地备份在实现异地备份后,由第三方人员登录服务器拉取dmp文件.为了确保安全,创建一个特定ftp账号用于第三方人员使用要求1.可以登录服务器2.可以拉取dmp文件3.仅限在dmp文件的目录下,不能cd其他路径,ls其他目录解决过程yum安装ftp服务[root@78778e06dc0a/]#yuminstallvsftpd-y修改vsftp配置文件,开启限制[…

    2022年9月25日
    0
  • Java中的关键字有哪些?「Java中53个关键字的意义及使用方法」

    Java中的关键字有哪些?「Java中53个关键字的意义及使用方法」Java中的关键字有哪些?Java的关键字(keyword)有多少个?Java的保留字(reserveword)有多少个?分别是什么?Java的关键字分别是什么,作用是什么?

    2022年7月7日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号