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