利用开源工具搭一套汉英翻译系统(一):预处理工具

语料获取不在赘述,可以去LDC上申请,也可以找找别人放出的免费资源。语料编码默认都是UTF8。

在这里,我们使用FBIS语料,规模在24万句对左右。英语和汉语是两个文件,行对应,行数相同,train.en,train.ch。

系统环境:linux ubuntu 64bit


第一步做训练语料处理:

汉语端需要做分词,全半角转换。

英语端需要做转小写,token(分隔标点和单词),全半角转换

工具:

stanford-segmenter-2015-04-20

stanford-ner-2015-04-20

下载地址:http://nlp.stanford.edu/software/index.shtml

装ner工具是想使用其中的Tokenizer工具,因为该工具被集成到NER和Parser中,不提供单独下载。

两套工具都是以jar包的形式提供调用,需要的jre环境为1.8(jre 8 ),否则会报Exception in thread "main" java.lang.UnsupportedClassVersionError:  Unsupported major.minor version 52.0

stanford segmenter:

斯坦福分词器下载完,解压后,目录如下:


segment.sh就是linux下的运行脚本了,运行一下,会出现命令提示:


其中ctb和pku是两种分词训练语料,中间存在分词标准差异,后面是文件名,编码,是否输出kbest。在这里,我们的命令是: ./segment.sh ctb train.ch UTF-8 0 > train.ch.seg

汉语端分词过程完毕。

ner-tokenizer:

解压后的目录结构:


token.sh和english_fbis_jiujiu.lower是我自己的文件。

token.sh就是调用tokenizer的脚本

由于我的机器上并存了多个版本的jre,所以在前面要加$JAVA_HOME来指定使用哪个java,如果你机器上只有一个,且环境变量配置好了,那就直接用java。

命令里面的-preserveLines可以保证处理完的文件以句子的形式存在,而不是每行一个token,-lowerCase使得小写转换同时做。

调用脚本的命令很简单:./token.sh  train.en > train.en.token


全角转半角:

对两种语言都做全半角转换,去除这些全半角不一致造成的噪音。

下面的两个句子,第一行是全角,第二行是半角,字母和数字在文件中编码不同,但代表的是同一个符号,所以需要做转换。VIte

转化后


转化用的python代码,full2half.py,

参考了http://blog.csdn.net/haoni123321/article/details/42552345

编码问题

#! /usr/bin/python
# encoding:utf-8


import sys
reload(sys);
sys.setdefaultencoding("utf8")


def strQ2B(ustring):

    rstring = ""
    for uchar in ustring:
        inside_code=ord(uchar)
        if inside_code==0x3000:#deal with space
            inside_code=0x0020
        else:
            inside_code-=0xfee0 #deal with other
        if inside_code < 0x0020 or inside_code > 0x7e:
            rstring +=uchar
        else:
            rstring += unichr(inside_code)


    return rstring


if __name__=='__main__':

    for line in open(sys.argv[1]):
        print strQ2B(line.strip('\n').decode('utf-8'))
调用的方式:
./full2half.py src > tgt

至此训练语料预处理完毕,得到两个文件 train.ch.seg_stanford.half , train.en.token.half

下一篇讲使用词对齐环境。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值