最近一段时间学习了《自然语言处理入门》,作为初学者,我觉得本书不错,这本书主要基于HanLP工具讲解,首先让我从应用的角度理解HanLP工具解决何种问题,比如分词等;其次这工具也包含了很多NLP领域相关的算法,从而能够以一种方式学习机器学习;终极的话可以通过HanLP 算法包完成很多任务,比如自行构建一个nlp的应用程序。
在学习过程中主要使用python,python确实非常好的一门语言,通过JClass加载Java JAR包(HanLP基于Java开发),即使不会Java语言,照样能够学习HanLP领域知识。
这篇文章是个入门,能够概念性理解HanLP如何调用,如何结合Java,如何调用书本中的例子。以下都在windows系统中测试通过。
首先安装pyhanlp相关的包:
$ conda install -c conda-forge openjdk python=3.8 jpype1=0.7.0 -y
$ pip install pyhanlp
其中jpype1包是用来让python调用HanLP的。
其中-c指令是根据特定channel下载包,如何列出目前所有channels?运行如下:
$ conda config --show channels
直接安装在base conda环境下,切换到base环境下:
$ conda activate base
会显示:
pyhanlp>set "JAVA_HOME_CONDA_BACKUP="
pyhanlp>set "JAVA_HOME=C:\ProgramData\Anaconda3\Library"
接下去看看如何使用HanLP,运行下面命令:
$ hanlp --help
第一次运行会下载数据包和jar包,因为hanlp是用java开发的,pyhanlp只是为了方便python调用,jar包包含算法和数据包(模型)。
HanLP本身数据与程序是分离的,portable只包含少量数据,如果需要下载完整的数据(比如词典或其他的功能),就要下载额外的数据包,那么包放在那个位置呢?运行如下命令:
(base) ywdblog>hanlp -v
jar 1.8.3: Anaconda3\Lib\site-packages\pyhanlp\static\hanlp-1.8.3.jar
data 1.8.3: Anaconda3\Lib\site-packages\pyhanlp\static\data
config : Anaconda3\Lib\site-packages\pyhanlp\static\hanlp.properties
hanlp.properties配置了数据包对应的位置,hanlp-1.8.3.jar是jar包,data目录则是具体的数据包,看看目录:
pyhanlp
main.py
static
hanlp-1.8.3.jar
hanlp.properties
data
dictionary
model
pyhanlp包还包含一些test例子,可以fork仓库下来,自己修改后还可以push,运行:
$ (base) ywdblog> python tests/book/ch02/fully_segment.py
此时会报错,因为此处 from tests.book.ch02.utility import load_dictionary
会找不到tests包,简单的解决方案就是设置PYTHONPATH(这种方法可能不是很好),如下:
$ (base) ywdblog> set PYTHONPATH=c:\Users\ywdblog\Desktop\xwj\pyhanlp
因为设置了PYTHONPATH,所以整个运行环境变了,比如运行
$ (base) ywdblog> hanlp -v
jar 1.8.3: pyhanlp\pyhanlp\static\hanlp-1.8.3.jar
data 1.8.3: pyhanlp\pyhanlp\static\data
config : pyhanlp\pyhanlp\static\hanlp.properties
hanlp.properties等数据文件的位置变化了,不过不影响自己的测试。
因为自己不熟悉Java,但还是决定尝试如何以Java方式运行HanLP,首先阅读 https://github.com/hankcs/HanLP/tree/1.x,然后下载 https://github.com/hankcs/HanLP/releases/tag/v1.8.2 源码包,其中包含了book中的示例。
首先在src/main目录下创建resource目录,将pyhanlp中的hanlp.properties文件拷贝到resource目录下,相当于python和java共用一套数据包。
pom.xml
src
main
java
resource
hanlp.properties
test
在vscode中运行ch01/HelloWord.java即可成功。
本文结尾也买个关子,可以这样安装pyhanlp包:
$ conda env create -n pyhanlpenv -f environment.yml
以后也会说说conda的一些用法。