HanLP

pyhanlp 停用词与用户自定义词典功能详解

对着背影说爱祢 提交于 2019-11-30 03:10:51
hanlp的词典模式 之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集。 其核心词典形式如下: 自定义词典 自定义词典有多种添加模式,首先是展示的一个小例子,展示了词汇的动态增加与强行插入,删除等。更复杂的内容请参考后边的第二段代码。 简单的例子 from pyhanlp import * text = "攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰" # 怎么可能噗哈哈! print(HanLP.segment(text)) CustomDictionary = JClass("com.hankcs.hanlp.dictionary.CustomDictionary") CustomDictionary.add("攻城狮") # 动态增加 CustomDictionary.insert("白富美", "nz 1024") # 强行插入 #CustomDictionary.remove("攻城狮"); # 删除词语(注释掉试试) CustomDictionary.add("单身狗", "nz 1024 n 1") # 展示该单词词典中的词频统计 展示分词 print(CustomDictionary.get("单身狗")) print(HanLP.segment(text)) # 增加用户词典

NLP自然语言处理中的hanlp分词实例

天大地大妈咪最大 提交于 2019-11-30 03:08:34
本篇分享的依然是关于hanlp的分词使用,文章内容分享自 gladosAI 的博客,本篇文章中提出了一个问题,hanlp分词影响了实验判断结果。为何会如此,不妨一起学习一下 gladosAI 的这篇文章。 学习内容 在之前的实验中得到了不在词向量里的词与分词结果,结果有500多个词不在词向量里,解决方案就是重新分词,或再追加训练这些词到词向量里。但后者相对麻烦且目前样本量不大。我跟据词向量的作者[6]所使用的分词工具来分词,会比不同工具(jieba)的效果要好,因为都是同一模式的分词,分出来的词应该都会存在于大型语料库中。实验证明思路是对的,最后结果是只有60几个词不在词向量里,其中大部分为名词,还有些为因语音翻译问题所造成的出错连词,所有这些词也只出现一次,这部分可以考虑最后删去也不会影响结果。改善未出现词是个关键步骤,因为此后模型会用到词向量,如果未出现词过多,会影响词向量效果。 问题:不过最后HANLP分词影响了实验判断结果,准确率从93%(jieba分词,同模型同参数)下降到90%。 实验:使用HanLP分词 1,前期准备,(环境ubuntu,python3)安装JAVA-10[3](hanlp是JAVA开发的,即使使用python调用pyhanlp需要借助java), jpype(python中虚拟java环境),hanlp(开源中文处理工具,不只是分词还有各种工具)

在Python中调用Java扩展包HanLP测试记录

