![統計タプル[閉じる]](https://linux33.com/image/107249/%E7%B5%B1%E8%A8%88%E3%82%BF%E3%83%97%E3%83%AB%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
各行に1つの単語を含むテキストファイルがあります。バイグラムを作成し、各バイグラムの繰り返し回数(統計)を計算したいと思います。
私のアプローチ:
cat TEXTEN1.txt | tr '*\n' '*? *\n'
2つの列を作成したいのですが、このソリューションは失敗します。
答え1
paste -d' ' - - < TEXTEN1.txt
生成されたタプルの数を取得するには、次のようにします。
paste -d' ' - - < TEXTEN1.txt | sort | uniq -c
ただし、このアプローチでは、バイグラムの半分は除外されます。たとえば、入力ファイルが次のような場合:
alpha
beta
gamma
alpha
beta
gamma
タプルには行 1-2、3-4、5-6 が含まれますが、行 2-3 と 3-4 は含まれません。
この問題を解決する1つの方法は、入力ファイルのコピーを作成し、一番上の単語以外の文字(「#」など)を追加してから、単語以外の単語を含む結果をフィルタリングすることです。
cat <(paste -d' ' - - < TEXTEN1.txt; paste -d' ' - - < TEXTEN2.txt) | sort | uniq -c | grep -v #
答え2
gnu
システムで以下を実行できます。
paste <(head -n -1 infile) <(tail -n +2 infile) | sort | uniq -c
持ち運べる:
sed -e '1!{$!p' -e '}' infile | paste -d' ' - - | sort | uniq -c
または
awk 'NR>1{i=t" "$0; z[i]++};{t=$0}END{for (i in z){print z[i], i}}' infile
答え3
連続する2行ごとに単語をバイグラムに結合するには、次のようにします。
cat TEXTEN1.txt|sed 'N; s/\n/ /'|sort|uniq -c
これにより、1-2、3-4、5-6などの連続した線対が結合されます。
必要なものがすべての1行(例:1-2、2-3、3-4...)を組み合わせることであれば、次のようにできます。
cat TEXTEN1.txt|sed -n ':a N;s/\n/ /p;s/\w* //;ta'|sort|uniq -c
または(ややエレガントに)使用sed + paste
コンビネーション寄稿者: @don_crissti