Screaming Loud

日々是精進

プログラミング

CodeKata1:スーパーマーケットの価格

情熱プログラマー(オーム社)に載っている「いますぐやろう」の項目で紹介されていたCodeKataをやってみようと思い、とりあえず和訳をしてみました。 まずは、一つ目CodeKata: Code Kata One - Supermarket Pricingを和訳してみました。このkata(型)はDFW…

CodeKataとは?

CodeKataという開発者のための練習サイトがある。 これは情熱プログラマー ソフトウェア開発者の幸せな生き方という本に薦められていたサイトだ。そこで、そのサイトの問題を1ヶ月程度で考えてみることにした。 ついでなので、和訳を載せることにした。まず…

frozenset型のイテレーション速度

以前,set型とlist型のイテレーション速度 - Screaming Loudを比較したが,frozenset型に関してはどうなのだろうか?と疑問を持ち.比較してみた.実験の仕方は同じだが,以下のようになった. set 12.19 list 11.01 frozenset 22.92frozensetのイテレーショ…

Pythonで実装する類似度計算

A = {"みかん":5,"りんご":8,"ぶどう":2} B = {"みかん":5,"なし":8,"ぶどう":2,"もも":1} 辞書の要素は{単語:その出現頻度}という構成です.この2つのベクトルの類似度を計算する尺度を紹介する. PMIなど共起についての尺度は使わず,単純なベクトルの比較…

set型とlist型のイテレーション速度

set型とlist型のイテレーションによるスピードの違いを調べてみた. setiter = set(range(100000000)) listiter = list(setiter) test = "" import time #set型のかかった時間 start = time.clock() for a in setiter: test = a print time.clock() - start …

pythonでoptionを関数へ

pythonでコードを書く時,メインモジュールを使っていると思う. 自分はいつもそのメインモジュールの中にoption系を全部書いていた. option系って勝手に言ってるけど,要はコマンドラインでoptionをつけるモジュール. →15.4. argparse — コマンドラインオ…

ビタビアルゴリズムをpythonで実装してみた

ビタビアルゴリズムを理解も兼ねて実装してみました. # -*- coding:utf-8 -*- states = ("rainy","sunny") observations = ("walk","shop","clean","shop","walk") start_prob = {"rainy":0.6,"sunny":0.4} transit_prob = {"rainy":{"rainy":0.7,"sunny":0…

研究・コーディングを加速させる

研究・コーディングをしていて何をすればいいのか分からなくなってしまう時がある.そういう時ってのは,大体頭の中が整理できていない.複雑な問題の場合,頭の中だけだと片方を考えているともう片方が薄れるのでどっちがどっちかわからなくなる.頭の良い…

extbodyにおける文字化けの対処

extbody -- Blog&News本文領域抽出ツール手軽な本文抽出ツールなのですが,Unicodeにしっかり直しているのに文字化けしてしまう問題について.ソースを少し直すと大体直ります.ダウンロードしたソースのディレクトリに入り emacs ./extbody/extbody/PageInf…

mecabへの辞書追加(left-id.def でのエラー)

今回はmecabへの辞書追加でハマったのでそのメモとして残します.ほとんどhttp://fukushimu.blog.shinobi.jp/Entry/76/を参照しました. /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u wikipedia.dic -f utf8 -t utf8 w…

Tex/YaTex環境の作成 -Mac編-

Macportsをインストールする. MacportsはXcodeが必要なので,無い人はまずXcodeから.Macportsがインストールできたら とりあえずportをアップデートしておきましょう. sudo port selfupdate sudo port upgrade outdatedそこからは以下のページを参照し,…

リスト内の最大値を見つける

最大の値を見つけるのは簡単だが,そのindexを取るのはそういえばどうやるんだっけ? と思い,少し調べて速度比較してみた. from itertools import count from operator import itemgetter from time import clock import random def func1(x): return x.in…

K-means

今回は"k-means"(k-平均法)を実装してみました. k-meansに関してはネット上でたくさん説明されています. 簡単に説明すると, 前提:クラスタ数は与えられている 1,適当に各データ点をクラスに割り振る. 2,各クラスタの重心を求める 3,各データ点を…

Windowsのフォントは嫌だ!

自分はMacとWindowsを併用しているのですが,Windowsを使うたびにフォントの汚さに嫌気がさしていました, そんな中少し調べてみるとWindowsフォントを簡単にLinuxのように変えることが出来ました.特にputty上でフォントサイズを小さくしたときのフォントが…

KNPのインストールでつまずいたあなたに

