たつをの ChangeLog : 2014-05-09

機械学習のデータ加工用のスクリプト。辞書によりテキストから素性を抽出する簡単なプログラムです。先日ちょっと需要がありまして、Pure Perl で動くものを作りました。

あらかじめ用意された辞書(文字列とIDのペア)があり、テキスト中にその辞書の文字列が存在したら対応するIDを出力する、というタスクです。

辞書マッチは最長一致のみではなく、一部重なりや内包含むすべて。最長一致のみならば辞書エントリを長い順にならべてORでつなげた正規表現を作れば一発なのですが、すべて欲しいというわけで(疑似)TRIEを採用。ハッシュで TRIE という懐かしい実装です(初期のJUMAN風)。

■辞書の例 (fepp-dic.txt)。フォーマットは「^エントリ(タブ)ID$」。IDは1始まり。
abc	1
bc	2
c	3
xxx	4
あい	5
あいう	6
いう	7
いうえ	8
うか	9

■テキストの例 (fepp-test.txt)。フォーマットは「^ラベル(タブ)テキスト$」。
1	abcdbdb
0	bcxxx
1	あいうえお
0	そういうかな

■実行例:
% ./fepp.pl fepp-dic.txt < fepp-test.txt 
1:1 2:1 3:1
2:1 3:1 4:1
5:1 6:1 7:1 8:1
7:1 9:1

% ./fepp.pl -a fepp-dic.txt < fepp-test.txt
1 1:1 2:1 3:1
0 2:1 3:1 4:1
1 5:1 6:1 7:1 8:1
0 7:1 9:1

% ./fepp.pl -a -d 3 fepp-dic.txt < fepp-test.txt
[DIC] len=1  a:0, b:0, c:3, x:0, あ:0, い:0, う:0
[DIC] len=2  ab:0, bc:2, xx:0, あい:5, いう:7, うか:9
[DIC] len=3  abc:1, xxx:4, あいう:6, いうえ:8
[INPUT] 1	abcdbdb
[MATCH] abc (1)
[MATCH] bc (2)
[MATCH] c (3)
1 1:1 2:1 3:1
[INPUT] 0	bcxxx
[MATCH] bc (2)
[MATCH] c (3)
[MATCH] xxx (4)
0 2:1 3:1 4:1
[INPUT] 1	あいうえお
[MATCH] あい (5)
[MATCH] あいう (6)
[MATCH] いう (7)
[MATCH] いうえ (8)
1 5:1 6:1 7:1 8:1
[INPUT] 0	そういうかな
[MATCH] いう (7)
[MATCH] うか (9)
0 7:1 9:1

■コード (fepp.pl):
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open ':utf8';
binmode STDOUT, ":utf8";
binmode STDIN, ":utf8";

use Getopt::Long;
my $answer_mode = 0; # input with answer?
my $debug = 0;
GetOptions (
    "answer" => \$answer_mode,
    'debug=s' => \$debug,
    );

my $dat_fn = shift;

