これは 2011 Pythonアドベントカレンダー(Python3) - connpass の記事です。
@ryoaita さんの指名を受けました、22日目の @hirokiky です。
このアドベントカレンダーはPython3に関することをみんなで書きましょうというものです。そこでこの記事では Python3 を触ったことすら無かった私が、とあるプログラムを Python3 で動かしてみるor動くようにするまでを書きたいと思います。
『とあるプログラム』について
こいつの動作は「気に入った文章を覚えさせると、次に与えた文章が気に入られるものかどうかを推定できる」というもの、つまりはドキュメントフィルタです。応用例としてはメーラのスパムフィルタなどがあります(かなり限定的な例を出してます)。
このプログラムは『集合知プログラミング』という本の6章に載っていて、オライリーのサイトからもダウンロードできます。
Index of /9780596529321
さてさてこいつをPython3で動くようにしていきます。Python3の導入からいきましょう。
Python3 導入
Ubuntuを使ってるので導入は apt-get におまかせです。
% sudo apt-get update
% sudo apt-get install python3.2 python3.2-dev python3-setuptools
apt-get yeah!これでPython3.2、2to3、easy_install3 なんかが導入できました。
2to3で楽する
実際にコードをPython3に対応させましょう。
でも手で書くのはめんどくさいので2to3で楽をします。Python2 のコードを3系で動くように自動で変換してくるそうです。
% 2to3 -w py2code.py
これで書き換えれます。注意点としては-w オプションを付けないと差分が表示されるだけでファイルに変更は加えられないことです。
で、あとは必要なパッケージを easy_install3 でインストールしていきます。もちろんPython3に対応しているものを入れる必要があるので、Browse : Python Package Indexを見ながら入れていくだけです。
BeautifulSoupがない?!
pysqlite2 と BeautifulSoup のPython3版がPyPIにありません。pysqlite2 は sqlite3 を使うのでいいのですが、 BeautifulSoup がないのは困った。オチを先に言うとBeutifulSoup本家のサイトにいけばあるのですが、そんなことを知らない私は lxml で書き換えました。
% sudo apt-get install python3-lxml
で導入して
>>> query = 'http://...' >>> #before >>> from BeautifulSoup import BeautifulSoup >>> soup = BeautifulSoup(urlopen(query)) >>> return [l.surface.string for l in soup.ma_result.word_list] >>> #after >>> from lxml import entree >>> return [element.text for event, element in etree.iterparse(urlopen(query)) if element.tag == '{urn:yahoo:jp:jlp}surface' and element.text]
これでタグ {urn:yahoo:jp:jlp}surface のテキストを取得してます。
参考:Pythonでスクレイピングに最適なライブラリはlxmlな気がした。時間的な意味で - When it’s ready.
うまく動作したし良かった良かった。Python3 倒した気になった
Python3でBeautifulSoupあるよ!
Beautiful Soup: We called him Tortoise because he taught us.からダウンロードしてインストール。
>>> from bs4 import BeautifulSoup
という名前になったらしい。コードは以前のままで実行できました。
2to3動かすだけで良かったのか…いや、楽なのは素晴らしいことです(:D)rz
いちおうbitbucket においてます。
https://bitbucket.org/hirokiky/pci_chap6/overview
おわりに
もっとガリガリコード書かなきゃだめかと思いましたがアッサリいきました。
ちょっと物足りないかんじなので、この感情は別のコードにぶつけてやろうと思います。
私のPython3デビュー物語は以上です。次は @hinaclegear さんにお願いします