我想遍历文档文件列表,对其进行处理并将结果输出到单个文件中,但要指定文件 ID。处理包括:标记去除、标记化、句子分割。
输入是这样的:
/path/to/file1 docid1
/path/to/file2 docid2
输出将是标记,每行一个,标记包含 docid 和句子 nr:
<D=docid1.1>
tok1
tok2
</D>
<D=docid1.2>
...
</D>
<D=docid2.1>
...
</D>
我现在这样做的方式如下:
>$outfile
for filename_id in `cat $filelist`
do
filename=`echo $path_id | cut -f1 -d' '`
docid=`echo $path_id | cut -f2 -d' '`
strip_markup.sh $filename \
| tokenize.sh \
| sentence_split.sh \
| add_ids.sh $docid
| >> $outfile
done
现在的问题是我有相当多的小文件,每个步骤都有一些启动时间(启动 JVM、加载模型等),有些相当大。实际运行时间非常快,如非常大(人工)文件所见。分析表明,这一步(分词和句子分割)是我项目中最耗时的一步(其他一些概念上更“复杂”的东西运行得更快。)
基本上我想做的是给strip_markup.sh脚本整个文件列表而不是单个文件名,但是之后需要以某种方式插入ID。如果不是绝对必要,则不应更改输入和输出格式。此外,我们还想使用我们拥有的模块进行标记化和拆分,因为已经以这种方式处理了很多数据。
任何想法如何去做?