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

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

*[[日本語WordNet:http://nlpwww.nict.go.jp/wn-ja/]]
こちらが公式サイト。
-[[WordNet(ウィキペディア) :http://ja.wikipedia.org/wiki/WordNet]]
linkの意味などの説明
*[[(Pythonで)日本語WordNetのデータベースを探索するフロントエンドプログラム:http://subtech.g.hatena.ne.jp/y_yanbe/20090314/p2]]
こちらの記事のプログラムを動かすには、Python2.6以降に追加された namedtupleが必要。 (collectionモジュールに収録)

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

[/pukiwiki]

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

[/pukiwiki]

"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が具体的に何を意味しているのか。。。は、これから調べます(汗
(多分、テキストマイニングに使うのかと思われ)

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

コメントを残す

メールアドレスが公開されることはありません。