hanlp可以使用python调用吗
发布网友
发布时间:2022-04-22 10:34
我来回答
共1个回答
热心网友
时间:2023-06-24 15:02
安装JDK
JPype并没有像IKVM那样实现自己的JVM,而是以pipe方式调用原生JVM。所以我们需要一个JVM,比如:
Oracle JDK
OpenJDK
安装JDK非常简单,分清楚32位和64位即可,必须与OS和Python的位数一致,具体安装过程不再赘述。
唯一需要注意的是,必须设置环境变量JAVA_HOME到JDK的根目录,JDK的安装程序不一定会帮你做这一步。
安装编译工具链
Python的package一般是以源码形式发布的,其中一些C代码必须在用户机器上编译,所以需要安装编译工具链。当然你也可以跳过这步,直接下载binary。
Windows
安装免费的Visual C++ Express 2010。
Debian/Ubuntu
sudo apt-get install g++
Red Hat/Fedora
su -c 'yum install gcc-c++'
安装JPype
本文读者应该都是Python程序员,所以略过了安装Python这一步。不过必须注意的是,JPype版本与Python的对应兼容关系:
Python2.x:JPype
Python3.x:JPype1-py3
使用setup.py安装
下载源码后解压,在目录下运行:
*nix
sudo python3 setup.py install
Windows
python setup.py install
直接下载binary
当然你也可以选择下载binary,比如JPype1-py3主页上的binary列表。
在Pycharm中安装
如果你正在使用Pycharm这款IDE的话,那么事情就简单多了。
首先在Project Interpreter里面点击加号:
搜索JPype,选择你需要的版本安装:
稍等片刻就安装成功了:
测试安装结果
终于又到了写代码的开心时间了,可以通过如下代码测试是否安装成功:
from jpype import *startJVM(getDefaultJVMPath())java.lang.System.out.println("hello world")shutdownJVM()
输出如下结果表示安装成功:
hello worldJVM activity report :classes loaded : 31JVM has been shutdown
调用HanLP
关于HanLP
HanLP是
一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体
识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析
(MaxEnt依存句法分析、神经网络依存句法分析)。
下载HanLP
你可以直接下载Portable版的jar,零配置。
也可以使用自定义的HanLP——HanLP由3部分组成:类库hanlp.jar包、模型data包、配置文件hanlp.properties,请前往项目主页下载最新版:https://github.com/hankcs/HanLP/releases。对于非portable版,下载后,你需要编辑配置文件第一行的root指向data的父目录,详见文档。
这里,假设新建了一个目录(假定为C:\hanlp),把hanlp.jar和hanlp.properties(portable版的话,仅需一个hanlp-portable.jar)放进去:
Python调用
下面是一份Python3的调用示例:
# -*- coding:utf-8 -*-
# Filename: main.py
# Author:hankcs
# Date: 2015/11/26 14:16
from jpype import *
startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\hanlp\hanlp-1.2.8.jar;C:\hanlp", "-Xms1g", "-Xmx1g")
HanLP = JClass('com.hankcs.hanlp.HanLP')
# 中文分词
print(HanLP.segment('你好,欢迎在Python中调用HanLP的API'))
testCases = [
"商品和服务",
"结婚的和尚未结婚的确实在干扰分词啊",
"买水果然后来世博园最后去世博会",
"中国的首都是北京",
"欢迎新老师生前来就餐",
"工信*干事每月经过下属科室都要亲*代24*换机等技术性器件的安装工作",
"随着页游兴起到现在的页游繁盛,依赖于存档进行逻辑判断的设计减少了,但这块也不能完全忽略掉。"]
for sentence in testCases: print(HanLP.segment(sentence))
# 命名实体识别与词性标注
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment('中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程'))
# 关键词提取
document = "水利部水资源司*陈明忠9月29日在*新闻办举行的新闻发布会上透露," \
"根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
"有部分省超过红线的指标。对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
"严格地进行水资源论证和取水许可的批准。"
print(HanLP.extractKeyword(document, 2))
# 自动摘要
print(HanLP.extractSummary(document, 3))
# 依存句法分析
print(HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。"))
shutdownJVM()