単語リストを数値化(ID化)するPerlワンライナー
2014-02-04-3
[Programming]
よくやるタスクなので参照用にメモしておく。
■Case1: 指定したカラムの単語にIDをふる。
t1.txt :
■Case2: 2カラム目以降の単語にIDをふる。
t2.txt :
ついでに頻度も数える。
■IDを元の単語に戻す
IDを元の単語に戻すには下記を参照されたい。
- [を] Perl ワンライナーで join する(辞書引き結果を行データに追加するときに便利)[2013-12-23-1]
Case2の最初のやつの出力(t2.dic)を辞書として使った例:
t2.dic : 辞書 (ID to 単語)
b.txt : 何かの処理結果
第1カラムの数字IDを元の単語に戻す:
■Case1: 指定したカラムの単語にIDをふる。
t1.txt :
ABB 123 あいう ABA 124 えおか ABA 125 かき BBA 130 くけこ ABA 125 かき
% perl -F"\t" -anle '$t=$F[2];if(!$s{$t}){$s{$t}=++$i;print"$i\t$t"}' t1.txt 1 あいう 2 えおか 3 かき 4 くけこ
■Case2: 2カラム目以降の単語にIDをふる。
t2.txt :
P かっこいい 人 登場 N ひどい 食事 幻滅 - こんにちは よろしく P 素敵 かっこいい 自転車 N まったく ゆるせない ひどい
% perl -F"\t" -anle 'for(@F[1..$#F]){if(!$s{$_}){$s{$_}=++$i;print"$i\t$_"}}' t2.txt 1 かっこいい 2 人 3 登場 4 ひどい 5 食事 6 幻滅 7 こんにちは 8 よろしく 9 素敵 10 自転車 11 まったく 12 ゆるせない
ついでに頻度も数える。
% perl -F"\t" -anle 'for(@F[1..$#F]){$s{$_}=++$i if!$s{$_};$n{$_}++}; END{for(keys%s){print"$s{$_}\t$_\t$n{$_}"}}' t2.txt | sort -n 1 かっこいい 2 2 人 1 3 登場 1 4 ひどい 2 5 食事 1 6 幻滅 1 7 こんにちは 1 8 よろしく 1 9 素敵 1 10 自転車 1 11 まったく 1 12 ゆるせない 1
■IDを元の単語に戻す
IDを元の単語に戻すには下記を参照されたい。
- [を] Perl ワンライナーで join する(辞書引き結果を行データに追加するときに便利)[2013-12-23-1]
Case2の最初のやつの出力(t2.dic)を辞書として使った例:
t2.dic : 辞書 (ID to 単語)
1 かっこいい 2 人 3 登場 4 ひどい 5 食事 6 幻滅 7 こんにちは 8 よろしく 9 素敵 10 自転車 11 まったく 12 ゆるせない
b.txt : 何かの処理結果
1 P 4 N 6 N 8 P 9 P 12 N
第1カラムの数字IDを元の単語に戻す:
% perl -F"\t" -anle 'BEGIN{open(h,shift);while(<h>){chomp;@x=split; $d[$x[0]]=$x[1]}} print"$d[$F[0]]\t$_"if$d[$F[0]]' t2.dic b.txt かっこいい 1 P ひどい 4 N 幻滅 6 N よろしく 8 P 素敵 9 P ゆるせない 12 N