中英文并行语料对齐

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

你可能感兴趣的:(Tech,NLP)