会有一股神秘感。 提交于 2019-11-30 03:08:18
最近在研究中文分词及自然语言相关的内容,关注到JAVA环境下的HanLP,HanLP是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析、神经网络依存句法分析)。 由于自己才疏学浅,对JAVA方面了解不多,所以打算在Python环%2, line 5, in <module> startJVM(getDefaultJVMPath()) File “C:\Python27\lib\site-packages\jpype\_core.py”, line 44, in startJVM _jpype.startup(jvm, tuple(args), True) RuntimeError: First paramter must be a string or unicode at src/native/python/jpype_module.cpp:31 很有可能是没有配置JDK的环境变量或安装的JDK的位数与Python的位数不一致。导致 getDefaultJVMPath() 方法返回的是 None。 下载HanLP (1

HanLP vs LTP 分词功能测试

帅比萌擦擦* 提交于 2019-11-30 03:07:37
文章摘自github,本次测试选用 HanLP 1.6.0 , LTP 3.4.0 测试思路 使用同一份语料训练两个分词库,同一份测试数据测试两个分词库的性能。 语料库选取1998年01月的人民日报语料库。199801人民日报语料 该词库带有词性标注,为了遵循LTP的训练数据集格式,需要处理掉词性标注。 测试数据选择SIGHan2005提供的开放测试集。 SIGHan2005的使用可以参见其附带的readme。 HanLP java -cp libs/hanlp-1.6.0.jar com.hankcs.hanlp.model.perceptron.Main -task CWS -train -reference ../OpenCorpus/pku98/199801.txt -model cws.bin mkdir -p data/model/perceptron/pku199801 mv -f cws.bin data/model/perceptron/pku199801/cws.bin 默认情况下,训练的迭代次数为5。 修改 src/main/resouces 文件: root=../test-hanlp-ltp 打包命令: gradle clean build ​ SIGHan2005的MSR测试集 执行命令: java -cp build/libs/test-hanlp

java分词工具hanlp介绍

心不动则不痛 提交于 2019-11-30 03:07:19
前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”。 HanLP是由一系列模型预算法组成的工具包,结合深度神经网络的分布式自然语言处理,具有功能完善、性能高效、架构清晰、语料时新、可自定义等特点,提供词法分析、句法分析、文本分析和情感分析等功能,是GitHub最受欢迎、用户量最大(超过13000个star)、社区活跃度最高的自然语言处理技术。 HanLP完全开源,包括词典。不依赖其他jar,底层采用了一系列高速的数据结构,如双数组Trie树、DAWG、AhoCorasickDoubleArrayTrie等,这些基础件都是开源的。官方模型训练自2014人民日报语料库,您也可以使用内置的工具训练自己的模型。 通过工具类HanLP您可以一句话调用所有功能,文档详细,开箱即用。底层算法经过精心优化,极速分词模式下可达2,000万字/秒,内存仅需120MB。在IO方面,词典加载速度极快,只需500 ms即可快速启动。HanLP经过多次重构,目前已经更新到了1.7版本,新增并完善了中文分词、命名实体识别、信息抽取、文本分类、文本聚类、画法分析等功能,使用效率和适用性得到了大幅提升。 来源: oschina 链接: https://my.oschina.net/u/3793864/blog/3068870

汉语言处理包Hanlp的使用

一个人想着一个人 提交于 2019-11-29 18:55:36
本来想通过python调用Java实现Hanlp的使用,参考文章: http://t.cn/RUrIF7z ##########python可以用easy_install安装一些软件############ 1.JPype使用介绍 参考: http://michael-paul.iteye.com/blog/1055786 Python 作为一种灵活的软件开发语言在当今被广泛使用。在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目的。因此,找到一个 Python 代码调用 Java 代码的桥梁是非常有意义的。 JPype 就是这样的一个工具,利用它可以使 Python 程序方便的调用 Java 代码,从而扩充 Python 语言的能力,弥补 Python 语言的不足。本文介绍了如何利用 JPype 整合 Python 程序和 Java 程序的一些基本方法。 下面是一个简单的 python 程序,通过 JPype 调用 Java 的打印函数,打印出字符串。 清单 1. hello world import jpype jvmPath = jpype.getDefaultJVMPath() jpype.startJVM(jvmPath) jpype.java.lang.System.out.println( “ hello

Hanlp中使用纯JAVA实现CRF分词

自作多情 提交于 2019-11-29 18:54:57
与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 双数组Trie树(DoubleArrayTrie)储存,得到了一个高性能的中文分词器。 开源项目 本文代码已集成到HanLP中开源: http://hanlp.com/ CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。 CRF解码 解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下: 首先任何字的标签不仅取决于它自己的参数,还取决于前一个字的标签。但是第一个字前面并没有字,何来标签?所以第一个字的处理稍有不同,假设第0个字的标签为X,遍历X计算第一个字的标签,取分数最大的那一个。 如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s',s),其中s'为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4

HanLP1.5.2 -python使用介绍

浪尽此生 提交于 2019-11-29 18:54:23
自然语言处理 中文分词 词性标注 命名实体识别 依存句法分析 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁 http://hanlp.com/ https://github.com/hankcs/HanLP HanLP: Han Language Processing 之前需要做一个中文命名实体识别的api,看完了一些相关论文以后觉得短时间内自己实现不大现实,于是找了一些开源工具,其中哈工大的LTP效果是很好的,但是免费使用限流量,需要给钱才行; NLPIR的pynlpir似乎还不能支持命名实体识别等复杂工作,只能做一些分词之类;最后还剩下Hanlp,感谢Hanlp的作者hancks无私的将代码开源,还提供了那么详细的文档。 pyhanlp只有少数功能,其他复杂一点的功能需要使用python调用java代码来实现。 以下是api的模型部分,大多是照着文档写成的。 python调用java需要jpype库,具体安装请参考之前的博客:jpype安装的简便方法 In [1]: import jpype from jpype import * jvmPath = jpype.getDefaultJVMPath() print(jvmPath) jpype.startJVM(jvmPath) jpype.java.lang.System.out.println("hello

pyhanlp 分词与词性标注

对着背影说爱祢 提交于 2019-11-29 18:54:11
pyhanlp中的分词器简介 pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式 第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分词器,而现在默认的就是第一种维特比分词器 维特比 (viterbi):效率和效果的最佳平衡。也是最短路分词,HanLP最短路求解采用Viterbi算法 双数组trie树 (dat):极速词典分词,千万字符每秒(可能无法获取词性,此处取决于你的词典) 条件随机场 (crf):分词、词性标注与命名实体识别精度都较高,适合要求较高的NLP任务 感知机 (perceptron):分词、词性标注与命名实体识别,支持在线学习 N最短路 (nshort):命名实体识别稍微好一些,牺牲了速度 第二种方式是使用JClass直接获取java类,然后使用。这种方式除了获取上面的五种分词器以外还可以获得一些其他分词器,如NLP分词器,索引分词,快速词典分词等等 两种使用方式的对比 第一种是使用作者给的HanLP直接获取分词器,直接segment() 会获取 默认的标准分词器也就是维特比分词器,也**可以使用newSegment函数,传入上面的分词器英文名称来获取新的分词器,如使用 HanLP.newSegment("crf") 来获取CRF分词器。**第二种方式是使用JClass从java中获取我们想要的类

hanlp语言处理模型-分词与词性标注

巧了我就是萌 提交于 2019-11-29 18:53:22
hanlp语言处理模型-分词与词性标注 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中、居左、居右 SmartyPants 创建一个自定义列表 如何创建一个注脚 注释也是必不可少的 KaTeX数学公式 新的甘特图功能,丰富你的文章 UML 图表 FLowchart流程图 导出与导入 导出 导入 分词: @Test public void testTrain() throws Exception { PerceptronTrainer trainer = new CWSTrainer(); PerceptronTrainer.Result result = trainer.train( “D:/HanLp/data/test/199801.txt”, “D:/HanLp/data/test/cws.bin” ); // System.out.printf(“准确率F1:%.2f\n”, result.prf 2 ); } public void testCWS() throws Exception { PerceptronSegmenter segmenter = new PerceptronSegmenter(“D:/HanLp