Y's note

「魔法少女まどか☆マギカ」の台詞をNLTK(Natural Language Toolkit)で解析する

[Python] : 「魔法少女まどか☆マギカ」の台詞をNLTK(Natural Language Toolkit)で解析する 目次 魔法少女まどか☆マギカ NLTK NLTKコーパス まど☆マギ台詞単語解析 まど☆マギ台詞形態素解析 魔法少女まどか☆マギカ NLTK練習の題材として2011年の大ヒットアニメ?「魔法少女まどか☆マギカ」の台詞を用いる。通称まど☆マギで知られる本作品であるが、第15回文化庁メディア芸術祭アニメーション部門大賞、既に映画かも決まっておりテレビシリーズの総集編前後編と完全新作の全3作品の製作が予定されている。いわゆるダークファンタジーの世界観で台詞の中にも絶望を彷彿させるマイナス思考な台詞が多いように思う。事前の予想では「いやだ」とか「助けて」などの台詞が頻繁に使われていると考えたが、それらをNLTKを用いて検証してみる。この記事の前半はNLTKの設定、後半がまど☆マギの台詞を単語/形態素の両面で解析している。尚使用するサンプルコードは全てgithubに挙げているので、そちらを参照して欲しい。https://github.com/yutakikuchi/NLTK/tree/master/madmagi NLTK NLTKとは NLTKとはNatural Language Toolkitの略。 Pythonで書かれた自然言語処理ToolKit。テキストマイニング等が可能。 Windows/MacOS/Linux上で動作させる事ができる。 Linuxの場合Python2.4x,2.5x,2.6xを必要とする。 インストールする際にはPyAMLが必要で、解析結果をグラフ化するようにNumPyやmatplotlibを一緒に使うと良い。 NLTKのインストール http://www.nltk.org/download 公式ドキュメントに書いてある内容を実行する。尚今回のインストール実行環境はCentOS release 5.7 (Final)とする。 始めに入れておくと後で嵌らないpkgは次のもの $ sudo yum install gcc-c++ kernel-devel ncurses-devel glibc glibc-devel glib-devel glib2-devel gtk2-devel tk tk-devel tcl tcl-devel tkinter freetype freetype-devel libpng libpng-devel Pythonのversion確認 pythonのversionが2.4x python pythonのインストールを行う必要がある。 $ python -V Python 2.

Introduction to Computational Advertising - Stanford大学資料から学ぶオンライン広告知識

[AD] : Introduction to Computational Advertising - Stanford大学資料から学ぶオンライン広告知識 Stanford大学オンライン広告授業 ★★Stanford大学オンライン広告授業資料★★ 機械学習/DB/人工知能の内容での授業公開で有名なStanford大学ですが、オンライン広告の授業資料も公開しています。一応私も広告配信、集計、解析に業務で携わっており、ようやく最近海外のオンライン広告のトレンドや論文の内容に注目し始めました。Standord大学オンライン広告の授業一覧と内容は次のようになっています。 Overview and Introduction Marketplace and Economics Textual Advertising 1: Sponsored Search Textual Advertising 2: Contextual Advertising Display Advertising 1 Display Advertising 2 Targeting Recommender Systems Mobile, Video and other Emerging Formats Project Presentations 今日のブログでは第1回のOverview and Introductionについて日本語に訳しながら個人的に重要だと思う箇所だけ紹介します。みなさんからの反応が良ければ2回目以降の内容についても記述するかもです(笑) ちなみに授業のInstructorはYahoo!Incで研究者をやっているVanja Josifovski、Andrei_BroderAndrei Broderさんの二人です。 授業内容 (注) 以下ではcomputational” advertisingをオンライン広告と訳しています。本来の直訳はコンピュータによる広告です。 オンライン広告とは Find the "best match" between a given user in a given context and a suitable advertisement.

Hadoopをより便利に使う!HiveでのMapReduceまとめ

[Hadoop] : Hadoopをより便利に使う!HiveでのMapReduceまとめ 目次 Hiveとは Hiveの設定 HiveQL構文(DDL) DataBase/SCHEMAの作成 Database/SCHEMAの削除 Tableの作成 Tableの削除 Table名変更 Partition作成 Partitionの削除 Columnの変更 Columnの追加/置き換え TableのProperty変更 SerDe Propertyの追加 HiveQL構文(SQL) テーブル一覧表示 テーブルの内容を表示 基本的なSELECT文 WHERE句(条件指定) DISTINCT(重複削除) ORDER BY / SORT BY句(ソート) GROUP BY句(グループ化) HAVING句(グループ化後の条件) LIMIT句 JOIN(テーブル結合) 抽出カラムを正規表現で指定 UNION(結果の結合) SUBQUERY LOAD(データの読み込み) Hiveを使う 事前準備 起動と終了 テーブルの定義 データの読み込み Tableのパーティション定義 検索/MapReduce SELECT結果をINSERT ローカルファイルとして保存 まとめ リンク Hiveとは 2008年にFaceBookで開発さえてHadoopプロジェクトに寄贈される。 Yahoo!で開発しているPigのライバルプロジェクト? 一言で表すとHadoop上で動作するデータウエアハウス。 HiveQLというSQLのような言語でHDFSなどの分散ファイルシステム上のデータを操作できる。 HiveQLの実行でMap/Reduce処理が完了する。 私見だが複雑なデータのMapReduceから特定のデータを抽出したい場合には便利かも。 Hiveの設定 CentOSでのHiveの設定はCentOSでHadoopを使ってみる - Yuta.

