我有两个文件。两个文件都有相等行数(每行1000个)。我必须比较这些文件并在第三个文件中写出差异。每个并发行可能包含不同数量的字词。
我在Ubuntu中尝试过diff
命令。但它既不能与乌尔都语合作,也不能提供必要的结果。
我已经尝试并更新了this java代码的已接受答案。
我不在这里发帖代码问题会变得冗长。
示例输入文件一:
因此,这几乎是一个绅士的定义,说他是一个永远不会造成痛苦的人
这个描述都是精炼的,只要它准确无误,他主要只是在
中被占用示例输入文件二:
因此,这就是绅士的最大定义,因为他是一个永远不会感染疼痛的人
这个描述既精确又精确,因为它准确无误。他主要仅仅占据
必填项:
几乎=>最
说=>铺设
造成=>感染
refine =>精炼
as =>
占用=占用
任何可以为我做这个技巧的脚本/代码/软件或命令将不胜感激。我了解Java,还有Ubuntu 16.10
和Windows 10
如果是java代码,那么我知道文件处理并编写了文件编写代码。
注意:最初的文件位于乌尔都语中。所以它的Unicode。我没有发布乌尔都语,因为世界上大多数人都不理解它。我正在比较语音识别结果。文件一是输入文件,文件二是识别后的结果。
答案 0 :(得分:0)
这是我放在一起的快速算法
它查找要打印的一系列不相似的单词,优先考虑类似的长度系列
List<String> output = new ArrayList<String>();
String lineA = "stuff and a few things";
String lineB = "stuff and maybe many things";
String[] a = lineA.split(" ");
String[] b = lineB.split(" ");
int counterA = 0;
int counterB = 0;
while(counterA < a.length && counterB < b.length)
{
if(a[counterA].equals(b[counterB])) //check if next two elements are equal
{
counterA++;
counterB++;
continue;
}
//search from array a looking for matches in array b
int aStart = -1;
int aStop = -1;
for(aStart = counterA; aStart < a.length && aStop == -1; aStart++)
for(int i = counterB; i < b.length && aStop == -1; i++)
if(a[aStart].equals(b[i]))
aStop = i;
if(aStop == -1) //no matches, select rest of both lists
{
aStart++; //need to inc start one extra time
aStop = b.length;
}
//search from array b looking for matches in array a
int bStart = -1;
int bStop = -1;
for(bStart = counterB; bStart < b.length && bStop == -1; bStart++)
for(int i = counterA; i < a.length && bStop == -1; i++)
if(b[bStart].equals(a[i]))
bStop = i;
if(bStop == -1) //no matches, select rest of both lists
{
bStart++; //need to inc one extra time
bStop = a.length;
}
//find which one is more similar
int aDist = Math.abs((--aStart - counterA) - (aStop - counterB)); //aStart and bStart are incremented 1 too many times
int bDist = Math.abs((--bStart - counterB) - (bStop - counterA));
if(aDist < bDist) //a's findings are a better match
{
String out = "";
for(int i = counterA; i < aStart; i++)
out += a[i] + " ";
out += "=> ";
for(int i = counterB; i < aStop; i++)
out += b[i] + " ";
out = out.substring(0, out.length() - 1); //remove last space
output.add(out);
counterA = aStart;
counterB = aStop;
}
else //b's findings are a better match
{
String out = "";
for(int i = counterA; i < bStop; i++)
out += a[i] + " ";
out += "=> ";
for(int i = counterB; i < bStart; i++)
out += b[i] + " ";
out = out.substring(0, out.length() - 1); //remove last space
output.add(out);
counterA = bStop;
counterB = bStart;
}
}
System.out.println(output);
在这个例子中,它打印“[几个=>多个]”(列表中的[])
在文件的每一行上运行它,它应该给出一个相当不错的差异