my @ndic;
open(my $fh, "<:utf8", $dat_fn) or die;
while (<$fh>) {
    chomp;
    next if not /^(.+?)\t(.+)$/;
    my $id = $2;
    my @c = split(//, $1);
    $ndic[@c]{$1} = $id;
    for (my $i = 0; $i < $#c; $i++) {
        $ndic[$i+1]{join("",@c[0..$i])} ||= 0;
    }
}
close($fh);

if ($debug =~ /(1|3)/) {
    for (my $i = 1; $i < @ndic; $i++) {
        print "[DIC] len=$i  ".join(", ", map {"$_:$ndic[$i]{$_}"} sort keys %{$ndic[$i]})."\n";
    }
}

while (<>) {
    print "[INPUT] $_" if $debug =~ /(2|3)/;
    chomp;
    my $ans = ($_ =~ s/^((.+?)\t)//) ? $2 : ""  if $answer_mode;

    my @c = split(//, $_);
    my %m;
    for (my $i = 0; $i < @c; $i++) {
        for (my $j = $i; $j < @c; $j++) {
            my $s = join("",@c[$i..$j]);
            last if not defined $ndic[$j-$i+1]{$s};
            next if $ndic[$j-$i+1]{$s} == 0;
            print "[MATCH] $s ($ndic[$j-$i+1]{$s})\n" if $debug =~ /(2|3)/;
            $m{$ndic[$j-$i+1]{$s}}++;
        }
    }
    
    print "$ans " if $answer_mode;
    print join(" ", map {"$_:$m{$_}"} sort {$a <=> $b} keys %m)."\n";
    # print join(" ", map {"$_:1"} sort {$a <=> $b} keys %m)."\n";
}

2014年5月9日のヲハニュースをお届けします。

woha

年収は「住むところ」で決まる。競争力のある労働市場がなければ都市は発展しない | 空気読み一人シンクタンク
年収は「住むところ」で決まる。なかなか売れそうな邦題を付けた書籍です。もともとのタイトルはTHE NEW GEOGRAPHY OF JOBS。この本の第三章「給料は学歴より住所で決まる」をもとに付けた名前でしょう。
感覚的に都市競争ってそうなっているよね、ということを論理的にデータも含めて論証した今話題の本です。
すごくおもしろそうな本。
Amazon.co.jp: 年収は「住むところ」で決まる 雇用とイノベーションの都市経済学: エンリコ・モレッティ, 安田洋祐(解説), 池村千秋: 本
「イノベーション都市」の高卒者は、「旧来型製造業都市」の大卒者より稼いでいる!?新しい仕事はどこで生まれているか?「ものづくり」大国にとっての不都合な真実。
Kindle版もある!
Amazon.co.jp: 年収は「住むところ」で決まる ─ 雇用とイノベーションの都市経済学 電子書籍: エンリコ モレッティ, 池村 千秋, 安田 洋祐(解説): Kindleストア

小保方氏の実験ノート、8カ月で4ページ 画像切り貼り、「Science」からも指摘 理研「再調査なし」の理由 (1/4) - ITmedia ニュース
さすがにここまでアレなら、今回の流れの中での「もしかしてあるかも?」は 100% 考えなくてもいいな。あとは政治的なことだけ。お疲れさまでした。
そりゃあまあ、STAP細胞はあるかもしれないけど、それはまた別の機会での登場になるでしょうね、ということで。
関連:Wmの憂鬱、隠し球が決めた小保方さんの研究不正確定【日経バイオテクONLINE Vol.2050】:日経バイオテクONLINE Webマスターの憂鬱 Premium

『ジェットストリーム スタイラス』 タッチペン付3色ボールペン|2014年|プレスリリース|三菱鉛筆株式会社
独自開発のタッチペンが気になる。発売されたら店頭で試してみよっと。

線形代数(行列論と抽象線形代数学)の講義ノートPDF。演習問題と解答付き - 主に言語とシステム開発に関して
おお。

Kindle本の奥付は無い方がいいのでは?問題 | 電明書房
なぜなら、Kindleは最終ページをめくったら☆を付けたり、感想をSNSに流す機能をシステム上で実装してあるにも関わらず、末尾に余計な内容ページがあると既読率が99%のまま閉じられる恐れがあるからです。
つか、「読者からのレスポンス」のポップアップ(?)をオフにする機能が欲しいです。

デザインは8の倍数でできている|1 pixel|サイバーエージェント公式クリエイターズブログ
えっと、これは「当たり前のことをさもすごいことのように言うメソッド」なの? 「ITまわりにはなぜか2のべき乗が多数出現する!」的な。
(ネタにつられただけかも……)

丸ごとレンジにぶっこむだけの野菜料理 - NAVER まとめ
やるかも、やらないかも。

2/3 ポテト・リヨネーズ(リヨン風ポテト) [カフェ] All About
保育園の給食のメニューにあって「これなんだろう」と調べたら、よく食べるやつでした。

育児における、「私にはできない」 - yuki's blog...
よく、主人が育児を結構手伝ってくれるので、その例を話したりすると、
「それはすごいな〜〜俺にはできんわ〜〜」
みたいな答えがよく返ってきます。
いつも、それを聞いて、もやもやするんです。
「できんわ〜〜〜」じゃなくて、「やろうよ!」と。
「できんわ〜〜〜」じゃなくて、「やりたくないわ〜〜〜」じゃないの?と。
育児もやもや話。

台所用品の事故相次ぐ 注意呼びかけ NHKニュース
鍋や包丁など台所用品による事故が相次いでいるとして、NITE=製品評価技術基盤機構が注意を呼びかけています。

100円ショップ大好きな私としては見逃せない一冊。MONOQLO の別冊。ムックです。

100円ショップのムック

「なるほど」を求めて読んでいたのですが、気になる品はダイソー率が高かったです。やはり普段行ってないからか。あとは、「これが取り上げられてないとはねえ」と思うこともいろいろ。冊子的に弱いジャンルがあるのでしょうねえ。

最近の私の100円ショップ利用事情ですが、メインが代官山アドレスのセリア[2011-09-02-2]。なかなか広めです。あとはスーパーにある小さめのキャンドゥ。それだけです。目黒の大きめキャンドゥ[2010-07-23-7]にも行きたいし、ダイソーにも行きたいところ。

Tiger と ASOKO の話題も載っており、行ってみたい感がマックス! 原宿ダイソー→表参道 Tiger & ASOKO という黄金のコースを想像するだけでワクワクします。平日に休みをとって行きたいなあ。

【完全ガイドシリーズ047】100円雑貨完全ガイド (100%ムックシリーズ)

【100均グッズ&アイデア】全部集めました!
「収納」「料理」「掃除」100円で暮らしが変わる!

◆たった100円だけどお宝が眠ってるんです!
◆100円雑貨の良いモノだけ! 「超便利グッズ&アイデア」/収納編/掃除&洗濯編/フード編/キッチン編
◆[緊急レポ! ]北欧タイガー&ASOKO 覆面調査! /ひと工夫でオシャレに変身! 自慢リメイク/PC眼鏡は100円でOK?科学のチカラで100均を大検証! /100均土鍋 楽うまレシピ/買ってがっかりワーストバイ大発表
ほか

今週、というか、GW期間の平日のランチの記録。

平日ランチ

■4/28(月) 社食:シャケやグラタン

社員食堂「BASE6」[2014-01-31-1]でセットメニュー。
メインは「鮭のハラス焼き」と「ほうれん草のボロニア風グラタン」。

■4/7(水) 社食:鶏肉や魚

社員食堂「BASE6」でセットメニュー。
メインは「やわらか照り焼きチキン」と「白身魚と洋野菜の味噌チーズ焼き」。

■4/8(木) カレー

ココイチでチキン煮込みカレーとヤサイサラダ。

■4/9(金)自席:チキンのお弁当

フォーの店 PHONAM のお弁当。アジアンチキンステーキ(スープ付き)、750円。

たつをの ChangeLog
Powered by chalow