2010/01/02

Yahoo! 日本語形態素解析APIを Python から使う

以前作ったTwitter Botですが、動いている内容はとても単純。
ここまで単純ならわざわざMeCabを使わなくても良いのではと思ったので、以前話題になったYahoo! Japanが提供するWeb APIの日本語形態素解析を使ってみました。
Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析

まず下準備として、YahooのIDを持っておく必要があります。意外とGoogle依存なのでYahoo! Japanのアカウントの用意で手間取ったのは内緒:p
あと、Yahoo! Japanのアカウントは各国共通じゃないのでFlickrとかの海外Yahoo!サービスのアカウントじゃログインできないので注意してください。

あとは、非常に簡潔にまとめてくださっている方がいらっしゃいますので、そちらを読んでいただければ・・・
YahooWebAPI"日本語形態素解析"を使って日本語文をひらがなに変換、索引用語のソートに利用 - Object Design

これだと、別にファイルを用意しないといけないので、少し改造して予め入力してあげようと言うことで

word = u'庭には二羽ニワトリがいる。'
yomi = reading(word)
print (word+'->'+yomi).encode('utf-8')

ちなみに1行目に #coding:utf-8 をつけてないと文字化けします。
すると結果は

$ python yomi.py
庭には二羽ニワトリがいる。->にわには2わにわとりがいる。

ここまでしてくださっていると説明の必要もありません。

 

帰ってくる答えを変えたい場合は def reading(text,appid=appid,results='ma',filter=''): のfilterの引数に日本語形態素解析に戻り値として欲しい品詞番号を入れておくと、名詞だけを抜き出せたりします。
あとは、形態素解析のどれを拾うかの設定

帰ってくるXMLはこのような形なので

<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
</word>

ソースコード中の

readings=soup('reading')

に対応しています。
が、このまま変更しても結果は帰ってこないので

postdata= {
'response' : 'surface,reading',

この response の引数を ‘’ にするか、結果として欲しいものを指定してあげる必要があります。
何が変わるかというと、例えば形態素の基本形を知りたいは reading を baseform に変えてみると

$ python yomi.py
お待ちしております。->お待ちするておるます。

こんな風に、帰ってくる形が変わります。

Web APIですが、扱いやすいですし環境依存しない(MeCabの場合は最低条件としてMeCabが動く環境が必要)ので面白いんじゃないかな。
特に1つあたりの情報量の少ないTwitterとか・・・Twitterとか・・・には好都合な気がします。ちなみに制限は1つのリクエストあたり 100KBまでで、24時間以内に50,000リクエストとなっております。


2010/01/01

Google 2010年の New Year Easter Egg

今年のは結構派手。
ドカンドカンと花火が打ち上がります・・・が、やり方がいまいち分からない。

去年は新年あけましておめでとうございます 2009!こんなに素敵なことをしていたのに今年は静かな感じ。
TVCMに力を注いでいるという話ですので、もしかしたら新年CMとかもあったかも。


鳩山由紀夫が「なう」

screenshot by wonderlanddalicejp.

新年あけましておめでとうございます。
早速ですが、素敵なニュースです。

 

本当に始まっちゃいましたね。
今回は空気の読めない放送作家のいたずらじゃない・・・と思います。

ちなみに公式Blog鳩cafeのURLはちゃんとgo.jpなので信頼しても良いんじゃないかと。
Twitterのアカウント方は鳩山由紀夫 (hatoyamayukio) on Twitterこちらになります。

Blogのデザインがシンプルで良いなぁ と思うのは自分だけじゃないはず;-)

2009/12/31

2009年を振り返ってみる

アクセス解析

今年1年ももうすぐに終わっちゃいますが、今年を簡単に振り返ってみようと。
2009年に投稿した記事の総数は816。その大半は1月の時なので、最近は落ち着いてきた感じです。山あり谷あり。

 

1月

・タッチパネル携帯が本格化。
iMacの28インチモデルの噂 : 実際に27インチモデルが登場したのが驚きです
iTunes StoreからDRMを廃止
8時間駆動のARMネットブック・・・ 実際には登場しませんでしたね。
RockYouの失態
Googleが検索結果を全部フィルターする事件

 

2月

国内でもWiMAXがスタート
クラウドが成熟するまでには7年かかるという予想
Kindle2が発売
Twitter クローンのnowaがサービス終了: ただ、最近になって大手SNSプロバイダーがTwitterクローンをサービスとして提供をし始めましたので、時期が悪かったのかな?
映画 バタフライエフェクト : 今年の映画じゃないですが、見た中では結構な衝撃を受けた作品
クラウドコンピューティングの課題
Amazon EC2とHadoop

 

