概述
对中科院提供的文本相似度计算模块使用Java实现。
1:需要将模块提供的Data文件夹拷贝到项目,这里拷贝到lib下,用于初始化的时候进行加载。
2:利用OSInfo.java加载TextSimilarity.dll和TextSimilarity.lib,这里需要将其放置到
resource/win32-x86-64/win64/目录下,并add to build path。
3:添加jna-4.0.4.jar,通过这个jar包调用本地方法。
4:类比于中科院分词模块,实现文本相似度模块的Java实现。
package com.util;
/**
* 获取组件路径
*
* @author move
*
*/
public class OSInfo {
private static String OS_NAME = System.getProperty("os.name").toLowerCase();
private static String OS_ARCH = System.getProperty("os.arch").toLowerCase();
/**
* 根据操作系统获得对应的组件路径
*
* @param module
*
组件名(不带扩展名)
* @return 形式如下:linux64/组件名.扩展名、win32/组件名.扩展名
*/
public static String getModulePath(String module) {
String folder = ""; // 文件夹名
String extension = ""; // 扩展名
if (OS_NAME.contains("win")) {
extension = ".dll";
if (OS_ARCH.contains("86")) {
folder = "win32/";
} else {
folder = "win64/";
}
} else {
extension = ".so";
if (OS_ARCH.contains("86")) {
folder = "linux32/";
} else {
folder = "linux64/";
}
}
return folder + module + extension;
}
}
package com.sim;
import com.util.OSInfo;
import com.sun.jna.Library;
import com.sun.jna.Native;
/**
* 文本文件相似度计算接口。<p>
* 定义了计算文本相似度的方法,以及加载了底层实现的本地方法。
* @author yins
* @date 2019年12月31日 上午11:48:46
*/
public interface TextSimLib extends Library{
// 定义并初始化接口的静态变量,通过JNA调用TextSimilarity.dll;
public static TextSimLib Instance = (TextSimLib) Native.loadLibrary(OSInfo.getModulePath("TextSimilarity"), TextSimLib.class);
/**
* 组件初始化
*
* @param sDataPath
*
Data文件夹的父目录,如果为空字符串(即:""),那么,程序自动从项目的根目录中寻找
* @param encoding
*
编码格式,具体的编码对照如下: 0:GBK;1:UTF8;2:BIG5;3:GBK,里面包含繁体字
* @param sLicenceCode
*
授权码,为空字符串(即:"")就可以了
* @return true:初始化成功;false:初始化失败
*/
public int TS_Init(String sDataPath, int encoding, String sLicenceCode);
/**
* 计算文本文件的相似度,磁盘上的
* @author yins
* @date 2019年12月31日上午11:56:51
* @param f1 文件路径
* @param f2
* @param model 选择相似度比较模型
* 1 : 字模型,速度最快,适用于相对规范的短文本
* 2 : 词模型,速度适中,常规适用于正常规范的长文档
* 3 : 主题词模型,速度最慢,考虑语义最多,适合于复杂文本
* @return
*/
public double TS_ComputeSimFile(String f1, String f2, int model);
/**
* 计算文本文件的相似度,内存中的
* @author yins
* @date 2019年12月31日上午11:56:51
* @param f1 文件路径
* @param f2
* @param model 选择相似度比较模型
* 1 : 字模型,速度最快,适用于相对规范的短文本
* 2 : 词模型,速度适中,常规适用于正常规范的长文档
* 3 : 主题词模型,速度最慢,考虑语义最多,适合于复杂文本
* @return
*/
public double TS_ComputeSim(String f1, String f2, int model);
}
/**
* @author yins
* @date 2019年12月31日上午11:58:23
*/
package com.sim;
/**
* 对文本相似度计算接口TextSinLib进行封装。
* @author yins
* @date 2019年12月31日 上午11:58:23
*/
public class TextSimLibImpl {
/**
* 组件初始化
*
* @param sDataPath
*
Data文件夹的父目录,如果为空字符串(即:""),那么,程序自动从项目的根目录中寻找
* @param encoding
*
编码格式,具体的编码对照如下: 0:GBK;1:UTF8;2:BIG5;3:GBK,里面包含繁体字
* @param sLicenceCode
*
授权码,为空字符串(即:"")就可以了
* @return true:初始化成功;false:初始化失败
*/
public static int simInit(String sDataPath, int encoding, String sLicenceCode){
return TextSimLib.Instance.TS_Init(sDataPath, encoding, sLicenceCode);
}
/**
* 计算文本文件的相似度,磁盘上的
* @author yins
* @date 2019年12月31日上午11:56:51
* @param f1 文件路径
* @param f2
* @param model 选择相似度比较模型
* 1 : 字模型,速度最快,适用于相对规范的短文本
* 2 : 词模型,速度适中,常规适用于正常规范的长文档
* 3 : 主题词模型,速度最慢,考虑语义最多,适合于复杂文本
* @return
*/
public static double computeSimFile(String f1, String f2, int model){
return TextSimLib.Instance.TS_ComputeSimFile(f1, f2, model);
}
/**
* 计算文本文件的相似度,内存中的
* @author yins
* @date 2019年12月31日上午11:56:51
* @param f1 文件路径
* @param f2
* @param model 选择相似度比较模型
* 1 : 字模型,速度最快,适用于相对规范的短文本
* 2 : 词模型,速度适中,常规适用于正常规范的长文档
* 3 : 主题词模型,速度最慢,考虑语义最多,适合于复杂文本
* @return
*/
public static double computeSim(String f1, String f2, int model){
return TextSimLib.Instance.TS_ComputeSim(f1, f2, model);
}
}
/**
* @author yins
* @date 2019年3月21日下午8:21:51
*/
package com;
import com.sim.TextSimLibImpl;
/**
* @author yins
* @date 2019年3月21日 下午8:21:51
*/
public class Test {
public static void main(String[] args) {
TextSimLibImpl.simInit("lib", 1, "");
String f1 = "test/a.TXT";
String f2 = "test/b.TXT";
String f3 = "test/c.TXT";
double sim1 = TextSimLibImpl.computeSimFile(f1, f2, 3);
double sim2 = TextSimLibImpl.computeSimFile(f1, f3, 3);
double sim3 = TextSimLibImpl.computeSimFile(f3, f2, 3);
System.out.println(sim1);
System.out.println(sim2);
System.out.println(sim3);
}
}
最后
以上就是温柔香菇为你收集整理的中科院文本相似度模块Java实现调用的全部内容,希望文章能够帮你解决中科院文本相似度模块Java实现调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复