ドキュメントファイルのリストを繰り返し処理し、それらを処理して結果を1つのファイルに出力したいのですが、ファイルIDが示されています。処理には、マークアップの削除、トークン化、文の分割が含まれます。
入力は次のようになります。
/path/to/file1 docid1
/path/to/file2 docid2
出力は、1行に1つずつ、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は後で何らかの方法で挿入する必要があります。どうしても必要でない場合は、入力と出力の形式を変更しないでください。また、多くのデータがすでにそのように処理されているため、トークン化と分割に使用するモジュールを使用したいと思います。
それについてどうやって行くのかアイデアはありますか?