雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2009-12-03

[]コーディング規約 コーディング規約 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - コーディング規約 - 雲雀は高く空を舞い コーディング規約 - 雲雀は高く空を舞い のブックマークコメント

ここら辺。pepはPython Enhancement Proposalとか。

[]パッケージに関する覚え書き パッケージに関する覚え書き - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - パッケージに関する覚え書き - 雲雀は高く空を舞い パッケージに関する覚え書き - 雲雀は高く空を舞い のブックマークコメント

パッケージについて

__init__.pyの入ったディレクトリをパッケージとしてimportできる。Mac OS Xのバンドルみたいな感じ。

また、ディレクトリは多層構造にできるけど、その際各ディレクトリに__init__.pyが必要。

__init__.pyはパッケージインポートの祭の初期化メソッドなどを記すが、空でもかまわない。


パッケージのインポート

Sound/
    __init__.py
    Format/
        __init__.py
        echo.py
        sorround.py
     Filters/
        __init__.py
        equalizer.py
        vocoder.py

このようなパッケージがあった場合、echo.pyをインポートするにはimport Sound.Format.echofrom Sound.Format import echoなどとする.

echo.py内の関数echofileterを使用する場合、import Sound.Format.echoとした場合はSound.Format.echo.echofilter(input, output)とする。

from Sound.Format impor echoとした場合はecho.echofilter(input, output)とできる。

またfrom Sound.Format.echo import echofileterと、直接関数をインポートすることもでき、この場合はechofilter(input, output)と使える.

from package import itemとした場合、itemはサブパッケージ、サブモジュール、モジュール内で定義されている関数、クラス、変数などを指定できる。

import package.itemとした場合、itemに指定できるのは、モジュールかパッケージのみ。

パッケージ内での暗黙のあるいは明示的な相対import

1) 暗黙の相対パスimport

パッケージ内でのimport itemの実行はまずパッケージ内で探索されその後標準検索パスを見る。

import されたモジュールが現在のパッケージ (現在のモジュールをサブモジュールにしているパッケージ) 内に見つからなかった場合、 import 文は指定した名前のトップレベルのモジュールを検索する。

モジュール Sound.Filters.vocoder で Sound.Effects パッケージの echo モジュールをimportしたいときは、 from Sound.Effects import echoとする。

2) 明示的な相対パスimport

モジュール Sound.Filters.vocoderから他のパッケージやモジュールをimportする際はfrom .. import Effects, from ..Effects import echo, from . import equalizerなどとする.

3) もちろん絶対パスimport も行えるので可読性などのためには絶対パスimportが良いのでは

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091203

2009-12-01

[]mecabの解析辞書にUniDicを使い始めた mecabの解析辞書にUniDicを使い始めた - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - mecabの解析辞書にUniDicを使い始めた - 雲雀は高く空を舞い mecabの解析辞書にUniDicを使い始めた - 雲雀は高く空を舞い のブックマークコメント

1) Uni-dicについて

あとで。

インストール方法

UniDicのページからバイナリがダウンロードできるのでそれを適当なディレクトリに置いて、mecabrcから指定するだけ。

mecabrcのディレクトリは僕の場合は /user/local/etc/mecabrc,UniDicは/usr/local/lib/mecab/dic/unidicにおいた.

mecabrcはにはdicdir=/usr/local/lib/mecab/dic/unidicを記述。 (複数辞書同時に使う場合はどうするんだろう…?)

ユーザ辞書への語句の追加

追加語句リストをcsvファイルで作成して登録する方法自体は,辞書によらずmecab-dict-indexを使うで共通.

例。

csvファイル

あちょっ,-1,-1,-3200,感動詞,めりも言葉,*,*,*,*,アチョッ,あちょっ,あちょっ,*,*,め,あちょっ,アチョッ
めりも,-1,-1,-3200,名詞,固有名詞,人名,*,*,*,メリモ,メリモ,めりも,メリモ,メリモ,固,めりも,メリモ
おはよっ,-1,-1,-3200,感動詞,一般,*,*,*,*,オハヨウ,御早う,おはよう,オハヨー,オハヨウ,和,おはよう,オハヨー
; 表層, 左側index, 右側index, コスト, 品詞, 小品詞1, 小品詞2, 小品詞3,*,*,*,*,*,.. 

sudo /usr/local/libexec/mecab/mecab-dict-index -d ./ -u merymo2.dic -f utf8 -t utf8 merymo2.csv

csvファイルで指定できる品詞はまだよく分かってない…。のであとで。

作成した辞書ファイルを使用するにはmecabrcdic/unidic/dicrc userdic = /usr/local/lib/mecab/dic/unidic/merymo2.dicを追加。

あと、pos-id.defを編集してsudo /usr/local/libexec/mecab/mecab-dict-indexをするとmatrix.binが上書きされちゃうんだけど、これはどうしたものなのかなぁ…。これもあとで。

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091201

