Posted at 2011-01-15 01:40:29 under テクノロジ (by key)

MyBike.JPを支える技術シリーズ。

DjangoにMongoDBをインテグレーションするライブラリはいくつかあって、 MyBike.JPではdjango-mongodb-engineを採用しています(セッションストレージに mango を使ってたりしますが、これはまた別の機会に)。

MongoDBをスキーマレスのデータベースとして利用したいこともあって調べていたのですが、 django-mongodb-engineはDjangoのデータベースフィールド拡張が提供されているのみで、 ドキュメント指向データベースとして使うことは難しそうでした。また、GridFSのサポートもあります。

一方、django-mongokitではドキュメント指向データベースとして取り扱えますが、 GridFSのサポートがありません。

この辺り(自分が)混乱しそうなので、マトリクスにメモっておきます。

solution GridFS support Document Extended Model Field
django-mongodb-engine yes no yes
django-mongokit no yes no

django-mongodb-engineでの拡張モデルフィールド例:

class Post(models.Model):
    title = models.CharField()
    tags = SetField(default=set()) # このへんと
    ratings = ListField(models.IntegerField(), ordering=optional_ordering) # このへん

django-mongokitのドキュメントオブジェクト例:

import datetime
from django_mongokit import connection
from django_mongokit.document import DjangoDocument

# Create your models here.
class Talk(DjangoDocument):
    collection_name = 'talks'
    structure = {
        'topic': unicode,
        'when': datetime.datetime,
        'tags': list,
        'duration': float,
    }

    required_fields = ['topic', 'when', 'duration']

    use_dot_notation = True

connection.register([Talk])

GridFSとDocumentオブジェクトを使いたい!という場合には2つを組み合わせて使う必要がありますが、 ニーズが満たせればよいのでとりあえず併用することになりそうです…たぶん。

Posted at 2011-01-14 08:59:47 under テクノロジ (by key)

MyBikeに検索が必要そうなので調査。形態素解析よりはN-Gramでいいかなってことで。

pythonの実装だと pyngram がMITライセンスで使いやすそう。

Tags: python
Posted at 2010-10-25 23:39:38 under テクノロジ (by key)

Python + Djangoで開発を行うにあたって覚えておいたほうがいいことをまとめ。

PixelBlocks/001/Python
Continue reading
Tags: python
Posted at 2010-10-21 22:26:30 under テクノロジ (by key)

某所で書いてたブログエントリ復刻シリーズ。

Yahoo!デベロッパーネットワークにはいくつかWebAPIがあるのですが、 そのうちの一つ、キーフレーズ抽出で遊んでみた。

キーフレーズ抽出とは、ある特定の文字列から重要と思われるフレーズを抜き出す機能。 これは構文解析により重要度の高い単語(主語とか目的語になっているもの)を見つけるアルゴリズム、 だと思われる。

キーフレーズ抽出はWebAPIで提供されているので、HTTPリクエストを送出するクライアントを作ればよい。 今回は特定のURLから本文をブッコ抜いてキーフレーズ抽出にかけるという処理を書いてみた。

処理フローは以下のようになる。

  1. 指定されたURLをクロールしてHTMLドキュメントを得る
  2. HTMLドキュメントから文字列を抽出する(スクレイピング)
  3. 抽出した文字列をキーフレーズ抽出APIに投げる
  4. キーフレーズを表示

yapi.py

yapi_keyphrase.py

crawl.py

試しにこのあいだ書いた BF01B購入記 をキーフレーズ抽出処理にかけてみた。 ちょっとHTMLのゴミが残っているのはご愛敬(スクレイピングの精度を上げれば解決できる…と思う)。それなりに意味のある単語が残ったような気がします。

  • BF-01B
  • 実業団いわきクリテリウム
  • strong
  • WAPKEY
  • BF-01B経由
  • バッテリ
  • ドコモ
  • インターネット
  • 必要十分
  • CDMA2000
  • WiFi
  • DoCoMo BF-01B
  • MySQLスレーブノード
  • 実業団いわきクリテリウム予選
  • 実業団いわきクリテリウム決勝
  • SSID
  • MAVIC R-SYS
  • 3G回線経由
  • 電源
  • カバーエリア

Tags: python, yahoo
Posted at 2010-10-01 17:24:00 under テクノロジ (by key)

思い出したのでメモ。メモのみ。

Tags: python