3266247 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2007.11.15
XML
カテゴリ:Python
日本語形態素解析Webサービス を使ってなんかするかな。とりあえず、だれか Python でいいもの作っていないかなぁと捜してみると、2つ見つかった。

ヒビノキロク の方は、pyparsing を使った 検索式を構文解析するPythonモジュール とかも公開されている。pylonshqのWikiのソースを表示するGreasemonkey マニアだなぁ。Monoで.NET Compact Framework向けのアプリケーションをコンパイルする とかもある。

Inforno の方は、Python:お手軽にPluggableにする とか公開されている。Python版Lingr APIライブラリ とか PythonによるNESエミュレータ開発5 とか見ると、やっぱり、この方もマニアな方か。

とりあえず、両方見てみる。Inforno の jlp の方は、他の Yahoo! API にも対応することを前提とした設計のライブラリになっている。検索 API 等他の API も組み込んでいくのであれば、これをベースにするのもよいかもしれないが、テキスト解析のみだと overkill な感じなので、とりあえず置いておく。

ヒビノキロク の webma.py の方は、テキスト解析のみに対応している。解析後のデータの取り出しもシンプルなので、とりあえずは、こちらを使わせてもらう。

ちょっと、ヒビノキロク: Yahoo! 形態素解析 API for Python のコードを眺めてみる。使っているライブラリは、urllib、lxml、formencode。urllib は標準ライブラリで、HTTP のアクセスをするときによく使われるもの。lxml と fromencode は easy_install でインストールできる。easy_install lxml とか、easy_install formencode とか。formencode は SQLObject や TurboGears などを使っている人は easy_install でインストールしていればまとめてインストールされているはず。使っていなくても手動でインストールしているはず。

lxml だが、これは便利だな。現状、2.0系統と(まだ alpha)lxml 1.3.x 系統が開発されている。

lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries. It provides safe and convenient access to these libraries using the ElementTree API.

ということで、libxml2 と libxslt のバインディングで、ElementTree API を使ったライブラリ。XML を扱う Python のライブラリとしては、最近は ElementTree が標準的な地位を占めていると思うが(Python 2.5.x から標準ライブラリに入った)、これは、壊れた XML データを渡すと扱えないのに対して、lxml だと、壊れた XML や HTML データでも適当に直してくれるようだ。Twisted Mind: 誰もさわらないlxmlについて。 にその例がある。

# vim: fileencoding=utf8

from lxml import etree
from StringIO import StringIO

broken_html = "<head><title>ついすてっどまいんど<body><h1>Django!!</html>"
parser = etree.HTMLParser()
et = etree.parse(StringIO(broken_html), parser)
print etree.tostring(et.getroot(), 'utf-8', pretty_print=True)


壊れているのに、ちゃんと、<html>、</titlel>、</head> 等々、足りない部分を勝手に補完してくれている。ふーん。いつでもそれが良いとは限らないかもしれないけど、便利かもしれない。ElementTree だと壊れているとエラーで扱えないし。Python で HTML ファイルから情報を取り出すには で以前にはまった。lxml なら、こういう問題もクリアかな。lxmlでHTMLスクレーピングをやっている人がいた。lxmlを使ってあるURLから画像のURL一覧を取得する もあった。その他、Humming Via Kitchen: lxmlを試してみたよ。perezvonの日記: libxml2でのXPathの練習

でもって、perezvonの日記: lxmlのlibxml2バージョンを確認する には、

>>> from lxml import etree
>>> etree.LIBXML_VERSION
(2, 6, 28)


もう一つ使われているのは、 FormEncode。これも最近よく使われるてのかな。SQLObjectSubwayTurboGearsPylons でも使われているから、このあたりを扱っている人たちが使うようになっているのか。フォームの validation とか生成のために作られたもので、ここでは validation のために使われている。下の例では Int かどうかをチェックして、そうでなければエラーにできる。

>>> import formencode
>>> from formencode import validators
>>> validator = validators.Int()
>>> validator.to_python("10")
10
>>> validator.to_python("ten")
Traceback (most recent call last):
...
Invalid: Please enter an integer value


FormEncodeで複合validationFormEncodeでイメージアップロード用のバリデータを作る なども参照。


本題に入る前に、長くなってしまったので次へ続く。

なかのひと






お気に入りの記事を「いいね!」で応援しよう

Last updated  2007.11.15 19:58:32
コメント(0) | コメントを書く



© Rakuten Group, Inc.