NLP快速入门:手把手教你用HanLP做中文分词

导读:随着自然语言处理(Natural Language Processing, NLP)技术日趋成熟,实现中文分词的工具也越来越多。中文分词技术作为中文自然语言处理的第一项核心技术,是众多上层任务的首要基础工作,同时在日常的工作中起着基础性的作用。本文将讲解如何在Python环境下调用HanLP包进行分词,并结合Python语言简约的特性,实现一行代码完成中文分词。

常用中文分词工具

工具名称是否开源
工具描述
Jieba
(结巴分词)
免费使用
jieba库是一款优秀的支持 Python 第三方中文分词库,jieba支持三种分词模式:精确模式、全模式和搜索引擎模式。
SnowNLP
(中文的类库)
免费使用SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,诞生了一个方便处理中文的类库。
FoolNLTK
(中文处理工具包)
免费使用FoolNLTK是基于Bi-LSTM模型训练成的中文分词工具,仅适用于Linux系统。
Jiagu
(甲骨工具包)
免费使用Jiagu以BiLSTM等模型为基础,使用大规模语料训练而成。集成多种NLP基础处理功能并支持知识图谱开放信息抽取。
HanLP
(汉语言处理包)
免费使用HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
pyltp
(哈工大语言云)
付费使用pyltp 是哈工大自然语言工作组推出的一款基于Python 封装的自然语言处理工具,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能。

THULAC

(清华中文词法分析)
付费使用THULAC(THU Lexical Analyzer for Chinese)是由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。

NLPIR

(汉语分词系统)
付费使用NLPIR大数据语义智能分析平台由北京理工大学大数据搜索与挖掘实验室研发的“自然语言处理与信息检索共享平台。

01 什么是中文分词?

      众所周知,英文是以词为单位的,词和词之间是靠空格隔开。而在汉语中,词以字为基本单位,但是一篇文章的语义表达却仍然是以词来划分。例如,英文句子"I am a student",用中文则为:"我是一个学生"。计算机可以很简单通过空格知道"student"是一个单词,但是不能很容易明白"学"、"生"两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。"我是一个学生",分词的结果是:"我 是 一个 学生"。因此,需要针对中文汉字,将其按照一定的方式进行组织,分成不同的词。

       

       中文分词是让计算机自动识别出句子中的词,然后在词间加入边界标记符。这个过程的主要困难在于分词规范、歧义切分和未登陆词的识别。

       

      分词规范可以理解为国人并没有统一对汉语词的认识,对汉语词的认识的操作尺度很难把握,极易受到主观因素的影响,从而无法提供一个公认的、具有权威性的词表(例如普通说话人的语感与语言学家的标准就有较大的差异)。

       歧义切分可以举例如下:"南京市长江大桥"的分词有两种切分,"南京市\长江大桥" 和 "南京\市长\江大桥"。这种情况在汉语文本中非常普遍,并且处理这类问题往往也要复杂得多。

       未登录词的识别(生词)可以有两种解释:一是指已有词典中没有收录的词;二是指已有的训练语料中未曾出现过的词。所以从某种意义上来说,生词对分词的影响是最容易处理的。

02 HanLP分词

1. 安装HanLP

       HanLP的API总体来说并不多,且需要进行的配置并不复杂,适合新手上手。下载完成后,可以使用如下命令进行安装。要求Python 3.6以上,支持Windows,可以在CPU上运行,推荐GPU/TPU。

pip install pyhanlp

       注:若未安装Java则会报如下错误。因为HanLP 主项目采用 Java 开发,所以需要 Java 运行环境,请安装 JDK。

jpype.jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVAHOME environment variable properly.

       项目Github地址:https://github.com/hankcs/pyhanlp

2. 分词实战

2.1 简单实例 

       首先,我们通过一个官网的实例直观认识下HanLP的分词结果。

import pyhanlp
text = '铁甲网是中国最大的工程机械交易平台'
words = []
for term in pyhanlp.HanLP.segment(text):words.append(term.word)
print(words)  #输出分词结果

       分词结果如下所示。

['铁甲', '网', '是', '中国', '最大', '的', '工程', '机械', '交易', '平台']

2.2 自定义词典分词

       接着,我们通过自定义增加不同领域内的专有名词的词典,从而进一步优化HanLP的分词结果。

CustomDictionary.add("铁甲网")CustomDictionary.insert("工程机械", "nz 1024")CustomDictionary.add("交易平台", "nz 1024 n 1")print(HanLP.segment(txt))

       分词结果如下所示。

['铁甲网', '是', '中国', '最大', '的', '工程机械', '交易平台']

2.3 优化分词代码

       最后,我们可以利用Python语言的简约性将代码优化成如下一行。

       其中,text 存放的是待分词的文本;

         正则表达式 re.fullmatch(r'[\u4e00-\u9fa5]+',i) 的作用是仅保留汉字,过滤掉非汉字之外的字符。

words = [i for i in [i.word for i in pyhanlp.HanLP.segment(text)] if re.fullmatch(r'[\u4e00-\u9fa5]+',i)]

       当然了,HanLP作为开源框架,并不是只有分词这一个功能,还提供了很多在分词之上的算法,如关键词提取、自动摘要、依存句法分析、情感分析等,这里不再赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序android错误,app安卓端 跳转到微信小程序失败

详细问题描述(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)[内容] app安卓端跳转到微信小程序失败重现步骤 一直失败[步骤] 微信小程序关联了…

动态内存(Dynamic Memory),微软的内存过量分配技术?

Hyper-V不支持Memory Overcommitment,一直为VMware和其他虚拟化厂商所诟病。当然,微软一直不承认这是他们的软肋,认为为了保证生产环境VM的性能,过量分配内存是不合时宜的。但是,微软的态度似乎突然转变,3月…

