オープンデータとプログラミング

Python

PythonのOAuth2でハマったことあれこれ(メモ)

python

ここのところOAuth関連でハマってしまっています。
まず、最初に登場したエラーはこれです。

[Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

このエラーは、certifiをインストールして証明書をごにょごにょすれば良さげ。
まずはいつものようにpip installします。

pip install certifi

そして、OAuthの自分のソースコードに以下のコードを追加。

import certifi

client = oauth.Client(consumer)
client.ca_certs = certifi.where()

ちなみにcertifi.where()は認証局の証明書のファイルを返します。

C:\>python
>>> import certifi
>>> certifi.where()
'C:\\Python27x86\\lib\\site-packages\\certifi\\cacert.pem'
>>>

自分が書いたOAuthのソースコードを実行すると、エラーの内容が変わりました。

[Errno 1] _ssl.c:1354: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

おそらくですが、OpenSSLが古いからかも…。MACでは問題なかったし。
そろそろPython 2.7.9(現在、2.7.2)にアップデートする必要がありそうです。

OpenSSL のバージョンを確認。

C:\>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 0.9.8l 5 Nov 2009
>>>

当然古いです。
そこで思い切って、Python 2.7.9にアップデート。

C:\>python
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.1j 15 Oct 2014'

OpenSSLのバージョンも新しくなっています。

そして冒頭のエラーが出ていたプログラムを実行すると・・・・

見事にエラーが出なくなりました。

恐らくですが、接続しようとしていたウェブサイトがSSL3.0を切っていたのでしょう。脆弱性の問題もあったし。

以上でめでたく解決です。

Windowsでsentence2vecを実行する

python

事前準備として次のソフトをインストールしておきます。

・gitクライアント
・word2vec

word2vecをWindowsにインストールする方法は、Windowsにword2vecをインストールする方法を参照してください。

gitからファイルをダウンロードします。

git clone https://github.com/klb3713/sentence2vec

ダウンロードされるファイルは次のとおり。

README.md
demo.py
matutils.py
sent.txt
test.txt
utils.py
voidptr.h
word2vec.py
word2vec_inner.pyx

sent.txtの内容は次のとおり。(1行に1文形式)

Harbin Institute of Technology (HIT) was founded in 1920.
After nearly 100 years, HIT has developed into a large nationally renowned multi-disciplinary university with science, engineering and research as its core.
HIT is consistently on the forefront in making innovations in research. For years, HIT has continued to undertake large-scale and highly sophisticated national projects.
HIT students study humanities and social sciences along with basic engineering and science courses for a strong comprehensive base.
HIT is famous for its original style of schooling: 'Being strict in qualifications for graduates; making every endeavor in educating students.'
HIT has remained an international university since its foundation. Courses at HIT used to be conducted exclusively in Russian and Japanese.
Today, all the faculty, students and staff of HIT, are dedicating, with full confidence

test.txtは次のような内容。7行です。

Harbin Institute of Technology (HIT) was founded in 1920. From its beginning, HIT has received preferential support from the central government. In 1954, the Ministry of Higher Education designated, for the first time, six national key universities. HIT was the only one of the six outside of Beijing. In 1984, HIT again found its way onto the list of 15 national key universities to receive special support. In 1996, HIT was among the first group of universities to be included in Project 211. This project targets 100 institutions of higher education in China to receive preferential support for development in order to become world-class universities in the 21st century. In 1999, HIT was listed as one of the top nine key universities in China. This distinction provided HIT with the opportunity to develop into a highly-competitive first-rate university with the assistance of the Ministry of Education and the Heilongjiang Provincial Government.
After nearly 100 years, HIT has developed into a large nationally renowned multi-disciplinary university with science, engineering and research as its core. We have established our own unique programs related to the field of astronautics that are unparalled anywhere in China. We have broadened our established disciplinary programs by utilizing a cross- disciplinary curriculum and as such have formed a comparatively full disciplinary system that consists of key, emerging and supporting programs. HIT now has 21 schools/departments, including 73 undergraduate programs, 147 masters' programs, 81 doctoral programs, 18 post-doctoral research stations, 18 national key disciplines, and 32 national & provincial (ministerial) key labs. The university employs 2,944 full-time teachers, among which 884are professors, 1,102 are associate professors, including 22 academicians of the Chinese Academy of Sciences and the Chinese Academy of Engineering. At present, there are 42,695 full-time students including 25,035 undergraduates, 11,794 master degree candidates and 4,387 doctorial degree candidates. We also added the Shenzhen Graduate School and Weihai Campus to the main campus in Harbin (including the Research Academy of Science and Technology and Research Academy of Industrial Technology), forming a pattern of 'one university, three campuses'.
HIT is consistently on the forefront in making innovations in research. For years, HIT has continued to undertake large-scale and highly sophisticated national projects. HIT's ability for scientific research has always been among the strongest in all universities in China. In 2007, HIT funds for scientific research reached 1.1billion RMB. In the comprehensive 10-year evaluation of the '863'project, HIT scientific research programs ranked second among all universities in China. HIT has been making great contributions to China's hi-tech research by creating many new inventions in scientific research fields such as China's first simulation computer, the first intelligent chess-playing computer, the first arc-welding robots, the first world advanced-level system radar, the first CMOS chip IC card with our own patent, the first giant computer-aided real-time 3-D image construction system, the first microcomputer-operated fiber twiner and the first large-scale tank-head forming machine. The famous 'Shenzhou Series Spaceship Project' received massive assistance from HIT in the field of large-scale land-based space simulation equipment, returning cabin deformation and orthopraxy welding technology, 3-axel simulation experimental platform and fault diagnosis. The micro-satellite 'Testing Satellite No.1', constructed mainly by HIT, was the first fully developed and launched satellite by a Chinese university. The technical advancements on the satellite meet international aerospace standards and mark a new chapter in the history of HIT and China's history of astronautics.
HIT students study humanities and social sciences along with basic engineering and science courses for a strong comprehensive base. They go on to learn scientific research methods and laboratory skills which enhance their creativity and innovative abilities. When our students graduate from HIT, they are equipped with strong theoretical knowledge and the ability for practical application.
HIT is famous for its original style of schooling: 'Being strict in qualifications for graduates; making every endeavor in educating students.' Our graduates have been warmly welcomed by employers throughout China; more than 100,000 graduates have stepped into society and many have moved up to high-ranking managerial positions and work as specialists in the fields of science and technology, education, and economics. A number of graduates have assumed leadership positions in the CPC and governments at different levels, or become generals of the PLA, academicians of the Chinese Academy of Sciences and the Chinese Academy of Engineering.
HIT has remained an international university since its foundation. Courses at HIT used to be conducted exclusively in Russian and Japanese. After the reforming and opening to the outside world, HIT has gained greater weight in the world. So far, we have signed academic cooperation agreements with 126 institutions of higher education in 24 countries such as the United States, the United Kingdom, France, Germany, Japan and Russia. Cooperation and exchanges are carried out between HIT and these universities though exchanging students, faculty and research staff, holding academic conference and cooperating in scientific research.
Today, all the faculty, students and staff of HIT, are dedicating, with full confidence, their concerted efforts to advance bravely towards the goal of building HIT into a well-known world-class university.

demo.pyを実行するとモデルファイルが作成されます。

python demo.py

すると以下のファイルが作成されます。

sent.txt.vec
test.txt.model
test.txt.vec

少し中途半端ですが、本日はここまで。近いうちに使用例を書きたいと思います。

Pythonでグラフ解析(networkx備忘録)

python
Pythonでグラフ(ネットワーク)解析する場合に便利なライブラリがnetworkxです。

pip install networkx

でインストール可能です。
実際のグラフ解析についてはまた時間のあるときに試してみたいと思います。
今回は忘れないようにメモしておきます。

CSV等からネットワークデータを読み込む
read_edgelist

次数中心性
degree_centrality

媒介中心性
betweenness_centrality

備忘録:レーベンシュタイン距離をPythonで計算する

文字列同士のレーベンシュタイン距離(編集距離)を計算してくれるライブラリがあります。
とりあえずインストールしてみました。

pip install python-levenshtein
>>> import Levenshtein
>>> Levenshtein.distance('Levenshtein', 'Lenvinsten')
4

レーベンシュタイン距離(編集距離)は4です。

>>> Levenshtein.distance('ほげほげ', 'ほげほげ')
0

レーベンシュタイン距離(編集距離)は0です。

>>> Levenshtein.distance('ほげほげa', 'ほげほげ')
1

半角文字を1文字追加した場合のレーベンシュタイン距離(編集距離)は1です。

>>> Levenshtein.distance('ほげほげほ', 'ほげほげ')
2

全角文字を1文字追加した場合のレーベンシュタイン距離(編集距離)は2です。


Pythonの本文抽出ライブラリreadabilityのインストール(備忘録)

python

HTMLから本文を抽出するpythonのライブラリの一つにreadabilityがあります。
readabilityはpipでインストールすることができます。

pip install readability-lxml

コマンドラインから実行することができます。日本語のページから抽出可能か、国立国会図書館のページで試してみます。

python -m readability.readability -u http://www.ndl.go.jp/jp/service/index.html
Title:サービス概要|国立国会図書館―National Diet Library
<html><body><div><div class="mainbody">&#13;
&#13;
&#13;
<h2>サービス概要</h2>&#13;
&#13;
&#13;
&#13;
<h3 id="anchor01">当館のサービス</h3>&#13;
<div class="dataSet">&#13;
&#13;
&#13;
&#13;
<p>国立国会図書館は、東京本館、関西館、国際子ども図書館の三つの施設で、資料の閲覧や複写などの来館利
用サービスを行っています。また、インターネット経由の資料の複写申込など、来館しないで利用できるサービ
スも行っています。</p>&#13;


<<以下省略>>

うまくいきました!

pythonのコードならこんな感じになります。
とてもシンプルですね。

#coding: UTF-8
from readability.readability import Document
import urllib

url = 'http://www.ndl.go.jp/jp/service/index.html'

html = urllib.urlopen(url).read()
readable_article = Document(html).summary()
readable_title = Document(html).short_title()

print readable_article
print readable_title

Pythonの本文抽出ライブラリboilerpipeのインストール(備忘録)

python

HTMLから本文抽出(スクレイピング)をするpythonライブラリの一つにboilerpipeがあります。
boilerpipeはpipでインストールすることができます。

pip install boilerpipe

もし、下記のエラーメッセージが出てしまったら、Microsoft Visual C++ 9.0をインストールしてください。

error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27

Microsoft Visual C++ 9.0は、次のURLからダウンロードすることができます。

インストールは無事終わったかにみえましたが、boilerpipeをインストールするとpythonじたいがクラッシュ。

原因不明なので、継続調査です。

ちなみに、Pythonのバージョンは 2.7.2です。

こちらのサイトを見ると、Windows環境はビックリマークが付いています。
https://code.activestate.com/pypm/boilerpipe/

boilerpipeがだめなら、他のライブラリを試すとするか…。ありましたありました、比較サイトが!
Dragnet、Eatiht、Readabilityは初めて知りました。

Benchmarking Python Content Extraction Algorithms: Dragnet, Readability, Goose, and Eatiht
https://moz.com/devblog/benchmarking-python-content-extraction-algorithms-dragnet-readability-goose-and-eatiht/

Windowsにword2vecのpythonインタフェースをインストールする

python

word2vecのpythonインターフェースをWindwos PCに入れようとしてもうまくいきません。

pip install word2vec

と、pipしてもword2vecのコンパイルが失敗します。
これはword2vecのソースコードがLinux用だからです。

word2vec-c\word2vec.c:19:21: fatal error: pthread.h: No such file or directory

実際、こんな感じで「pthread.h」が無いと怒られます。

そこで本記事では、Windows用に移植されたソースを使って無理くりインストールしてみます。インストールにあたっては、make、gcc、gitなどが必要になりますのであらかじめインストールしておいてください。

最初にやることは、word2vecのpythonインターフェースの入手です。githubから入手します。
このとき適当な作業フォルダで作業します(例ではC:\tmp)

C:\tmp>
C:\tmp>git clone https://github.com/danielfrg/word2vec

windwos用のword2vecのソースをgithubから入手します。

C:\tmp>git clone https://github.com/zhangyafeikimi/word2vec-win32

word2vecのpythonインターフェースのフォルダに移動します。
そして、Windows版のソースを格納するための空のフォルダ「word2vec-c」を作成します。

C:\tmp>cd word2vec
C:\tmp\word2vec>mv word2vec-c word2vec-c_bak #適当な名前でバックアップ
C:\tmp\word2vec>mkdir word2vec-c             #word2vec-cフォルダを作成

新しく作成した「word2vec-c」フォルダに、「C:\tmp\word2vec-win32」にあるWindows版ソースコード、Makefile一式をコピーします。

Makefile
compute-accuracy.c
distance.c
win32-port.h
word-analogy.c
word2phrase.c
word2vec.c

次に「C:\tmp\word2vec」にある「setup.py」をエディタで開いて編集します。
42行目をコメントアウトします。

#compile('word2vec-sentence2vec.c', 'word2vec-doc2vec')

続いて53-56行目を以下のように編集します。ポイントは2つのコマンド「word2phrase」・「word2vec-doc2vec」の削除と
コマンド名に拡張子「.exe」を付けることです。

【修正前】

    data_files=[('bin', ['bin/word2vec', 'bin/word2phrase',
                         'bin/word2vec-distance', 'bin/word2vec-word-analogy',
                         'bin/word2vec-compute-accuracy',
                         'bin/word2vec-doc2vec'])],

【修正後】

    data_files=[('bin', ['bin/word2vec.exe', 
                         'bin/word2vec-distance.exe', 'bin/word2vec-word-analogy.exe',
                         'bin/word2vec-compute-accuracy.exe'])],

最後に編集した「setup.py」を実行します。

C:\tmp\word2vec>python setup.py install

最後にpythonを立ち上げてimportできることを確認してみましょう。

C:\tmp\word2vec>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import word2vec
>>>

無事、importできました!
機能がオリジナルのLinux版と比べて少ないようですが・・・

【備忘録】「error: no lapack/blas resources found」が出てしまったら・・・

python

備忘メモです。

BLAS、LAPACK、ATLASがインストールされていない、ってことです。
これらのインストール方法はscipyのサイトに詳細がかかれています。

http://www.scipy.org/scipylib/building/windows.html

しかし、CとFortran 77のコンパイラが必要とある。
VCは入っているのでよいとしても、Fortran 77は面倒だ。

そのような人向けにちゃんとありました!sourceforgeにバイナリが・・・
しかも、Winのインストーラ付なので簡単にscipyがインストールできました(BLASやLAPACK、ATLASも)

バージョンは、2015.8.10時点で最新版の0.16.0です。

http://sourceforge.net/projects/scipy/files/scipy/0.16.0/

Python 2.7用と3.X用が分かれていますので、ご注意ください!

easy_install のアップデートで「Permission denied」がでたときの対処方法

python

こんにちは。

pythonのパッケージ管理ソフト「easy_install」を使用している方も多いかと思います。
あまりeasy_installをアップデートする機会は多くありませんが、インストールするパッケージによっては新しいeasy_installが必要となる場合があります。

easy_install自身のアップデートができない!?

easy_installじたいをアップグデートするには、次のようにタイプします。

easy_install -U setuptools

しかし、簡単にはいきません。このコマンドはアクセスが拒否されたといわれて、無情にも終了します。

error: C:\Python27\Scripts\easy_install.exe: Permission denied

理由は簡単で、あなたがたった今、実行中のeasy_install.exeを更新しようとしているためです。

解決方法

それでは解決方法です。

実行中のコマンドを上書きできないだけなので、「C:\Python27\Scripts\」配下にあるeasy_install.exeなど、easy_install****で始まるファイル一式を適当なフォルダ(c:\tempなど)にコピーして、コピーを実行すればOKです。

このとき、easy_install.exeのアイコンに盾マークが付いていたらファイルを右クリックして「互換性」タブを表示します。
「管理者としてこのプログラムを実行する」にチェックを入れて、OKボタンを押下します。

easy_install

ここまでできたら、コマンドプロンプトからc:\tempにコピーしたeasy_install.exeコマンドを実行します。

easy_install -U setuptools

これで無事easy_install.exeがアップデートされるはずです。

これは簡単!ディープラーニングのライブラリ(chainer)をインストール

screenshot
 

こんにちは。

機械学習のアルゴリズムとして、最近はディープラーニング(Deep Learning)が話題になっているので少しいじってみることにしました。
Python用のライブラリを物色していると、chainerというライブラリが良さそうです。
#機能や使い勝手の確認はこれからですが、とにかくインストールが簡単そうです (^^;

必要なパッケージ

githubの説明を見てみると最低限必要なものは以下のとおりです。

  • Python 2.7+, 3.4+
  • NumPy
  • Six 1.9+

 
 
 

これなら、Sixだけバージョン1.9にアップデートすればイケそうです。(もともと1.7はインストール済み)
Sixは、Python 2.xと3.xの差異を吸収するための互換ライブラリで、Sixはバージョン間の差異を吸収するためのユーティリティ関数を提供します。


pip uninstall six    //古いsixをアンインストール
pip install six      //最新のsixをインストール

インストール

次にchainerをインストールします。

pip install chainer

続けてMNISTの手書きデータを認識させるサンプルを実行してみます。
ちなみに、MNISTとは70000サンプルの数字の手書き画像データです。個々の手書き数字データは、28×28ピクセルからなり、各ピクセルは0から255の値を取ります。
機械学習の研究用のデータとしてよく利用されているデータセットです。

では、まずはgithubからwgetを使ってサンプルコードをダウンロード。

wget --no-check-certificate https://github.com/pfnet/chainer/archive/v1.1.2.tar.gz

証明書の検証が正しくできなかったので”–no-check-certificate”オプションを付けました。

ダウンロードしたファイルを解凍します。

tar xzf v1.1.2.tar.gz
python chainer-1.1.2/examples/mnist/train_mnist.py

実行すると次のように訓練とテストが繰り返されていきます。

load MNIST dataset
Downloading train-images-idx3-ubyte.gz...
Done
Downloading train-labels-idx1-ubyte.gz...
Done
Downloading t10k-images-idx3-ubyte.gz...
Done
Downloading t10k-labels-idx1-ubyte.gz...
Done
Converting training data...
Done
Converting test data...
Done
Save output...
Done
Convert completed
('epoch', 1)
graph generated
train mean loss=0.279352151516, accuracy=0.913850001084
test  mean loss=0.121526297252, accuracy=0.963000004292
('epoch', 2)
train mean loss=0.139287877449, accuracy=0.957866669993
test  mean loss=0.0862284902227, accuracy=0.973300007582

<<省略>>

('epoch', 20)
train mean loss=0.0446550305256, accuracy=0.987416676482
test  mean loss=0.0657925747195, accuracy=0.982500008345

インストールまでは簡単でしたね。

サンプルを動かしてみる

続いてword2vecのサンプルを動かしてみます。

C:\temp\chainer-1.1.2\examples\ptb>ls
README.md  download.py  train_ptb.py
C:\temp\chainer-1.1.2\examples\ptb>python download.py
C:\temp\chainer-1.1.2\examples\ptb>ls
README.md    ptb.test.txt   ptb.valid.txt
download.py  ptb.train.txt  train_ptb.py

ptb.test.txt、ptb.valid.txt、ptb.train.txtの3つのファイルができます。

ptb.train.txtを、chainer-1.1.2\examples\word2vecは以下に置きます。

train_word2vec.pyを実行します。

python train_word2vec.py

この処理はかなり時間がかかります。

終了するとモデルのファイル(model.pickle)ができています。

search.pyを実行します。
プロンプトにワードを入れると関連する語が表示されます。
ibmと入力してみます。

python search.py
>> ibm
query: ibm
computer: 0.458478599787
software: 0.446164906025
mainframe: 0.416040301323
computers: 0.409894824028
aborted: 0.399061322212
>>

関連書籍