NLP(自然言語処理)用語まとめ

[自然言語処理] : NLP(自然言語処理)用語まとめ 一般用語 NLP 自然言語処理のこと。Natural language processing : NLP。 コンピュータが人間の言葉を処理する事。自然言語の反対は形式言語。 テキストマイニング 自然言語処理とデータマイニングの技術を合わせてテキストから知識発見を行う技術。 知らない知識をテキストから発見するのをテキストマイニング。 既知の情報の位置を特定するのを情報検索。 素性 属性/属性値 自立語 他の単語が無くても意味をなす単語。助詞/助動詞以外。 bag of words 与えられたテキストの集合で並び順が無視されること。 N-Gram 連続するn個の要素。要素が何を表すかによって表現が異なる。 "文字N-gram" "単語N-gram" 2-gram(bigram)、3-gram(trigram)をよく使う。 形態素解析では文字n-gramを利用する。 TF・IDF 索引後の重み付け方法。 TF(Term Frequency)は文書に置ける単語の頻度 IDF(Inverted Document Frequency)は索引語が現れる相対文書頻度の逆数の対数 1文書に同一の索引語が多く出現すればTF・IDFの値は大きくなる。多くの文書に索引後が出現すれば値は小さくなる。 コサイン類似度 二つのデータが似ているかどうかをデータベクトルの距離により算出すること。 コーパス 自然言語の大量のテキスト集合。 シソーラス 単語の関係(上位/下位、部分/全体、同義、類義)によって分類し体系づけた辞書。 機会学習 人間が自然と行っているパターン認識や経験則に基づく判断をコンピュータを用いて行う技術や理論。 ナイーブベイズ(単純分類器) ベイズの定理を適用することに基づいた単純な確率分類器。 テキスト分類に頻繁に用いられている。 パラメータ推定には最尤法が使われる。 決定木 葉と根を利用した予測モデル。 データマイニングでよく利用され、葉が分類、枝がその分類に至るまでの特徴の集合。 K-平均 距離ベースのクラスタアルゴリズムで事前に決められた数のクラスタにデータを割り振る。 SVM Support Vector Machine。2値分類器。 座標上にサンプル値をプロットし、正値/負例の集合からもっとも距離が大きくなる識別面 を決定。

HerokuでNodeJSを動かしてみる

[javascript] : HerokuでNodeJSを動かしてみる 前提 Herokuとは? rubyやnodejsのPaas。ファイルのDeployでアプリケーションを作成することができる。 Googleが提供しているGAEやWindowsのAzureみたいなもの。 少し前にSalesforce.comに買収されている。 Herokuのアカウント登録は次のURLから https://api.heroku.com/signup GitHubでソースを開発/管理して、動作させるのはHerokuサーバ。これが素晴らしい。 アプリケーションサーバを1プロセス(dyno)を利用できる。dynoとはHeroku独自の単位。 PostgreSQLを5MBまで利用可能。 この記事の紹介はHerokuのアカウントを保持していること、自分のPCにgem(Rubyのパッケージインストールコマンド),node,npmが入っている事を前提とする。(node,npmあたりは以前記事を書いた Node.jsでWebSocketを試してみる - Yuta.Kikuchiの日記 を参照して欲しい) GitHubに対する設定と知識も必要。以前Macでの設定を書いた。MacユーザのためのGitHub登録手順 - Yuta.Kikuchiの日記 私が試した環境はMacOSX。バージョン10.6.8 準備 nodejs/npmのバージョン確認 $ node -v v0.4.8 $ npm -v 1.0.6 Herokuパッケージ設定手順 Herokuのinstall $ sudo gem update --system $ sudo install heroku アプリ一覧を表示 まだ何も登録していないのでYou have no apps.と表示される。 $ heroku list Enter your Heroku credentials Email: hoge@gmail.

CentOSでHadoopを使ってみる

