当前位置: 首页 > news >正文

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


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

4833f63adb5e2c28dcfd71750547a9213c27724c 

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以上版本中,所有的词法分析接口都同时支持简繁。

相关文章:

  • 急速 debug 实战一(浏览器-基础篇)
  • kubernetes系列07—Pod控制器详解
  • SSH 免密登录
  • Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)
  • vivo Z3i标准版评测 强劲配置带来酣畅体验
  • PAT A1120
  • 都是 HBase 上的 SQL 引擎,Kylin 和 Phoenix 有什么不同?
  • 2019年web前端发展趋势预测(附web前端视频教程全集)
  • 理清楚Vue的结构
  • 阿里云ACE认证之理解CDN技术
  • 数据分析沙龙杭州站,邀您报名!
  • 利用Qrcode生成二维码
  • Java到底能干嘛?
  • 【Linux】- SSH免密登陆配置
  • 企业 SpringBoot+SpringCloud(九)springboot整合Redis
  • [译] 怎样写一个基础的编译器
  • 07.Android之多媒体问题
  • CentOS6 编译安装 redis-3.2.3
  • Docker: 容器互访的三种方式
  • golang 发送GET和POST示例
  • HTML5新特性总结
  • KMP算法及优化
  • leetcode-27. Remove Element
  • nodejs:开发并发布一个nodejs包
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue-cli在webpack的配置文件探究
  • vue脚手架vue-cli
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 构建工具 - 收藏集 - 掘金
  • 软件开发学习的5大技巧,你知道吗?
  • 思考 CSS 架构
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 我感觉这是史上最牛的防sql注入方法类
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (9)STL算法之逆转旋转
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转)linux 命令大全
  • (转)创业家杂志:UCWEB天使第一步
  • .Net Remoting常用部署结构
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET业务框架的构建
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [acm算法学习] 后缀数组SA
  • [autojs]autojs开关按钮的简单使用
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C++]STL之map
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [I2C]I2C通信协议详解(二) --- I2C时序及规格指引
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用