今天有用户想在CSharp里调用 HanLP 的API,遇到了些小问题。所以我干脆自己写了个指南, 一步步演示IKVM与 HanLP 的集成方法, 供广大C#程序员参考。本方法也可推广到用C#调用任何Java jar类库,并解决classpath的问题。
IKVM 简介
IKVM.NET是一 款开源的Java虚拟机, 可以将hanlp.jar类库转为dll直接供C#程序调用 ,也 可以直接当JVM让hanlp.jar运行在.NET平台上 。请自行下载 IKVM ,本文使用的是ikvm-7.2.4630.5。
HanLP简介
HanLP 是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析、神经网络依存句法分析)。
HanLP由3部分组成:类库hanlp.jar包、模型data包、配置文件hanlp.properties,请前往项目主页下载最新版: https://github.com/hankcs/HanLP/releases
下载后,你需要编辑配置文件第一行的root指向data的父目录, 详见文档 。
在IKVM中运行hanlp.jar
准备工作
Native JVM情况下,我们是这样调用hanlp.jar的,新建一个目录(假定为C:\hanlp),把hanlp.jar和hanlp.properties放进去:
然后cd到这个目录内,一句命令行:
就能运行成功了:
这里通过-cp选项指定了classpath为当前目录,这样 HanLP 就能找到 hanlp.properties了。
另外,在新版HanLP中,移除了所有的main方法,所以可能会报找不到main方法的异常。新版用户不必纠结于命令行调用,直接写代码调用即可。
IKVM命令行
使用IKVM的话,只要将java换成ikvm即可:
效果是一样的:
在C#中调用HanLP
将hanlp.jar转为hanlp.dll
CSharp是不能直接调用jar包的,需要转为dll。IKVM提供了一个转换工具ikvmc,使用方法如下:
ikvmc会输出消息:
同时会在C:\hanlp目录下生成hanlp-1.2.7.dll。
在Visual Studio中使用hanlp.dll
首先新建一个CSharp项目:
然后引用刚才生成的hanlp.dll和ikvm-7.2.4630.5\bin目录下的IKVM.OpenJDK.Core.dll这两个dll:
确定后就能在解决方案资源管理器中看到这两个dll了:
双击hanlp还能进入到类视图:
那么就可以愉快地写代码调用 HanLP 了:
解释一下,
这句的作用是设置classpath到 hanlp.properties所在的目录,请根据情况自由调整。
编译运行,效果如下:
这说明HanLP在CSharp中工作良好。
更多丰富的API
请参考HanLP的项目主页: https://github.com/hankcs/HanLP
Reference
http://stackoverflow.com/questions/3466698/where-does-ikvm-get-its-classpath-from
文章来源于网络