私は1,700,000語を含むファイルを持っています。私は単語の素朴なステミングをしたい、単語の長さが6文字以上の場合、私は6番目の位置の後にすべての文字を削除します。たとえば:bashを使ってすべての単語のn番目の位置からすべての文字を削除するには?
Input:
Everybody is around
Everyone keeps talking
Output:
Everyb is around
Everyo keeps talkin
私は次のスクリプトを書きました:
INPUT=train.txt
while read line; do
for word in $line; do
new="$(echo $word | awk '{print substr($0,1,6);exit}')"
echo -n $new >> train_stem_6.txt
echo -n ' ' >> train_stem_6.txt
done
echo ' ' >> train_stem_6.txt
done < "$INPUT"
これは完全に質問に答えるが、それは非常に遅いです、と私は170万言葉を持っているので、それは永遠にかかります。 bashスクリプトを使ってこれを行うより速い方法がありますか?
ありがとう、
が、追加のプロセスが開始されたためにプロセスが遅くなります。 'bash'を使った部分文字列の選択を検討してください:http://tldp.org/LDP/abs/html/string-manipulation.html – Bernhard
ハイフネーションされた単語はどうですか?句読点はありますか? – 123
あなたのアルゴリズムによって引き起こされるフォークの数が多いため、コードが遅かったと思います。 'awk'はファイルを直接読み取ることができるので、1つのawkコマンドだけを使ってリファクタリングすることができます。 – Aif