1. 语料 MultiUN-zh-en.txt
2. 使用工具:
中文分词工具(stanford segmenter),
英文的tokenizer
对齐工具GIZA++ (giza-pp-v1.0.7.tar.gz)
3. 预处理:
a. 下载 en-zh-multiUN.tmx 版本的 包含了并行的句对,但是句对有些是错误的。需要处理一下,另外有些句子异乎寻常的长(估计是错误,我先删除了,不然在中文分词的时候会报错)。 将en-zh-multiUN.tmx文件拆分了 每10M分成一个文件。
b. 中文分词 下载 stanford segmenter (版本2013-04-04), 使用命令行格式
java -Xmx3072m -cp ./seg.jar edu.stanford.nlp.ie.crf.CRFClassifier -sighanCorporaDict ./data -testFileinput.file -inputEncoding UTF-8 -sighanPostProcessing true -keepAllWhitespaces false -loadClassifier ./data/pku.gz -serDictionary ./data/dict-chris6.ser.gz >output.file ;
input.file 和 output.file 需要替换。
速度比较慢大概10M sentence 需要1小时左右
c. 英文tokenizer (如上链接)
tokenizer.perl -l en < input.file > output.file
最后的到两个文件 一个是英文句子(ensent) 另一个是对应的中文句子(cnsent)。
4. 对齐
下载GIZA++ 编译 make, 编译出来之后,(注:编译之前把Makefile中的 -DBINARY_SEARCH_FOR_TTABLE删掉,否则不生成对齐文件)
有用的工具就是 GIZA++ 对齐工具, mkcls,plain2snt.out, snt2cooc.out 具体是什么还没有研究 基本上是写格式化文件的工具。
a. 命令行 ./plain2snt.out cnsent ensent 将普通文本转化为GIZA++ 格式
生成文件
cnsent(ensent).vcb (uniq_word_id word occurrences_count 例如 627 abandon 10)
cnsent_ensent.snt (一个句对用三行表示:第一行 句对出现次数 第二,三行句对(word用上面的word_id表示))
如
1
1 1 226 5008 621 6492 226 6377 6813 226 9505 5100 6824 226 5100 5222 0 614 10243 613
2769 155 7989 585 1 578 6503 585 8242 578 8142 8541 578 12328 6595 8550 578 6595 6710 1
b. 命令行 ./snt2cooc.out cnsent.vcb ensent.vcb cnsent_ensent.snt > cn_eng.cooc
./snt2cooc.out ensent.vcb cnsent.vcb ensent_cnsent.snt > eng_cn.cooc
生成共线性文件
c. 构建mkcls 文件
./mkcls -pcnsent -Vcnsent.vcb.classes opt
./mkcls -pensent -Vensent.vcb.classes opt
cnsent.vcb.classes 按字母顺序的单词 单词词类 例如(Export 40)
cnsent.vcb.classes 单词词类 及对应的一组词例如(40: Dawood,Ehsan,Expected,Export,Gross,)
d. 运行对齐
./GIZA++ -S cnsent.vcb -T ensent.vcb -C cnsent_ensent.snt -CoocurrenceFile cn_en.cooc -outputpath c2e
./GIZA++ -S ensent.vcb -T cnsent.vcb -C ensent_cnsent.snt -CoocurrenceFile en_cn.cooc -outputpath e2c
Okay