为 agrep.exe 多次使用 Java ProcessBuilder
Multiple using of Java ProcessBuilder for agrep.exe
我的 Java 程序需要启动 agrep.exe 并为大矩阵中的所有元素对设置参数,并获取两个字符串的匹配错误数。我写了一个代码,但是运行起来很慢。我可以加速这部分代码吗?或者,也许你可以建议我一些 java agrep 函数的实现?
public static double getSignatureDistance(String one, String two) throws IOException, InterruptedException {
String strReprOne = one.replace(".*","").replace("\.",".");
String strReprTwo = two.replace(".*","").replace("\.",".");
PrintWriter writer = new PrintWriter("tmp.txt", "UTF-8");
writer.print(strReprTwo);
writer.close();
List<String> cmd = new ArrayList<>();
cmd.add("agrep.exe");
cmd.add("-B");
cmd.add(one);
cmd.add("tmp.txt");
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process proc = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
StringBuilder lineBuilder = new StringBuilder();
String line = "";
char[] buf = new char[2];
while (in.read(buf) == 2) {
lineBuilder.append(buf);
}
line = lineBuilder.toString();
Pattern p = Pattern.compile("(\d+)\serror");
Matcher m = p.matcher(line);
double agrep = 0;
if(m.find()) {
agrep = Double.valueOf(m.group(1));
}
in.close();
proc.destroy();
double length = strReprOne.length();
return agrep/length;
}
我可以为此目的使用 FREJ 库吗?比如对字符串进行匹配,得到匹配结果乘以匹配区域的长度?
没人知道,所以我使用了 FREJ 库。
我的 Java 程序需要启动 agrep.exe 并为大矩阵中的所有元素对设置参数,并获取两个字符串的匹配错误数。我写了一个代码,但是运行起来很慢。我可以加速这部分代码吗?或者,也许你可以建议我一些 java agrep 函数的实现?
public static double getSignatureDistance(String one, String two) throws IOException, InterruptedException {
String strReprOne = one.replace(".*","").replace("\.",".");
String strReprTwo = two.replace(".*","").replace("\.",".");
PrintWriter writer = new PrintWriter("tmp.txt", "UTF-8");
writer.print(strReprTwo);
writer.close();
List<String> cmd = new ArrayList<>();
cmd.add("agrep.exe");
cmd.add("-B");
cmd.add(one);
cmd.add("tmp.txt");
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process proc = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
StringBuilder lineBuilder = new StringBuilder();
String line = "";
char[] buf = new char[2];
while (in.read(buf) == 2) {
lineBuilder.append(buf);
}
line = lineBuilder.toString();
Pattern p = Pattern.compile("(\d+)\serror");
Matcher m = p.matcher(line);
double agrep = 0;
if(m.find()) {
agrep = Double.valueOf(m.group(1));
}
in.close();
proc.destroy();
double length = strReprOne.length();
return agrep/length;
}
我可以为此目的使用 FREJ 库吗?比如对字符串进行匹配,得到匹配结果乘以匹配区域的长度?
没人知道,所以我使用了 FREJ 库。