Spring框架中调用HanLP分词的方法
2017-10-06 13:22
176 查看
我的GitHub博客:咖啡成瘾患者
豌豆镇楼
事情是这样的,最近实验室在搞一个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跟项目打包到一起了嘛。
代码如下:
整好了之后把data文件夹和hanlp.properties放到项目的资源文件夹里,在配置文件里修改一下路径和IOAdapte:
不知道正确的解决方案应该是啥,感觉这个方法还是很鸡贼的。
豌豆镇楼
事情是这样的,最近实验室在搞一个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
不知道正确的解决方案应该是啥,感觉这个方法还是很鸡贼的。
相关文章推荐
- Spring框架中调用HanLP分词的方法
- spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍
- 慎用Spring框架 - 子类会调用父类的@PostConstruct方法
- Spring框架中普通的类如何调用注解Service中的方法
- Java的Spring框架下RMI与quartz的调用方法
- 用httpWebRequest调用https开头的php webservice,报“基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系”错误的解决方法
- JSP---调用javax.swing.JOptionPane类的对话框方法
- 另类调用flash无须激活的方法
- 为什么自定义ViewGroup ondraw方法不会被调用
- 安卓性能调优:内存使用分析和方法调用优化
- asp.net调用js方法小结
- C#中一种可调用的异常处理方法
- java 反射调用Java类的私有set和get方法
- 一个简单安全的PHP验证码类 附调用方法
- 调用发布于IIS7的WebService权限不足问题的解决方法
- php 调用远程url的六种方法小结
- vue实例的简单属性和方法调用
- AsyncTask内的各个方法调用顺序
- JQuery ($.get()) 前台传值到后台并调用后台方法
- AVCaptureDevice中通过调用VideoZoomFactor方法调整焦距实现拉近拉远镜头进行拍照录制视频(动画缩放画面,不闪屏)