文本处理中的并行处理

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命令,可以发现出现很多进程在进行文本处理

参考资料

  1. shell并行(并发或者叫多进程)执行的陷阱
  2. 【shell】数据文件分割
上一篇下一篇

猜你喜欢

热点阅读