KNP4.0のインストールにつまずいていた一人です. 原因はたくさんありました. CRFのlibtool関係でエラーが出る. これに関しては最新版のCRF++5.7を入れることにより解決します. TinyCDBが認識されない. aptでtinycdbをいれていると発生します. これは一…

言語処理で覚えるべきコマンドまとめ

man まずはこれ! 分からなかったらとりあえずmanで確認. grep,egrep 正規表現で指定した行を取得. egrepはextend-grepであるため,いろいろ出来る. head,tail これは頭から何行か,もしくは最後から何行かだけを取ってくるコマンド. 全部いらないからと…

辞書型におけるsetdefaultのTips

通常の辞書 dict.setdefault()は単純に値を返すだけかと思っていたら, 辞書の辞書みたいな使い方もできるんですねー. >>> dict = {} >>> dict.setdefault('a',{}).setdefault('b',3) 3 >>> dict {'a': {'b': 3}} 辞書の中にリスト,タプルなども可能です.…

msgpack-pythonのインストール

jsonよりも速いmsgpackのインストールでのメモ. msgpack-python0.1.12のインストールでのエラー msgpack-python0.1.12のインストールで以下のようなエラーが出てました. gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-protot…

コメントのススメ

プログラミングをするときにコメントアウトしてコードの可読性を上げるのは常識ですね. Pythonのコメントは「#」ですが,実は"""hogehoge"""で書いたほうが良いことを知りました. 今まで知らなかったことが,恥ずかしい話なのですが・・・.ではどうして""…

twitterとPython (tweepy)

pythonからtwitterに投稿するためのモジュールは2つある. python-twitterとtweepyだ. python-twitterが主流だが,使い始めた当時python-twitterのOAuth認証のドキュメントがなくてtweepyを利用していた. そこでtweepyの紹介をする. TLから取得 まずは簡…

多重配列における評価(min,max)

多重配列のソートはみんな色々やっている. 例えば sorted(x,key=lambda x:x[0]) #もしくは sorted(x,key=lambda x:x[0],reverse=True) と書けば配列の一つ目でソートが出来る.これはソートだけに限るものではなかった. >>x = [(50,taro),(43,jiro),(85,ha…

パーセプトロンをPythonでかいてみた.

機械学習の初歩ということでパーセプトロンを実装してみました. パーセプトロンとは2値識別器です.クラスは1イテレーションを表しています. 2次元以上でも計算できるようにしました. import sys from optparse import OptionParser import matplotlib …

KNPの係り受け関係について

KNPを使ったときのまとめをメモ %juman | knp -tab # こっちがdefault %juman | knp -tab -dpnd'-dpnd'を付けたときの係り受け先の見方が分からなかったのでメモ. '-dpnd'をつけた場合,格関係の解析*1 を行わない. 係り受け関係の見方 KNP独自の基本句と…

subprocessとコマンドラインとリダイレクト

コマンドをPythonから入力するやり方. 基本 ls -lこんなコマンドは以下の二通り. import subprocess subprocess.call("ls -l",shell=True) とても単純.シェルを介してコマンドを実行している. もう一つはシェルを介さない場合. import subprocess subpr…

ログインシェルを変えたいとき

zshなどを使ってるのに,毎回ログインしてからzshとコマンドを打つのは面倒. ましてやscreenなどで立ち上げる度にbashが起動していたら発狂モノ. ということでメモ. %chsh LoginShell : /usr.bin/zshと打ち込んで再ログインすれば,完了. 追記 NISで管理…

理解するということ

まぁこれから書くことは一般に勉強している人なら大体知っている話なんではないかと思ったんだけど自分の言葉で書いてみました.物事を考えるとき木を見て森を見ずになりやすい。特に難しいものになればなるほど。 例えば,新しい分野の話を聞いたとき,出て…

ファイル入力での早さ

最近重いコードばかり書いていたので,もっと早く書かなければと思った. 実際どれくらいスピードが違うのか少し測ってみた.まずは開くとき. test1.py while(i<100): for line in open(filename): pass i += 1 test2.py while(i<100): f = open(filename) …

プログラミングスキルを向上させるには

紹介が遅れたが,自分は自然言語処理を専門としている. 専門といえど高々1年ちょっとしかやっていないが. Beautifulsoupなどのパーサーを使ってる時点で自分が自然言語処理関係だということは検討がつくかもしれない. 話は変わるがプログラミング能力に関…

日本語の正規表現

正規表現を利用全角も含めた記号があるかを判定する import re query = u"「明けましておめでとう。」" # 記号に関しては思いつくものを適当に上げました. # \マークは書かないと正規表現の一部として認識されてしまう. symbols = u"[.!?$%&_\-\[\]!?(…