fast_align工具包的使用

fast_align是一个优秀的快速词对齐工具包,在GitHub上有详细的介绍

https://github.com/clab/fast_align

具体使用方式:

http://wiki.apertium.org/wiki/Aligning_a_corpus_with_fast_align

注意:使用前必须先进行分词,特别是汉语语料。否则没有实际意义

需要注意的是,这里对文件的格式有一定要求,每行是源语言句子及其目标语言翻译,由带有前导和尾随空格(|||)的三重管道符号分隔。例如3句德语 - 英语平行语料库是:

doch jetzt ist der Held gefallen . ||| but now the hero has fallen .
neue Modelle werden erprobt . ||| new models are being tested .
doch fehlen uns neue Ressourcen . ||| but we lack new resources .

可以用paste命令来完成

paste -d '|||' file1 file2

如test1.txt为:

test2.txt为:

paste  -d' ||| ' test1.txt test2.txt > results.txt

发现一个致命的问题:vi results.txt

只加了一个竖杠,经过测试,只识别-d后引号内第一个字符

在fast_align上进行了测试,只有一个竖杠做分隔符是无法被fast_align识别的,没有更好的方法就只能写python了

也可以先用特殊符号(语料中没有出现的符号)进行分割,然后把该符号用‘ ||| ’进行替换

paste  -d'|' test1.txt test2.txt > results.txt

vi results.txt

:%s/|/ ||| /g

要特别注意的是,|||前后都有一个空格,否则无法识别

./fast_align -i text.fr-en -d -o -v > forward.align
./fast_align -i text.fr-en -d -o -v -r > reverse.align

最后可以把两部分进行合并,得到一个综合考虑两个方向的对齐

./atools -i forward.align -j reverse.align -c grow-diag-final-and > final.align

补充一个,和paste对应,将一个文件按列切分可以使用cut

例:
[root@localhost test]# cut student.data 
NO      Name    Mark
1       lufubo  98
2       cbiao   88
[root@localhost test]# cut -f2,3 student.data 
Name    Mark
lufubo  98
cbiao   88
[root@localhost test]# cut -f2,3 --complement student.data 
NO
1
2

如若要指定字段的定界符,使用-d选项:
[root@localhost test]# cat student.data 
NO;     Name;   Mark
1;      lufubo; 98
2;      cbiao;  88
[root@localhost test]# cut -f2 -d ";" student.data 
        Name
        lufubo
        cbiao
 

将文件排序后去重:

sort -u monoling.pre -o monoling.sort

猜你喜欢

转载自blog.csdn.net/weixin_40240670/article/details/86138211