2009-11-30

[]文字列をaとbとcとdで分割したい 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い のブックマークコメント

文字列をseparatorで分割するときはStrings.split()メソッドを使う。

text = u'おはようございます。それでは行ってまいります。横浜は雲が出ているものの、晴れ間がのぞいています。'
seped = text.split('')
print seped
[u'おはようございます',
u'それでは行ってまいります',
u'横浜は雲が出ているものの、晴れ間がのぞいています'

文字列を複数の位置で分割したいときは?

  1. splitをループで使う
  2. 正規表現のre.split()メソッドを使う
text = u'おはようございます。それでは行ってまいります。横浜は雲が出ているものの、晴れ間がのぞいています。'
seped = re.split(u'。|、', text)
print seped
[u'おはようございます',
u'それでは行ってまいります',
u'横浜は雲が出ているものの'
u'晴れ間がのぞいています'

区切り文字を出力に含みたいときはpatternをグループ化すればおk

seped = re.split(u'(。|、)', text)
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091130

2009-11-28

[]PythonからSQLite3への日付型変数の登録 PythonからSQLite3への日付型変数の登録 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - PythonからSQLite3への日付型変数の登録 - 雲雀は高く空を舞い PythonからSQLite3への日付型変数の登録 - 雲雀は高く空を舞い のブックマークコメント

PythonからSQLiteにデータを登録するに当たり,datetime.date型とdatetime.datetime型をISO日付形式,ISO タイムスタンプ形式に変換する適合関数がデフォルトで登録されている.それ以外の形式に,あるいはそれ以外の型を適切な型に変換して登録したいときには適当な適合関数を書いて登録すればよい。

import sqlite3
import datetime, time
sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("select ?", (datetime.datetime.now(),))
print(cur.fetchone()[0])
2009-11-28 11:56:02.498758



sqlite3の日付処理関数については以前にまとめたけど再び。

日付処理関数はstrftime, datetime, date, time, Juliandayがあって、このうち datetime, date, time, Juliandayはそれぞれstrftimeの特別な場合。


書式はstrftime(format, timestring, [modifier, ...])datetime(timestring, [modifier, ...])など。


modifierにutcを指定した場合は,与えられたtimestringをローカルタイムゾーンでの日時として解釈しUTCの日時に変換して表示する.ローカルタイムゾーンがJSTの場合はtimestringから9時間引かれた時間が返る.


逆にlocaltimeを指定した場合は与えられたtimestringをUTCでの日時として解釈しローカルタイムゾーンの日時に変換して表示する。ローカルタイムゾーンがJSTの場合はtimestringに9時間たされた時間が返る.




cur.execute("select date(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])

2009-11-28
cur.execute("select time(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])

11:59:48
cur.execute("select datetime(?)", (datetime.datetime.now(),))
print(cur.fetchone()[0])

2009-11-28 11:59:48
cur.execute("select datetime(?, 'utc')", (datetime.datetime.now(),))
print(cur.fetchone()[0])

2009-11-28 02:59:29
cur.execute("select datetime(?, 'localtime')", (datetime.datetime.now(),))
print(cur.fetchone()[0])

2009-11-28 20:59:11

RizalRizal2014/07/09 08:56I'm impressed by your writing. Are you a professional or just very knoewedgeabll?

LevonLevon2014/07/22 08:01A piece of <a href="http://stosri.com">erioutidn</a> unlike any other!

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091128

2009-11-21

[]iPythonで日本語を表示する iPythonで日本語を表示する - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - iPythonで日本語を表示する - 雲雀は高く空を舞い iPythonで日本語を表示する - 雲雀は高く空を舞い のブックマークコメント

iPython 0.10(with Python 2.6.3.iPythonSciPyNumPyと一緒に入れた (or入った)でユニコード文字列がうまく取り扱えない例。

こちらにより修正しました。

s = u'あいうえお'
print s
<もじばけもじばけ>

ユニコード1文字(3byte)を1byteずつの3ユニコード文字列としてしまうことに由来するバグだとか。

修正方法は以下。iplib.pyの2200行目付近を以下のように修正。一行目をコメントアウトし、以降の文字列をユニコード文字列に変更するだけ。これで無事表示されるようになる。

-        source=source.encode(self.stdin_encoding)
-        if source[:1] in [' ', '¥t']:
-            source = 'if 1:¥n%s' % source
+       #source=source.encode(self.stdin_encoding)
+        if source[:1] in [u' ', u'¥t']:
+            source = u'if 1:¥n%s' % source

ちなみにiplib.pyportを使ってSciPyとかと一緒に入れた僕の場合は、/opt/local/var/macports/software/py26-ipython/0.10_0+scientific/opt/local/
Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/IPython/ipapi.py にありました。

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091121
テクノラティプロフィール