怎么在CSharp中调用HanLP

68次阅读
没有评论

共计 2410 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍“怎么在 CSharp 中调用 HanLP”,在日常操作中,相信很多人在怎么在 CSharp 中调用 HanLP 问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在 CSharp 中调用 HanLP”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

IKVM 简介

IKVM.NET 是一款开源的 Java 虚拟机,可以将 hanlp.jar 类库转为 dll 直接供 C# 程序调用,也可以直接当 JVM 让 hanlp.jar 运行在.NET 平台上。请自行下载
,本文使用的是 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 到这个目录内,一句命令行:

java -cp .;hanlp-1.2.7.jar com.hankcs.hanlp.summary.TextRankSentence

就能运行成功了:

[无限算法的产生是由于未能确定的定义终止条件,  这类算法在有限的时间内终止,  有限的非确定算法]

这里通过 -cp 选项指定了 classpath 为当前目录,这样
HanLP
就能找到 hanlp.properties 了。

另外,在新版 HanLP 中,移除了所有的 main 方法,所以可能会报找不到 main 方法的异常。新版用户不必纠结于命令行调用,直接写代码调用即可。

IKVM 命令行

使用 IKVM 的话,只要将 java 换成 ikvm 即可:

C:\ikvm-7.2.4630.5\bin\ikvm -cp .;hanlp-1.2.7.jar com.hankcs.hanlp.summary.TextRankSentence

效果是一样的:

在 C# 中调用 HanLP 将 hanlp.jar 转为 hanlp.dll

CSharp 是不能直接调用 jar 包的,需要转为 dll。IKVM 提供了一个转换工具 ikvmc,使用方法如下:

C:\hanlp C:\ikvm-7.2.4630.5\bin\ikvmc -target:library C:\hanlp\hanlp-1.2.7.jar

ikvmc 会输出消息:

IKVM.NET Compiler version 7.2.4630.5Copyright (C) 2002-2012 Jeroen Frijtershttp://www.ikvm.net/ note IKVMC0002: Output file is  hanlp-1.2.7.dll

同时会在 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
了:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using com.hankcs.hanlp; namespace HanLPSharp{ class Program { static void Main(string[] args) { java.lang.System.getProperties().setProperty( java.class.path ,  C:\\hanlp Console.WriteLine(HanLP.segment( 你好,欢迎在 CSharp 中调用 HanLP 的 API!)); Console.ReadKey(); } }}

解释一下,

java.lang.System.getProperties().setProperty( java.class.path ,  C:\\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

http://www.ikvm.net/uses.html

到此,关于“怎么在 CSharp 中调用 HanLP”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计2410字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)