[Hadoop] : CentOSでHadoopを使ってみる __ __ __ / / / /___ __/ / ____ ____ / /_/ / __ ‘/ __ / __ \/ __ \/ __ / __ / // / // / // / // / // / // //_,/_,_/_/_/ .__/ // インストール hadoopをcentosに入れてみる。最新バージョンは2011/11/25日の段階では0.23.0 各Linuxディストリビューションに対応済みのcdh3(Cloudera Distribution including Apache Hadoop v3)を入れる。cdh3の最新バージョンは0.20.0 hadoopの他に愉快な仲間達のhive,pig,hbaseも入れる。 jdkのインストール hadoopはjavaで動くので当然必要となる。既にインストール済みの場合は不要。 jdkのダウンロード jdkのインストール $ wget http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-x64.rpm $ sudo rpm -ivh jdk-7u1-linux-x64.

快適なUnixLifeのために覚えておきたい10のTips

[Linux] : 快適なUnixLifeのために覚えておきたい10のTips この記事では快適なUnixLifeを送るための便利な開発環境設定とコマンドの基本的なTipsについて紹介する。 vim.emacsなどのeditorについて紹介するとキリがないので、また別で紹介したいと思う。 目次 screen zsh find grep mkdir diff nkf perl cut,sort,uniq その他 screen poderosaなどのタブ機能付きターミナルを使わなくてもscreenコマンドで複数のターミナルウィンドウを管理することが可能。 サーバ内部のプロセスとしてscreenを管理しているので、restartなどをしない限りscreenのデタッチで一時的終了、アタッチで元々の作業画面を呼び起こす事が可能。よって会社での作業もscreenを使っていれば前日の作業の途中から開始する事ができる。 設定 必要な設定ファイルは$HOME/.screenrcとして次のような内容を書き込む。 escape ^Z^z #control + zでscreenを操作する hardstatus alwayslastline "%`%-w%{=b bw}%n %t%{-}%+w"#接続しているhost名を表示する bind s startup_message off # おまけ: 起動画面OFF autodetach on # おまけ: 回線切断時に自動でdetach defscrollback 1024 # おまけ: スクロールバッファ行数を増やす bind s split #画面分割 bind i focus #画面移動 bind 1 only #一画面に戻す bind 0 remove #画面削除 bind r eval ‘echo “Resize window”‘‘command -c resize’#Ctrl+trで分割した画面サイズ を変更。 bind -c resize ^] command bind -c resize j eval ‘resize +1′‘command -c resize’#jで1行大きくきく bind -c resize k eval ‘resize -1′‘command -c resize’#kで1行小さくさく 新規でsshした時に新しいscreen windowを開くように$HOME/.

美女サイトのデータハッキング方法をまとめてみた

[Python] : 美女サイトのデータハッキング方法をまとめてみた 美女サイト 美人時計 http://www.bijint.com/ 美女暦 http://www.bijogoyomi.com/ 今更ではあるが2つのサイトのデータをハッキングしてみた。 以下の内容を試す場合は自己責任でお願いします。また内容はすぐに消す可能性があります。 美人時計の画像 数分置きに美人が入れ替わる仕組みで、画像のURLは日付に関係なく時間で固定。例えば http://www.bijint.com/jp/tokei_images/1200.jpg URLが時間で固定なので好みの美人の画像に巡り会えない可能性がある。 アクセスする際にrefererを仕込んでおこないとエラーになるので、refererをhttp://www.bijint.com/jp/とする。 プロフィールが掲載されているhtmlパーツもほぼ同じ仕組みで取得可能。 画像、htmlパーツ取得のheader情報 実際にブラウザ上でどのようにデータが取得されているのかを見てみる。ツールはwebインスペクタやfirebugでheader情報を参照する。以下の内容はsafari = webインスペクタ = ネットワーク = ヘッダを参照したもの。 画像 URL を要求:http://www.bijint.com/jp/tokei_images/0000.jpg リクエストメソッド:GET ステータスコード:200 OK リクエストヘッダソースの表示 Referer:http://www.bijint.com/jp/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22 レスポンスヘッダソースの表示 Accept-Ranges:bytes Connection:close Content-Length:156987 Content-Type:image/jpeg Date:Wed, 23 Nov 2011 16:00:00 GMT Last-Modified:Mon, 03 Oct 2011 05:04:15 GMT Server:Apache htmlパーツ URL を要求:http://www.

yumコマンド

