gpt4 book ai didi

java - 比较两个 Unicode 文件并将输出写入第三个文件

转载 作者:行者123 更新时间:2023-12-04 18:33:51 25 4
gpt4 key购买 nike

我有两个文件。两个文件都有 等于 行数(每行 1000 行)。我必须比较这些文件并在第三个文件中写入差异。每个并发行可能有不同数量的单词。

我试过diff Ubuntu中的命令。但它既不适合乌尔都语,也不提供所需的结果。

我已经尝试并更新了 this 的接受答案 java 代码。

我不在这里发布代码问题会变得冗长。

示例输入文件一:

因此,说他是一个从不造成痛苦的人,这几乎是一个绅士的定义

这个描述既精致又准确,他主要只专注于

示例输入文件二:

因此,君子的最定义是他是一个从不感染痛苦的人

这个描述既精致又准确,他主要只是在

要求输出:

几乎 => 大多数

说 => 躺着

造成=>感染

精炼 => 精炼

作为=>

占用=占用

任何可以为我解决问题的脚本/代码/软件或命令将不胜感激。我知道Java,也有Ubuntu 16.10Windows 10
如果是 java 代码,那么我知道文件处理并编写了文件编写代码。

注意:最初的文件是乌尔都语。所以它的Unicode。我没有发布乌尔都语,因为世界上大多数人都不理解它。我正在比较语音识别结果。文件一为输入文件,文件二为识别后的结果。

最佳答案

这是我放在一起的快速算法

它寻找一系列不相似的单词来打印,优先考虑相似长度的系列

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);

在此示例中,它打印“[a few => maybe many]”(列表中的 [])

在文件的每一行上运行它,它应该给出一个相当好的差异

关于java - 比较两个 Unicode 文件并将输出写入第三个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com