3月

Amazon S3をHadoopのHDFSとして使う
auのメールと着信をiPhoneへ転送
iPhoneのメール送信元を好きなアドレスに
Hadoop Streamingでワードカウントする

 

4月

Dell mini 9を購入!

 

5月

Google Wave登場

 

6月

docomoからHT-03A
iPhone 3GS発表!

 

7月

Google Chrome OSが発表
映画 ショーシャンクの空に

 

8月

YahooとMicrosoftが検索分野で提携
子どもが生まれたらドメインを  
mixi アプリが登場 まさかここまで一大市場を築くとは思っていませんでした。

 

9月

ついに念願のMacBook Proを購入!!  ここから始まるMacライフ
Macのメモリを4GBへ
auを解約してきた
iPhone Developer Programに登録

 

10月

iPhone 向けアプリ書きだし対応のFlash CS5
Kindleが日本からも購入可能に
ハイパーフォーラムに参加してきた

 

11月

iPhoneのパケットを1ヶ月節約してみる
ドメイン消失事件 : これは焦ったなぁ

 

12月

Google 日本語入力登場
Rackspace Cloudに申し込んでみた
Twitter Botを作ってみた

 

こんな1年でした。
最近ではWindows PCが完全にお亡くなりになりましたので、Macへ環境移行しています。
全然問題ないですが、ただ一つWindows Live Writerみたいに使いやすいエディターが無いので、更新するのが面倒になっちゃって:-S

笑って、泣いて、感動して、2009年ありがとうございました。
2010年もよろしくお願いします。

以上を組み合わせて、Twitter Botを作ってみた。

screenshot by wonderlanddalicejp.

なんとか年内にまとめあがったよ。
これまで延々と書いてきた事をまとめて、目標のTwitter Botを作ってみました。

まずは、動かすためのプラットフォーム作り。
botなので常時動いている方が良いので、サーバを。もちろんレンタルサーバとかでも良いのですが、Linuxサーバのお勉強もかねて今回はHaaSを提供しているRackspace Cloudを利用してみました。

Rackspace Cloud に申し込んでみた。

まさかの国際電話で本人確認されたのでびびったと言ったら無かったね;p
でも、質問内容はYes or Noで答えられる程度のこと(だったと)思うので、心配はそこまでしないとでも良いかと。

 

次は実際にLinuxサーバを起動してみるよ。
これもAmazon EC2を使ったことある人からしてみると驚くくらい簡単。

RackSpace Cloud のインスタンスを起動する

Linux系の選択肢は豊富ですが、使ったことがあるのはUbuntuだけなのでUbuntuで。

 

Twitter Botを作りたいのでとりあえずTwitterをスクリプトから操作出来るようにしないといけない。

Python から Twitter へ投稿する

なんでPythonかというと、自分はPythonくらいしか分からないから。Pythonだってろくに分かってないです;p
最近話題のRubyとかならPython以上に豊富に情報がそろっていると思います。

 

さて、PythonからTwitterへ投稿できるようになったので、次はBotらしい機能を作ってみようと。
Botらしいで悩んでみましたが、今回はとりあえず自分(@dalice)の投稿内容をカタカナに変換して投稿し直すbotにしようと言うことで、日本語形態素解析として話題沸騰中のMeCabさんを使ってみました。

Ubuntu Server に MeCab をインストールする

Python等の言語から簡単に扱うことの出来るのが特徴です。
iPhoneの日本語入力やMacのSpotlightなどで使われている実績のある処理系です。中の人の最近の作品はGoogle 日本語入力だそうです。

 

さて、ここまでPythonでスクリプトを作ってみましたが、Botなら定期実行してこそ。
そんなわけでLinuxなら標準で動いているCronの使い方を少しだけお勉強。

Ubuntu Server で cron を使う

ここまで来れば出来たも同然!

 

そうして、作ったのはこちらです。

dalice-yomi (dalice_yomi) on Twitter

Cronで指定した周期ごとにDaliceの発言を拾ってきて、MeCabを通してカタカナに。それをdalice_yomiというアカウントにポストするだけです。
何の価値もないbotですが、プログラミングとか、Linuxとかよく分かってない自分でも1週間かからずにここまで作れちゃいました!

次は世のため人のためになりそうなものを作ってみよう;-)

2009/12/30

Python から Twitter へ投稿する

柴田 淳 (3)
3消去法的定番書
5知識の整理と Python3への準備に役立つ
3初級者向け、ただし...

もちろん、投稿できると言うことはTimeLineの取得とかいろいろ出来ます。
しかも、とっても簡単。

