美文网首页
文本处理中的并行处理

文本处理中的并行处理

作者: 习惯了千姿百态 | 来源:发表于2019-08-19 19:25 被阅读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】数据文件分割

    相关文章

      网友评论

          本文标题:文本处理中的并行处理

          本文链接:https://www.haomeiwen.com/subject/ibiesctx.html