単語リストを数値化(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
