我有两个文件中的并行语料库(一个用德语,另一个用英语),句子对齐。这意味着在文件的每一行上,另一个文件中的同一行包含其转义。
然而,在德语语料库中,有些句子仍然是英语(或者它们只是奇怪的标签),例如:
file.en, line 500: The house is small file.de, line 500: Das Haus ist klein
file.en, line 501: The cat is big file.de, line 501: The cat is big
file.en, line 444: EMEA/CVMP/424/01 file.de, line 444: EMEA/CVMP/424/01
由于我需要保留句子的顺序,我想检测这些重复项(string1 == string2
)并从两个文件中删除它们,以便之后句子仍然对齐。
我见过awk
的一些解决方案,但没有一个与我的问题相符。
有什么想法吗?
注意:文件数百万行。
答案 0 :(得分:3)
你可以使用一个小的perl脚本,除了内存中的直接行之外,它不需要存储任何东西。
只是逐行比较两个文件,只打印不同的文件。
use warnings;
use strict;
open(my $fh1,'<','file');
open(my $fh2,'<','file2');
open(my $fh3,'>','outfile');
open(my $fh4,'>','outfile2');
while (my $line = <$fh1>){
my $line2 = <$fh2> ;
if($line ne $line2){
print $fh3 $line;
print $fh4 $line2;
}
}
用作
perl script.pl
答案 1 :(得分:3)
刚刚学习awk :)所以这是我的解决方案:
paste file.en file.de -d@ | awk 'BEGIN{FS="@";}{if ($1 != $2) {print $1 > "file.en_fixed"; print $2 > "file.de_fixed";}}'
测试它并且它有效。
更短的版本,感谢123:
paste file.en file.de -d@ | awk 'BEGIN{FS="@";}$1 != $2{print $1 > "file.en_fixed"; print $2 > "file.de_fixed";}'
答案 2 :(得分:1)
您可以使用Python轻松完成:
f = open('input_file', 'r')
out = open('out_file', 'w')
for line in f.readlines():
x = line.split('file')[1].split(':')[-1].split()
y = line.split('file')[-1].split(':')[-1].split()
if x != y:
out.write(line)