文本处理中的并行处理
2019-08-19 本文已影响0人
习惯了千姿百态
前言
在做语言模型时,我们通常需要对从网上爬取的文本进行预处理,如去标点,分词,英文大小写转换等等,通常这些文本很大,如果只用一个进程去处理则会耗时严重。而这些预处理工作是可以并行处理的,最后将处理得到的文件合并在一块即可,节省大量的时间。
文本分割
按照文件大小分割
split -b [size] [input-file] -d -a [suffix-length] [output-dir+prefix]
eg:
split -b 1G lm4_03_mobile_all -d -a 2 lm4_seg/lm4_
将文件lm4_03_mobile_all 按照1G的大小分割,将分割后的文件存放在lm4_seg文件夹下,命名方式为lm4_+后缀标号,-a 2表示后缀标号为2位,-d表示用数字编号
分割的大小:在split命令中,除了k(KB),还可以使用M(MB)、G(GB)、c(byte)、w(word)
但是在分割过程中,出现了有的segment乱码了,原因不明。这里推荐使用下面这种,按照文本的行数进行分割
按照行数分割
split -l [lines-num] [input-file] -d -a [suffix-length] [output-dir+prefix]
eg:
split -l 32127784 lm4_03_mobile_all -d -a 2 lm4_seg/lm4_
对input-file按照lines-num分割,即分割后的每个文件有lines-num行(最后一个文件可能不足lines-num行)
并行处理
# 对lm4_开头的文件进行操作
for i in lm4_*
do
{
# 这里执行对文件的操作,比如我这里是对文件$i进行分词处理,将分词的结果保存在wx/文件
# 夹下,方便以后进行整合
cat $i | python ../../segment.py ../../dict/dict2 > wx/${i}_seg
}& # 这个别忘了!!!
done
wait # 这个也别忘了!!!
这样就可以进行并行处理了。通过top命令,可以发现出现很多进程在进行文本处理