私は gawk を使用して、言語統計を作成するために、少なくとも 3 回出現する 3 つの単語のすべての関連付けを出力するために、大きなテキスト コーパス (約 3 ~ 4GB、電子ブックの編集) を調べています。コードは次のとおりです。
file.awk の内容:
BEGIN { RS="[^[:alnum:]]+" }
{ w1 = w2; w2 = w3; w3 = $0 }
NR > 2 { count[tolower(w1 " " w2 " " w3)]++ }
END {
for (phrase in count) {
if (count[phrase] >= 3) {
print phrase, count[phrase]
}
}
}
コマンド: gawk -f file.awk mytxtfile > 出力
小さなファイル (数百 MB) では問題なく動作しますが、1GB を超えるファイルでは動作しません: gawk は 1 分もかからずにすべての RAM (8GB) を消費し、スワップとシステム全体を消費し始めます。最終的にフリーズします。
最終的にもっと時間がかかる場合でも、コードを最適化する方法を知っていますか?
どうもありがとうございました