[[ノート>ノート/ノート]]~
訪問者数 &counter();      最終更新 &lastmod();

*Pythonを使ってみる [#vd7db704]
***Pythonとは [#c2346e07]
Script言語。シンプル。習得の容易さを狙う。オブジェクト指向。~
ライブラリが非常に充実⇒パーツ組立て式プログラミングも可能。
***情報源 [#g83be187]
-http://www.python.jp Python日本ユーザグループ
-本家
-[[Instant Python(訳):http://www.python.jp/Zope/intro/instant_python_jp]]  他の言語を知っている人向けの簡易入門ページ。確かによくできている。
-プログラミングスタイルがCやJavaとは違う部分がある(for文でindexを使わない)
ので、そのあたりの入門書が欲しい。さしあたって、
[[CodeZinの記事(ユーザ登録必要):http://codezine.jp/a/article/aid/1617.aspx]]
が役立った。

***使ってみたい動機 [#r4ad56c6]
-自然言語処理用のパッケージがあったから。

***言語習得 [#nc0cc4a0]
-言語の要点は、上記Instant Pythonを見るのがよさそう。
-C言語で育った自分にとっての違和感(新しいポイント)は
--段落を括弧でくくらないこと。段下げだけでコントロール。下手をすると間違いそう。
--繰り返しにiterator([[ノート/Python/ジェネレータ]])を使う(for文でindexを使わない)。自分は、過去30年以上の
習慣を変えるのだから、このスタイルに慣れるには大分かかりそうな気がする。
そういえばその昔(22-3歳の頃)、APLを初めて使ったときにまったく同じ問題に
遭遇した。その時の私のコメントは、『並列が可能な処理を、陽に直列に書かないのは、
よいことだ』。Pythonについてもまったくそう思う。C言語やその前のFortran,
Algolの悪しき習慣だね。

***ライブラリurllibを使ってみる (2007/11/22) [#l6bfbf19]
[[ファイルを開いて読む:http://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/readfile.html]]
 #!/usr/bin/env python
 
 for line in open('text.txt', 'r'):
     print line
 
[[11.4 urllib -- URL による任意のリソースへのアクセス:http://www.python.jp/doc/release/lib/module-urllib.html]]~

[[11.5 urllib2 -- URL を開くための拡張可能なライブラリ、の、11.5.22 例:http://www.python.jp/doc/2.4/lib/urllib2-examples.html]]
 import urllib2
 f = urllib2.urlopen('http://www.python.org/')
 print f.read(100)

 import urllib2
 req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi', \
     data='This data is passed to stdin of the CGI')
 f = urllib2.urlopen(req)
 print f.read()
 Got Data: "This data is passed to stdin of the CGI"

これを使って、PubMedを検索アクセスしてみる。 [[山内のメモ>Entrez・PubMedをプログラムからアクセスする方法]]のうち検索の部分、 ◆[[その元ページ:http://eutils.ncbi.nlm.nih.gov/entrez/query/static/eutils_help.html]]。  元ページに出てくるPerlのプログラムの例 &ref(eutils_example.pl);(コメント付けておいた)

上記のプログラムを書き換えて、たとえば
 import urllib
 
 for line in  urllib.urlopen("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer&reldate=60&datetype=edat&retmax=10&usehistory=y"):
   print line

これで得られる検索結果(論文リスト)は、&ref(eutils_test0_result.txt); となったので、これを解釈する必要あり。

***Pythonでの再帰呼び出し(Recursion)〜別に目新しくないけれど備忘録 [#f61cb9f0]
 def f(i):
     if i==1:
       print "i = 1"
       return 1
     else:
       print "i = " + str(i)
       return i*f(i-1)
 
 print f(5)
実行結果は
 i = 5
 i = 4
 i = 3
 i = 2
 i = 1
 120
「ループの代わりに使う」という話もあるようだけれど、どうなんだろうか?

***[[検索で得られた結果(XML)を解釈して、Abstractをアクセスしよう>ノート/Pythonその2]] (2007-11-23) [#fb11dc0b]

***[[wxPython:http://www.wxpython.org/]] [#cfa052f8]
-[[Learning wxPython:http://wiki.wxpython.org/How%20to%20Learn%20wxPython]]~
-[[Getting Started:http://wiki.wxpython.org/Getting%20Started]]
-IBM Developer's Work
--[[wxHTML for beginners---Building basic browser functionality with wxPython:http://www.ibm.com/developerworks/linux/library/l-wxpython/]]
--[[Qt and pyQt:http://www.ibm.com/developerworks/linux/library/l-qt/]]
--[[Build cross-platform GUIs using wxWidgets---The wxWidgets family of tools lets you use your language of choice:http://www.ibm.com/developerworks/linux/library/l-wxwidgets/]]

***Jythonを使わずに、PythonからJavaを呼び出す?  (2008-11) [#z6339d6b]

-[[Communication between Java and Python:http://wiki.cacr.caltech.edu/danse/index.php/Communication_between_Java_and_Python]] まとめページ

-[[JCCを試してみる:CommentsAdd Starhttp://bugzero.shooti.jp/sitehead/http%3A%2F%2Fd.hatena.ne.jp%2Fatsuoishimoto%2F20091103%2F1257238996]]~
~
JCC は、 Javaのライブラリを Python から呼び出すため拡張モジュールを生成してくれるツールで、全文検索ライブラリ Apache Lucene の Python インターフェースである PyLucene 用に開発された。しかし決して PyLucene 専用のツールではなく、Python から Javaを呼び出す必要がある場合に利用できる汎用的なツールである。

-[[JPype:http://jpype.sourceforge.net/]]~
~
JPype is an effort to allow python programs full access to java class libraries.

***nltkはJavaを呼び出すための仕組(たぶんラッパー?)を持っているらしい 2009-12-17 [#h06c9e87]
***nltkはJavaを呼び出すための仕組(たぶんラッパー?)を持っているらしい (2009-12-17) [#h06c9e87]
[[http://nltk.googlecode.com/svn/trunk/doc/api/nltk.internals-module.html#config_java]] の javaはそれらしいことを言っている。

実際に使ってみた ⇒

***作ったクラスをファイブファイル化(モジュール化)する (2010-01-11) [#qe1f4c72]
[[http://otosata.jp/blog/?p=79]]を参照した

まずモジュール化して置きたいクラスを保存するが、置く場所(ディレクトリ)をたとえば/usr/local/python/modulesと決めたとする。

呼び出す側(そのモジュールを使う側)の中に、
 mod_path = "/usr/local/python/modules"
 import sys
 sys.path.append(mod_path)
 
 from モジュールファイル名 import モジュール内に書いたクラス名
を追加する。

モジュールの中身はクラスでなくても、メソッドだけでもいいみたいである。

例として、ファイルmytestmodule.py  (拡張子pyを付けること) を以下のように準備する。
 def fact(i):
     if i==1:
       print "i = 1"
       return 1
     else:
       print "i = " + str(i)
       return i*fact(i-1)
これを/usr/local/python/modules/mytestmodule.pyとして格納しておき、呼び出し側を(任意の場所で)次のように実行できる。
 >>> mod_path = "/usr/local/python/modules"  <--- 以下3行は雛形どおり
 >>> import sys
 >>> sys.path.append(mod_path)
 >>> from mytestmodule import fact           <--- モジュールファイル名mytestmodule.pyから拡張子.pyを除いたものを指定、importするのはこの場合メソッド名fact。
 >>> fact(5)                                 <--- では実行してみる
 i = 5
 i = 4
 i = 3
 i = 2
 i = 1
 120

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS