fast_align工具包的使用

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

https://github.com/clab/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

事实证明对于较大的语料不如用python,比较快而且不轻易出bug

#encoding=utf-8
import codecs
from tqdm import tqdm
rootpath = ''
topath   = ''
with codecs.open(rootpath,'r') as f1, codecs.open(topath,'w') as f2:
    for line in tqdm(f1):
        f1_lines = line.strip().replace('\t',' ||| ')
        f2.write(f1_lines + '\n' )

 

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

./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

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值