openlayers地图旋转_OpenLayers的使用---- 一个完全免费开源的地图JS库

OpenLayers很容易的在网站里放置动态地图。它能显示展开图及从资源中加载地图标记及矢量数据。它被开发出尽可能的使用所有的地图信息。并且它是完全免费及开源的.详细了解可去它的官网:http://openlayers.org/简单使用,如展示一个块地图.mymap {height:…

程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?

来源:知乎作者:黄小秋原文链接:https://www.zhihu.com/question/68733553/answer/305463907导语:知乎有位程序员大佬,为了让老母亲老父亲们理解自己的呱究竟在干什么,于是花了五个晚上逆向游戏程序逻辑&…

android.mk 翻译,翻译ANDROID-MK.TXT

Android.mk编译文件是用来向Android NDK描述你的C,C源代码文件的,这篇文档描述了它的语法。在阅读下面的内容之前,假定你已经阅读了docs/OVERVIEW.TXT文件,了解了它们的脚色和用途。概述:一个Android.mk file用来向编译系统描述你的源代码。具…

我为什么对TypeScript由黑转粉?

喜欢就关注我们吧!一名曾仅使用 JavaScript 的开发者解释自己为何从反对 TypeScript 到转变为 TypeScript 粉丝。Chirag Swadia 自称曾是 Anti-TypeScript 的 JavaScript 开发者。谈及反对的原因,他以前一直认为给函数/变量添加类型以满足 TypeScript 编…

谈谈关于MVP模式中V-P交互问题

在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面。这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位。前两周,我奉命负责对某个模块进行Code Review工作&#xf…

ofdm解调算法_OFDM系统中固定频偏算法

加入固定频偏:function berMatrix freqOffsetOFDM(BPS,NS,M,SNR,ifftsize,carriers,N,ep)%标准OFDM系统input_bit_stream sign(randn(1,BPS*NS));input_bit_stream(input_bit_stream -1)0;parallel_data StoP(input_bit_stream ,M);% 串并转换%QAM调制modulated_d…

重磅!阿里开源AI核心技术,95%算法工程师受用

你是否曾有过这样的疑虑:人工智能大热,作为一名传统程序员,该如何转型或学习?网上AI教程、书籍,质量参差不齐,如何找到真正专业的资源?AI理论遍地皆是,但几乎都在纸上谈兵。我们该从…

android 换机 iphone8,最好的换机之选?iPhone8 PLUS众测体验

最好的换机之选?iPhone8 PLUS众测体验2017-11-11 14:29:0034点赞1收藏0评论文章前面说一下,自己水平有限文笔不好,没有相机,开箱图这些都是手头的iPhone6和本次众测的的产品拍摄,再加上最近白天都没空拍照,…

阿里开始招聘.NET,要求WPF!

说到WPF、上位机,很多.NET开发者可能只是听过并不了解,然而随着工业4.0的火爆大势,当下.NET开发者又多了一个高薪选型,在各大招聘网站上都能找到5年经验25k左右的岗位,强烈推荐大家关注一波。这里借用了下阿里影业对.N…

eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写

原标题:[STM8L]EEPROM操作读与写带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了。不同型号的STM8L器件其内部默认划分的EEPROM区域都是从0x1000地址开始,以下为S…

JavaWeb中的Session、SessionListener、在线人数统计

2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。正在装载数据…… Session的创建(代表会话周期的开始):第一次调用reque…

全球100款大数据工具汇总(51~100款)

上篇(戳标题即可跳转):全球100款大数据工具汇总(前50款)51、Redis是一个高性能的key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串&…

Android手机投屏后没有声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...

乐播投屏是一个非常不错的投屏软件,操作使用简单,最近不少小伙伴都在用。但是在使用乐播投屏的时候,有很多小伙伴出现了电视没有声音手机有声音的情况,这是怎么回事呢?我们一起来看看乐播投屏电视没有声音的解决办法吧…

如何容器化你的 ASP.Net Core

Docker 相比 虚拟机 具有更轻量级,更便捷的特性,为什么这么说呢?虚拟机通常打包了完整的操作系统,而容器只仅仅打包了你的应用程序,运行环境及相关依赖库,Docker 是一种开源的工具包,帮助你更加…

tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...

本节书摘来自华章社区《Tableau数据可视化实战》一书中的第1章,第1.12节合并不同数据源,作者(美)Ashutosh Nandeshwar,更多章节内容可以访问云栖社区“华章社区”公众号查看1.12 合并不同数据源通常,我们的数据以不同格式或者不同…

android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)

问题My application is able to connect to the BLE peripheral(which is an OBDII/J1939 device) device successfully.2018-01-24 14:58:38,413 INFO LogUtil - GATT Server Status (0) : BLE_HCI_STATUS_CODE_SUCCESS(0x00)2018-01-24 14:58:38,414 INFO LogUtil - GATT Se…

2018年大数据趋势

作者 | Keith D. Foote翻译 | 品觉笔记本电脑、智能手机、传感器,都为物联网带来了大量数据。这是获得竞争优势(或者保持竞争力)的重大机遇,前提是企业足够灵活,可以管理好数据并把数据变成有用的商业智能。人脑能高效…

关于商品分类 商品表和属性表的设计

以前有这样的一个需求,不考虑像京东或者淘宝这样分类下有子分类的情况,只考虑一层分类的情况下,可以随便添加分类,可以任意给商品添加属性,而不需要更 改表的结构. 于是设计了一个这样的结构,实现还是可以实现,一直在用,但是在操作上比较麻烦,大家讨论下有没有更好的方式. ----…