学んだことをいくつか

研究資料検索システムの進捗を出すために作業してて学んだことをいくつか

シェルスクリプトはスペースに容赦無い

下手するとpython以上にコード表記に厳しいんじゃないかっていうくらい。 スペースがあるかないかでよく怒られる。代入の=とかif文の[]とか。

やっぱりpythonエンコード周りは闇だった

単純な文字列のUnicodeErrorによくあるstr型とunicode型の扱いくらいなら慣れてきた。 今回困ったのは名前が日本語のファイルをopen()しようとしたとき。 ああでもないこうでもないとやった挙句、結局それまでと同様にunicode()で直った。 実際の問題はファイル名ではなく、パスが絶対パスではなかったことだったようだ。なぜ文字化けしたのかは不明。

valueソートの辞書

keyではなくvalueで辞書をソートしたいというのはよくある。sort()にkey=lambda x:x[1]してやればよい。 今回jsonを使って辞書型をvalueの降順にdumps()したかった。 しかし上述のsort()のやり方はdict.items()をソートしているためソート後は辞書型にならない。 では辞書型に戻してやればいいのかというとそれも違う。ソートした順番通りに辞書型が作れない。 さてどうしよう、とググったところOrderedDict()を使えばいいとのこと。 ついでにdumps()で日本語を出力する方法(ensure_ascii)も覚えた。

from collections import OrderedDict

dict = {'赤':1, '青':32423, '黄色':0}
sorted_dict = OrderedDict(
        sorted(dict.items(), key=lambda x: x[1], reverse=True))
        print json.dumps(sorted_dict, ensure_ascii=False, indent=4)

githubについて

学生は大学のメールアドレスを登録すればgithubのプライベートリポジトリが使える。 このプログラム自体は公開しても全然構わないのだが、対象データが個人情報なのでうかつに公開したくない。 そういうわけでプライベートリポジトリを使って管理している。 折角なのでgithubに関する今まで使ったことのない機能もいっぱい使っていきたい。 コミット量がそこまで多くないのが少し問題だが、[successful git branching model]とかgithubを正しく使えるようになりたい。 とりあえずissuesを存分に利用してみる。branchもmasterとdevelopで切っているが、一人作業なので有り難みがない。 もっとfeatureとかreleaseとか使っていきたい。

進捗

とりあえず全pdf,pptxファイルの単語をベクトル化するところまではできた。tf-idfもすぐに計算できる。 これからどうやってクラスタリングをするのか、アイデア程度ならあるが実装レベルではまだわからない。

考えついた当初は「単語をベクトル化するくらいまではサラサラっと書けそうだし大変なのは検索エンジン化とクラスタリングの作業かな」などと思っていたのにここまで苦労してしまった。 自分で「簡単な作業」と思う仕事を1週間でさらっとこなせるようになりたい。 書き上げたコードを見て振り返っても、かかった時間の大半は調査時間に含まれる気がする。 自分が欲しいと思う技能全てが一気に進歩するわけないだろうし、一歩一歩やっていくしかなさそうだ。