統計タプル[閉じる]

統計タプル[閉じる]

各行に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

関連情報