2012/12/30(日)CPANの「Lingua::JA::WordNet」が「日本語WordNet 同義対データベース」に対応

例えば「おしまい」っていう名詞の同義対が欲しければ↓だけでOKです。

#!/usr/bin/env perl

use strict;
use warnings;
use Lingua::JA::WordNet;

my $wn = Lingua::JA::WordNet->new;
my @synonyms = $wn->Synonym( $wn->WordID('おしまい', 'n') );

print "@synonymsn";

出力↓

お仕舞 お仕舞い どん詰まり エンディング エンド フィニッシュ ラスト 仕舞 仕舞い 完 完了 完結 尻 幕切れ 留め 終 終了 終幕 終焉

「同義対データベース」の詳細に関しては「日本語WordNet」のWebサイトを参照してくだしあ。Synonym メソッドのみモジュールに同梱のデータベースでないと動かないで注意!

ダメ出しは常時受け付けておりますぜよ。

2012/10/10(水)Perl勉強メモ #002 それホンマに画像?(File::LibMagic)

中身が↓の「image.png」ってファイルをサーバに置いてIE6でアクセスすると普通にJSを解釈してアラートが出てくるので画像を画像と見抜く必要があります。(徳丸本によるとIE7でもJSを解釈する)

<script type="text/javascript">alert('XSS');</script>

それがFile::LibMagicでできるようなのでインストールします。

cpanm File::LibMagic -v
Can't link/include 'magic.h', 'magic'

libmagicがないっぽいのでやり直し↓

yum install file-devel
cpanm File::LibMagic -v

Perlのコード↓(image.png以外は拡張子に対応した普通のファイルです)

#!/usr/bin/env perl

use strict;
use warnings;
use feature qw/say/;
use File::LibMagic;

my @files = qw/image.png libmagic.pl
kubota4.png hentai.jpg yui.gif footer.js/;

my $libmagic = File::LibMagic->new;

for my $file (@files)
{
    say "$file:";
    say $libmagic->checktype_filename($file);
    say $libmagic->describe_filename($file);
    print "\n";
}

出力↓

image.png:
text/plain; charset=us-ascii
ASCII text, with no line terminators

libmagic.pl:
text/plain; charset=us-ascii
a /usr/bin/env perl script text executable

kubota4.png:
image/png; charset=binary
PNG image data, 118 x 118, 8-bit/color RGBA, non-interlaced

hentai.jpg:
image/jpeg; charset=binary
JPEG image data, EXIF standard

yui.gif:
image/gif; charset=binary
GIF image data, version 89a, 29 x 32

footer.js:
text/plain; charset=us-ascii
ASCII text

他にもCPANには「File::MimeInfo::Magic」もあるけど試せていません。画像だけならここまでしなくても良いかもしれませんが、ライブラリ使っとくのが無難でしょうかね。