事情是这样的,最近实验室在搞一个java web的项目,用的spring mvc的框架。项目组有很多没做过spring的学弟学妹,为了提高效率,我让大家自己先抛开spring来写自己负责的模块,我来把各个模块在spring里集成。
项目里有一个文本分析的模块是一个学妹负责的,里面用到了hanlp,我在集成的时候直接用maven添加的依赖,等集成好了测试的时候发现怎么也测不过,问了学妹才发现为了做实体识别,她用了一个很有意思的方法,自己改了hanlp的词典,手动加了好多词,而且后期版本迭代中还有可能继续改。。。。
改了hanlp的词典就意味着不能用maven直接导入仓库里的包了,只能直接将修改后的data文件放到本地,然后指定路径给hanlp。搜了一下网上很多方法,都是在项目部署的时候,把hanlp的词典数据放到服务器上一个固定位置上,然后再配置hanlp的配置文件,指定一个固定位置。这种方法虽然直接,但是不能把hanlp的词典数据跟整个项目打包到一起,管理起来很麻烦。倘若把数据直接作为项目的资源文件,部署到tomcat上后无论怎么在配置里写路径都会提示找不到词典文件。研究了一下hanlp的issue之后,我发现这个项目支持自定义读写文件的io类。在一个将词典数据放到hdfs上的一个blog启发下,我想了一个很鸡贼的方法,我重写一个ioadapter类,使用读写静态资源文件的方法读取词典数据了,这样不就可以把data跟项目打包到一起了嘛。
代码如下:
package com.car.util.nlp;
import com.hankcs.hanlp.corpus.io.iioadapter;
import org.springframework.core.io.classpathresource;
import java.io.*;
public class resourcesfileioadapter implements iioadapter{
@override
public inputstream open(string path) throws ioexception {
classpathresource resource = new classpathresource(path);
inputstream is = new fileinputstream(resource.getfile());
return is;
}
@override
public outputstream create(string path) throws ioexception{
classpathresource resource = new classpathresource(path);
outputstream os = new fileoutputstream(resource.getfile());
return os;
}
}
整好了之后把data文件夹和hanlp.properties放到项目的资源文件夹里,在配置文件里修改一下路径和ioadapte:
root=
ioadapte=com.car.util.nlp.resourcesfileioadapter
不知道正确的解决方案应该是啥,感觉这个方法还是很鸡贼的。
文章来源于狼血wolfblood的博客
arduino童芯派彩屏显示图片,图片取模后在TFT液晶显示
英特尔推出Hybrid Bonding技术 推进高端封装演进
中国在5G发展方面处于领先地位美国或将在这场竞赛中落后
硅片级可靠性测试详解
基于智能系统监控设备的风扇速度控制技术
Spring框架中调用HanLP分词的方法
HDCJ-A冲击电流发生器使用说明
特斯拉上海超级工厂的产能现已达25万辆每年,计划增加至45万辆
LTM8033-超低噪声、符合EMC规格的36Vin、3A
水晶光电通过“国家企业技术中心”名单认定
滤波器的详细分类
无人值守变电站综合监控系统的作用、组成及电力加密网关的特点
家庭音响+互联网,玩起新创意
迪拜为了推动环保事业 电动车充电两年不收费
专用SOC安全控制架构的研究与设计
土壤水分温度电导率传感器的特点及参数
特斯拉四轮降价,在华销量却大跌,原因为何?
如何用SQLE自动审核Java应用
适用于TI mmWave sensor单芯片SOC平台的连续波点频模式设置方法
自动检测LED故障的方法介绍