namedtuple(名前付きタプル)をPython2.5でやってみた



日本語WortdNetフロントエンドをPython2.5で。

日本語WordNet

こちらが公式サイト。

(Pythonで)日本語WordNetのデータベースを探索するフロントエンドプログラム

こちらの記事のプログラムを動かすには、Python2.6以降に追加された namedtupleが必要。 (collectionモジュールに収録)

なのですがー うちは2.5を使ってるので、上記プログラムに必要な機能のみ作ってみました。

collections.pyとして、上記リンク先記事中のプログラムと同じフォルダに保存すればOK.
(標準モジュールと名前がかぶるのが厭な場合は適宜。)

"namedtuple.py"
def namedtuple(tname,tmemberstr):
    __t=tmemberstr.split()
    __a=",".join(__t)

    class _(tuple):

        exec "def __new__(cls, %s):return tuple.__new__(cls,(%s))"%(__a,__a)
        exec "def __init__(self, %s):tuple.__init__(self,(%s))"%(__a,__a)

        def __get__(self,x):

            return self[__t.index(x)]

    for m in __t :
        setattr(_,m,property(lambda self,p=m:self.__get__(p)))        

    _.__name__=tname

    return _

exec文使ってたり、かなり凶悪ですが、あまり気にしないことに(汗
(exec文使わずに、キーワード付き引数で初期化する方法を思いつかなかったので)

namedtupleの動作サンプル

>>> X=namedtuple("X","a b c")   #名前付きタプル クラスXを作成
>>> x=X(1,2,3)                        #初期化方法 その1
>>> x.a                                  #プロパティ名でアクセス
1
>>> print x
(1, 2, 3)
>>>x[0]
>>> x[0]                                 #インデックスでアクセス
1
>>> x.b
2
>>> x.c
3
>>> x2=X(c=3,b=2,a=1)              #キーワード引数で初期化
>>> x
(1, 2, 3)
>>> x2
(1, 2, 3)
>>> x==x2
True
>>> x==(1,2,3)                         #このあたりの挙動は純正と違うかも
True

日本語WordNet DBで、「お茶」という単語について検索した結果サンプル。

word  お茶
words= [(161930, u'jpn', u'\u304a\u8336', None, u'n')]

link= hype
お茶 tea
  ブッシュ bush
    木本 ligneous_plant
      維管束植物 tracheophyte
        フロラ flora
          生物 being
            生き物 living_thing
              全般 whole
                もの physical_object
お茶 tea
  草 herb
    シーズニング seasoner
      材料 fixings
        食品 foodstuff
          滋養分 food
お茶 tea
  飲み料 drink
    滋養分 food
    リクイッド liquid
      流体 fluid
        物体 substance
          物質 matter
          一部分 part
            結付き relation
お茶 coffee_break
  おやつ collation
    食事 repast
      食べ物 nutrition
        滋養分 food

link= hypo
お茶 tea
  紅茶の葉 black_tea
  緑茶 green_tea
お茶 tea
  ハーブティー herbal

link= msub
お茶 tea

link= mprt
お茶 tea

link= hmem
お茶 tea

link= hsub
お茶 tea

link= hprt
お茶 tea

ところで、このデータベースは、何にどう使えばいいのか、linkが具体的に何を意味しているのか。。。は、これから調べます(汗
(多分、テキストマイニングに使うのかと思われ)

でも人工無脳に使うと面白そうですねー

Tags:

Related posts

タグ:

コメントは受け付けていません。