python-twitterというものがすでに用意されているので、それを導入してimportしてあげれば何の苦労もなくPythonからTwitterの各種APIを操作できます。

python-twitter -Project Hosting on Google Code

素直にここからダウンロードしてきて、展開した方が早いです。
Ubuntu系をお使いの方ならapt-getでインストールすることも出来ます。

sudo apt-get install python-twitter

バージョンは今日現在0.6がインストールされます。
tar.gzをダウンロードした場合は

python setup.py build
python setup.py install  

以上でインストール終了。
あと、simplejsonが必要になるとか言われる場合があるので 、その場合は素直にダウンロードしてきて、上同様にbuildしてinstallしましょう。

Python Package Index : simplejson 2.0.9

 

実際の使い方は本当に簡単。

import twitter
api = twitter.Api(username='TwitterのID', password='TwitterのPass')

とりあえずこれは共通。
これで、Twitter APIへアクセスする事が出来るようになりました。

タイムラインを表示してみる。

statuses = api.GetFriendsTimeline()
for s in statuses :
 print s.text.encode('utf-8')

これで、いつもTwitterクライアントで見ているのと同じフォロワーのポストが表示されます。
ちなみに最後に.encode('utf-8')をつけているのはきちんと表示させるために必要なので。ただ、これは環境によって変わってくるので注意してください。

投稿してみる。

post = sys.stdin.readline()
ret = api.PostUpdate(post.decode("utf-8"))

これで、実行すると文字入力できて、それを投稿してくれる・・・はず。

これ以外の詳しい関数などはPythonでtwitterを試してみたっす。 : kishi-r.comにまとめてくださっているのでそちらを参考にしてください。

正直ここまで簡単に使えることに驚いたです。

2009/12/29

Ubuntu Server に MeCab をインストールする

日本語形態素解析として話題沸騰中のMeCabをServerに導入して、ごにょごにょしたいと思った今日この頃。
ちなみに、MeCabの

作業手順はとっても簡単。
作業環境は最近おなじみの Rackspace Cloud上のUbuntu Server 8.04です。
Rackspaceの導入なんかは

Rackspace Cloud に申し込んでみた。
RackSpace Cloud のインスタンスを起動する

を参考にしてみて下さい。

 

実際の作業手順なんですが、jkl.lomo.jp » ubuntu9.04 で mecab を Python から使うまで。がまとめてくださっているので、そちらを・・・
少し違う部分もあるので、一応書いてみます
あと、ついでにPythonからMeCabを扱えるようにするためのやつも導入しています

vi /etc/apt/sources.list
 deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all
 deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

wget http://cl.naist.jp/~eric-n/ubuntu-nlp/8ABD1965.gpg -O- sudo apt-key add -

apt-get update

apt-get install mecab

apt-get install mecab-naist-jdic-utf8

apt-get install libmecab-dev

mecab --version
 mecab of 0.98pre3

wget http://downloads.sourceforge.net/project/mecab/mecab-python/0.98/mecab-python-0.98.tar.gz

tar xf mecab-python-0.98.tar.gz

cd mecab-python-0.98

apt-get install g++

apt-get install python-dev

python setup.py build

python setup.py install

大体こんな感じ。
これで使えるようになる・・・はず。
環境によってはSudoをつけないとうまくいかないかも。

ちなみにmecab-pythonのフォルダの中に入っているtest.pyは少し修正が必要で、#coding:utf-8をつけてやる必要があります。
そうすればきちんと実行することが出来て

# python test.py
0.98
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー,,
は 助詞,係助詞,*,*,*,*,は,ハ,ワ,,
この 連体詞,*,*,*,*,*,この,コノ,コノ,,
本 名詞,一般,*,*,*,*,本,ホン,ホン,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
二 名詞,数,*,*,*,*,二,ニ,ニ,,
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,

2009/12/27

nifty(富士通)がクラウド(IaaS)に参入

@niftyの事ね。
niftyの培ってきたインフラ技術を生かして、仮想サーバを従量課金(上位インスタンスでは月額プランも用意)で提供するものです。

面白いなぁと思うのは富士通の傘下のniftyのブランド名を使って参入してきたこと。
Webライクな面をアピールして、ビジネスユースの印象の強い堅苦しい企業名に縛られない心がけ?

ニフティクラウド 登場|@nifty

ただ、どんなに言っても国内手で提供しているクラウドサービスは中小企業向け。個人なんかの利率の薄そうな人はお呼びじゃないそうです。

現在βユーザーを募集中。
お一ついかが;p

(ちなみに、説明を読むとインスタンスを止めている時間も5円/1時間かかるそうです・・・!?)