数据清洗工具及相关使用方法

最近跟着老师参加了CWMT评测任务,稍微整理下目前用到的数据清洗相关的工具及使用方法。本人目前操作全在Ubuntu16.04下进行。

中文分词工具ansj

安装ansj

Ansj的Github地址

首先需要下载两个jar包ansj_segnlp-lang。一般来说都下载最新的jar包都不会有问题,只用下文件夹内名字最短的哪个jar包就可以了。如果需要用老版的ansj_seg的话,要去jar包中的.pom文件中看下对应nlp-lang的jar包,然后下载。

下载完了后在IDE中将jar包引入即可。

使用方法

目前我使用的分词方式时精准分词,函数为ToAnalysis.parse()。其余方法请移步Ansj的wiki查看。
分词后的输出是带有词性的,使用toStringWithOutNature函数可以去掉词性。

核心代码样例:

1
2
Result parse = ToAnalysis.parse( tmpString );
String resultStr = parse.toStringWithOutNature( " " );

英文分词工具tokenizer.perl

tokenizer.perl是统计机器翻译系统moses的一个小工具,可以用来对英文德文等进行分词。

安装tokenizer.perl

因为该脚本并不是独立运行的,其需要moses自带的一些词库。moses整体不大,建议整体都下载下来。从moses的Github下载即可。该工具位置在[mosesdecoder dir]/scirpts/tokenizer/目录下。

使用方法

建议将待分词文件放在上述文件夹下进行分词操作。输入如下命令进行分词:

1
$ perl tokenizer.perl -l en < [untokenized file] > [tokenized file]

其中:

  1. -l是语言选择,这里选择en即英文。
  2. <代表输入,[untokenized file]是待分词文件
  3. >代表输出,[tokenized file]是分词后的输出文件,如果这个文件不存在则会创建同名文件。

其他用法可以输入下述命令查看:

1
$ perl tokenizer.perl -h

词对齐工具fast_align

安装fast_align

安装过程翻译自fast_align的Github

环境配置

在Ubuntu系统上输入以下命令配置环境,其他系统请自行搜索相对应的安装包:

1
$ sudo apt install libgoogle-perftools-dev libsparsehash-dev

如果系统中没有安装cmake请输入以下命令进行安装:
1
$ sudo apt install cmake

安装

进入fast_align文件夹,顺序执行下述命令进行安装:

1
2
3
4
$ mkdir build
$ cd build
$ cmake ..
$ make

上述命令中..表示的是上一层文件夹,即fast_align文件夹。
安装完成后出现fast_alignatool两个文件即表示成功安装。

使用方法

如果平行预料库源语言和目标语言文件是分开的,则需要手动将其合并成一个文件,格式为:[源语言句子] ||| [目标语言句子]。注意,在”|||”前后是有空格分开的。

样例Python程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/python
# -*- encoding: utf-8 -*-

import sys

def merge( src, trg, out ):
with open( src ) as fs, with open( trg ) as ft, with open( out ) as fo:
for lines, linef in zip( fs, ft ):
fo.write( lines.strip() + " ||| " + linef.strip() )

def main():
if len( sys.argv ) != 4:
print "USAGE: ./python merge.py [src file] [trg file] [out file]"
else:
merge( sys.argv[1], sys.argv[2], sys.argv[3] )

if __name__ == "__main__":
main()

build文件夹下执行下述命令进行正向词对齐:

1
$ ./fast_align -i [filename] -d -o -v > [align_forward_filename]

然后在build文件夹下执行下述命令进行反向词对齐:
1
$ ./fast_align -i [filename] -d -o -v -r > [align_reverse_filename]

最后在build文件夹下执行下述命令进行双向词对齐获得最终词对齐文件:
1
$ ./atool -i [align_forward_filename] -j [align_reverse_filename] -c grow-diag-final-and > [align_file_name]

生成文件格式为i-j的格式,i代表-i文件中该行第i个词,j代表-j文件中该行第j个词。得到最终结果后,中间结果可以删除掉。

注意

fast_align本身线程不安全,尽量不要一次执行多个fast_align程序。