[CentOs] : yumコマンド 概要 BSDのportコマンドのようにLinuxのRPMパッケージを管理するプログラム。 パッケージインストーラとも言える。 パッケージの依存関係解消をある程度自動的に解消? yum usage List of Commands: check-update Check for available package updates clean Remove cached data deplist List a package's dependencies downgrade downgrade a package erase Remove a package or packages from your system groupinfo Display details about a package group groupinstall Install the packages in a group on your system grouplist List available package groups groupremove Remove the packages in a group from your system help Display a helpful usage message info Display details about a package or group of packages install Install a package or packages on your system list List a package or groups of packages localinstall Install a local RPM makecache Generate the metadata cache provides Find what package provides the given value reinstall reinstall a package repolist Display the configured software repositories resolvedep Determine which package provides the given dependency search Search package details for the given string shell Run an interactive yum shell update Update a package or packages on your system upgrade Update packages taking obsoletes into account options: -h, --help show this help message and exit -t, --tolerant be tolerant of errors -C run entirely from cache, don't update cache -c [config file] config file location -R [minutes] maximum command wait time -d [debug level] debugging output level --showduplicates show duplicates, in repos, in list/search commands -e [error level] error output level -q, --quiet quiet operation -v, --verbose verbose operation -y answer yes for all questions --version show Yum version and exit --installroot=[path] set install root --enablerepo=[repo] enable one or more repositories (wildcards allowed) --disablerepo=[repo] disable one or more repositories (wildcards allowed) -x [package], --exclude=[package] exclude package(s) by name or glob --disableexcludes=[repo] disable exclude from main, for a repo or for everything --obsoletes enable obsoletes processing during updates --noplugins disable Yum plugins --nogpgcheck disable gpg signature checking --disableplugin=[plugin] disable plugins by name --enableplugin=[plugin] enable plugins by name --skip-broken skip packages with depsolving problems --color=COLOR control whether color is used Plugin Options: アップデート可能なパッケージ一覧取得 $ yum check-update $ yum list updates yumに関するデータを消去 $ yum clean /headers / metadata / cache / dbcache / all install済みパッケージの依存関係表示 $ yum deplist ダウングレード $ yum downgrade パッケージを削除 $ yum remove $ yum erase パッケージgroup一覧の表示 $ yum grouplist パッケージgroup情報表示 $ yum groupinfo パッケージgroupのインストール $ yum groupinstall パッケージgroupのアップデート $ yum groupupdate パッケージgroupの削除 $ yum groupremove ヘルプ表示 $ yum help パッケージ情報の表示 $ yum info パッケージのinstall $ yum install RPMパッケージ一覧を表示 $ yum list install済みパッケージ一覧を表示 $ yum list installed ローカルにあるパッケージをinstall $ yum localinstall メタデータを生成 $ yum makecache パッケージに含まれるファイル一覧表示 $ yum provides 再度install $ yum reinstall repositoryの情報を表示 $ yum repolist パッケージの依存関係を解消 $ yum resolvedep 指定文字列を含むパッケージの検索 $ yum search パッケージのupdate $ yum update install済みパッケージのupgradeを行う $ yum upgrade コマンドalias設定 ※タイピングが面倒になりそうなコマンドはalias張って短くすると便利。

AES暗号のまとめ

[PHP] : AES暗号のまとめ AESとは 共通鍵暗号方式の一つ。http://ja.wikipedia.org/wiki/AES暗号 共通鍵暗号方式にはブロック暗号とストリーム暗号が存在し、AESはブロック暗号方式。 ブロック暗号方式は固定長のブロックデータを単位として処理をする。 一般的にブロック暗号方式は公開鍵暗号方式に比べて高速と言われている。 ブロック暗号方式のモードはいくつか存在し、以下のページに詳しく載っている。http://www.triplefalcon.com/Lexicon/Encryption-Block-Mode-1.htm http://ja.wikipedia.org/wiki/暗号利用モード ブロックモードはCBC(暗号文ブロック連鎖モード)等が一般的で、CBCは前のブロックの暗号化された値を次のブロックの暗号化に利用する。最初のブロックの暗号を行う場合、最後のブロックかIV(Initial Vector:初期ベクトル)を使って暗号化する。 ブロック長は128bit。鍵長は128ビット、192ビット、256ビットの3つが利用できる。 脆弱性? http://www.computerworld.jp/topics/563/セキュリティ・マネジメント/200562/マイクロソフトの研究 PHPでAES(RIJNDAEL) phpで利用するにはconfigureで--with-mcryptを指定する必要がある。→ centosではyum install php-mcryptを実行すればOK。 phpを--with-mcryptで指定するにはlibmcryptとmhashが必要。※なぜかmacでsudo port install libmcryptで設定するとうまくコンパイルできない。原因は調査中。 PHP: mcrypt_get_iv_size - Manual PHP: mcrypt_create_iv - Manual PHP: mcrypt_encrypt - Manual PHP: mcrypt_decrypt - Manual mcrypt-get-iv-size,mcrypt-create-iv,mcrypt-encrypt,mcrypt-decrypt関数を利用。 暗号化/複合化のサンプルプログラム //暗号化方式をRIJNDAELの256bitブロック長、暗号化方式をCBC $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); //Initial Vectorの大きさ echo "iv size:" . $iv_size . "\n"; //Initial Vector生成 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); echo "iv value:"