傀儡師の館.Python

傀儡師の館.Python

PR

Calendar

Keyword Search

▼キーワード検索

Archives

2024.06
2024.05
2024.04
2024.03
2024.02
2024.01
2023.12
2023.11
2023.10
2023.09

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2002.12.31
XML
カテゴリ: ことばの処理
ああ、今日で今年も終わりだ。今までこのページを見にきてくれた方々に感謝。ちゃんと読んでくれた人もいるだろうし、ちょっと見てなんだこりゃとすぐ別のページにいった通りすがりの人も多いというかほとんどだろうけど、皆さん感謝。

飽きっぽい私ではあるが、意外にもこの日記は細々ながら続いている。また、細々でもアクセスカウンタがのびていくと、誰か読んでくれている人がいるんだなと思って書く気になるのだから。1人でも2人でも、どこかに共感してくれたりした人がもしいたら、それで満足。今まで、このぐらい沢山の量の文書を匿名で人前にさらしたことがなかったので、書いていると新鮮な気持ちになって、自分の書く文章を見つめなおすきっかけにもなった。ここに書く文章っていっきに書いて見直しもせず、更新してしまうので、勢いで書くとけっこうヘンな言い回しするなとか、後で気が付いたりするけど、まあ、それはそれでいいかと思って書き付けている。

正直、今いったい何のために書き続けてるんだかよく分からないのだが、沢山書いておけば、あとーになって見返してみると何か自分の再発見もあるだろうなとか思う。人目にさらすことによって、自分だけしか見ない日記とはちょっとまた違う自分が出てくるのだな。

『リプレイスメント』 を見た。まあ、こういうB級映画は素直に楽しめばよいなと。娯楽作品としてよくできてる。DVDで見ると監督の解説が聞けるので楽しい。監督の解説を聞いた後にもう一度見る。そうすると1枚で3度は最低でも見られる。まあ、とにかくアメリカンフットボールは、あのガツンのプロテクターがぶつかる音がいいのだ。CATVで宇宙戦艦ヤマトシリーズをまとめてやっていたのだが、なんだか自爆テロ的な場面多いなー、とふと思った。

みなさん、よいお年を。


○関数を使ってまとめなおす (Python で人工無能)

Python で人工無能では、まず、入力を鸚鵡返しにする小さなプログラムを作り、「おみくじ」を引けるようにした。そして、入力した文字列を MeCab で形態素解析を行うところまでをこれまでやってきた。ここで、関数を使って、プログラムをまとめなおしてみることにする。

その前に、Python のプログラムファイルの先頭に次の行を入れることにする。

#!/usr/bin/env python




そして、終わりには、次のように入れておく。前に、import を使って他のファイルを読み込むことをしたが、そうした場合には、プログラムを読み込んだとたんに実行されてしまうとこまる。次のようにして、if 文の後ろに読み込んだときに実行したいプログラムを入れておくと、プログラムとして起動したときだけ実行され、import で読み込んだときには main() が実行されないので、便利なのだ。

if __name__ == ’__main__’:
  my_function1()
  my_function2()
  my_function3()

python の実行環境は、名前空間を持っていて、import os とすれば、os ライブラリの中に入っている関数は、os という名前空間の中に読み込まれる。os ライブラリの中に open という関数があれば、os.open でこの関数を扱うことができる。door というライブラリを import door として、その中に open という関数があれば、door.open となる。つまり、ライブラリごとに名前空間を持つので同じな前の関数があっても名前がぶつかるということがないのである。端的に分かりやすい名前であるほど重複する可能性があるので、こうしたライブラリごとに名前空間が切られる仕組みは非常に楽なのだ。もしこの仕組みがなければ、すべての関数に異なる名前をつけなくてはならなくなり、非常に面倒なことになる。


osライブラリ doorライブラリ(例)

+----+ +----+
| open  | | open  | 名前がダブっても大丈夫
| close  | | close   |
| ....    | |   ...   |


で、__name__ というのは、この名前空間の名前がどこかを示す環境変数だと考えればよい。インタプリタで起動したところで次のように試してみる。

>>> __name__
’__main__’

で、実行環境自体を現すのが __main__ だということが分かる。C のプログラムを書くと、int main(argc, argv) とかメインの関数を入れるのと同じことなのだ。python では、main という関数を定義してここに、メインのプログラムを書き込んでやるのと同じようなことだ。

さて、そもそも何で関数なんだということになるが、これまでのように実行すべきことをズラズラと並べればそれでちゃんとプログラムは動かせるし、小さいプログラムなら別に困ることはないのだ。でも、機能単位で関数として切り出すことによって、その関数を別のプログラムで再利用することもできるし、また、見た目にも機能単位になっているので分かりやすくなるのだ。そして、関数単位でプログラムの動作をしっかりチェックしておけば、大きいプログラムであっても、分かる範囲から確実にチェックできるので、まともにプログラムを書くのであれば、普通は関数を自分で定義して使うことになる。これまではpython にあらかじめ組み込まれている関数だけを使っていたが、それと同じようなものを自分でも作れるということになる。



def functionName(引数1, 引数2, ..):
  処理
  return 戻り値

さっそく「おみくじ」という関数を作ってみる。おみくじは引数をとらない関数なので()の中には何もいれないでおく。


>>> def omikuji():
    import whrandom
    fuda = [’大吉’,’中吉’,’小吉’,’凶’,’大凶’]
    result = whrandom.choice(fuda) + ’です。¥n’
    return result

>>> o = omikuji()
>>> o
’大吉です。¥n’
>>> print o
大吉です。

という感じになる。毎度中途半端だが今日はここまで。で、次回からは MeCab を呼び出しているところを関数化して、人工無能の雛形作りをはじめてみることにする。





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

Last updated  2006.09.14 00:02:53
コメントを書く


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

© Rakuten Group, Inc.
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: