2016年6月1日水曜日

Finderで隠れているフォルダを探す

今回、OpenCV3のインストールで格闘しているときに、最初は隠れているファイルやフォルダの見つけ方がわかりませんでした。
Finderで普通に開いても表にあるファイルしか表示されないし。
コマンドとかを使わずに、裏のフォルダを見る方法などを紹介します。

すごい今更な感じがするし、検索すればたくさんでてくるとは思いますが。

Finderで隠れているフォルダを開く

これはFinderを普通に開き、Shift+Command+Gを押すと、パスを入力できるようになります。

Finderを開く。

Shift+Command+Gを押すと、パスの入力ボックスがでてくる。

ここで、「/」とか、「/usr」とか入れればそのフォルダへ移動できて、Finderで中身を確認できます。

絶対パスの調べ方

Finder上で表示されているフォルダやファイルをターミナルへドラッグすれば、絶対パスが表示されます。

その他

今回の 件とはあまり関係ないですが、どこに挿し込むか迷ったので、ここに書いておきます。
バックスラッシュはOption+¥で入力できます。
「Option+¥  = \」です。

参考にしたページや文献・書籍
Finder上で簡単に絶対パスを知る方法

2016年5月5日木曜日

思い出の曲

LFJ最終日にも行ってきました。

今日は室内楽二つとオーケストラを聴きました。

シェーンベルクの弦楽六重奏がすごい良かったです。

なんか和音がまたちょっと独特な感じで、面白かったです。

でViolaの音がいい味を出していて個人的はそれだけでもう満足でした笑)



あと、シューベルトのピアノ五重奏曲『ます』。

これは、アルデオ弦楽四重奏団の演奏です。今回度々登場している、ヤン・ミサさんがいるカルテット。

ちょっとまたヤンさんが出てくるのを期待していましたが、編成が少し違うようででていませんでした。

それでも素晴らしい演奏でした!




で、最後に聴いたのは、シューマンの『春』。

これは思い入れのある曲です。

高校で自分が執行学年のときに演奏し、さらに大学のとき自分がトップで演奏しました。

そんな曲を一番前の席の真ん中あたりで、贅沢に聞けました。

自分でも弾いたことがあるから、曲の構造がわかっているから、より楽しめました。

でもなんど聴いても難しそう。

フェルマータがたくさんあったり、テンポが緩んだり、速くなったりが結構あるので、合わせるのが大変。

一番前で細かいところまで、見ちゃうと、微妙にタイミングあってないんじゃないかと思うところがちょこちょこありました。

やっぱり難しいよ。

一楽章の序奏明けのAllegro VivaceのViolinですが、全員が弾けるとあんな感じになるんですね。すごい。。。

思い入れのある曲をプロの演奏で、しかも間近で、聴けて満足でした。


2016年5月4日水曜日

立夏の季節

明日、5月5日は立夏らしいです。

さっきニュースでやってました。

この時期は春と夏の両方の 顔があるとのこと。

気温はそれほど高くないけど、日差しは強い。これだけきくと過ごしやすいイメージだし、実際過ごしやすいと思うんですがどうでしょう。

幸いにも、雨は夜の間に降ってくれて、晴れのなかLFJの二日目に行ってきました。

体力ないな。。。もう若干疲れてる。。。




今日は全部で5公演聞いてきました。

室内楽 系と現代曲っぽいのを中心に聴きました。

もともとチケットを予約したときは、奇抜で斬新な演奏をイメージしていたのですが、演奏のスタイル自体は、普通のクラシックの形式を自然に踏襲しておりました。




好きだった演奏は、午前中のヴィヴァルディのバイオリンコンチェルトとか、夕方の「四季」のリコンポーズとか。

昨日のヤン・ミサさんの演奏もそうだけど、アンサンブルできている、というよりもっと踏み込んで演奏中に積極的にコミュニケーションしているって感じの演奏が好きなのかもしれない。

言語とは別のチャネルでコミュニケーションをしているっていう感じが堪らない。

ラ・フォル・ジュルネ・オ・ジャポン(LFJ2016)へ行ってきました。

今日は待ちに待ったラ・フォル・ジュルネ・オ・ジャパンへ行ってきました。

ラ・フォル・ジュルネ・オ・ジャポン

LFJ2016(Facebookページ)


去年は、当日に行ってしまったためチケットも思うように購入できず十分に楽しむことができませんでしたが、今年は1ヶ月ほど前から準備して参戦?しました!


個人的には室内楽や前衛的な曲(現代曲とか)を聴くことを一応目的にしています。

今日一番始めに聴いたのは、ハイドンのカルテット。

ファーストバイオリンをヤン・ミサさんが弾いておりました。

去年バイオリンコンチェルトを弾いていて、かなり感動したので是非また聴きたいなと思ってました。

やっぱり素晴らしいです!!適切な表現かわかりませんが迫力があるというか。期待を裏切らないですね!


でそのあと、グラスという作曲家のバイオリン協奏曲第2番「アメリカの四季」を聴きました。
初めて聴く曲でした。かなり現代の曲。なんか和音も現代曲っぽい感じでした。



しばらく時間は空いて夜、渋さ知らズオーケストラを聴きに行きました。

ちょっとイメージとは違いましたが、斬新。

かなりいろんな要素が混じった公演でした。

まず、楽器だけでも、バイオリンやトロンボーン、チューバ、ピアノあたりまではいいとして、ドラム、ギター、歌などなどがあり、それに加え仮装をしたダンスが入ってきて、、、とまあつまりカオスでした笑)

しかも予定では45分の公演のはずなのに、始まる前のアナウンスで90分に延長になりましたとか、やり放題?な状態笑)
こういう適当?なの好きです。

でも残念ながら、自分は次の公演もチケット買ってしまっていたので、途中退出。


最後は、ヴィクトロアの「青龍」とグリーグのピアノ協奏曲を聴きに行きました。

ヴィクトロアもかなり現代の作曲家。グリッザンドとか多用してて、少し古典的な曲とは違う雰囲気でした。チェロがネックを叩いて演奏していたのが、現代曲っぽいなと思いました。



さすがに朝から晩までいると疲れた。

明日はもっとたくさん公演を聴く予定だけど大丈夫かしら。。。汗)

2016年4月23日土曜日

Sklearnを使ってみる1

かなり以前になりますが、『Macでpython3の環境構築3---ライブラリのインストール---』でsklearnをインストールしたので、『実践 機械学習システム』を読みながら、sklearnをいじってみたいと思います。

で、特に理由はありませんが、スタートは第2章のIrisデータセットを扱う章から、始めます。Irisデータセット自体はsklearnをインストールしたときに一緒についてきます。

最初にがっつりとしたコードが出てくるのが以下のようなコードです。

from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

for t,marker,c in zip (xrange(3),">ox","rgb"):

 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


本の冒頭にて、この本ではpython2.7をベースにかかれているのですが、自分はPython3.4を使っているのでうまく動きません。それに加え、そもそもコードの意味もよくわかりません。。。

とりあえず、これを動くようにしたり解読したりするところから始めたいと思います。

まず、動かす。

まず、動くようにすることを考えます。
どうやら、xrangeといところが問題だったようです。python3.xではrangeの方にxrangeが統合されているようです。
それと最後にplt.show()も追記が必要です。
結局のところ、以下のようにすれば動作します。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

for t,marker,c in zip (range(3),'>ox','rgb'):
                       
 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)
 plt.show()



Irisデータセットの構造

とりあえず動いたので、もっと詳細を解読していきたいと思います。
次に、何をしているのかよくわからなかったのが、上の例でいう5行目(空白行は除いて)から9行目の部分。

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]
これはIrisデータセットがディクショナリー型になっていることがわかり理解できました。 Irisデータセットは次のようなディクショナリー型のデータになっています。
#説明用の擬似コード
load_iris={data:(測定値などの一覧),
DESCR:(引用情報などの参考情報),
target_names:(あやめ(Iris)の種類の名前),
featurenames:(「 花弁の長さ」など特徴量の名前),
target:(あやめの種類の名前にそれぞれ割り当てる番号)
}

ディクショナリのキーを取得しようとすると次のようになります。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.keys()
dict_keys(['DESCR', 'data', 'feature_names', 'target', 'target_names'])
#表示される順番は毎回違うようです。



#####ファイルに保存して実行する場合はこうする。
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>print(data.keys())

###→例えばiris.pyという名前で保存し、ターミナルから実行すると同じような結果になる。
各項目の中をみてみます。まずは、'data'というキーに対応する要素は次のようになっています。
#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.data()
array([[ 5.1,  3.5,  1.4,  0.2],
       [ 4.9,  3. ,  1.4,  0.2],
       [ 4.7,  3.2,  1.3,  0.2],
       [ 4.6,  3.1,  1.5,  0.2],
       [ 5. ,  3.6,  1.4,  0.2],
       [ 5.4,  3.9,  1.7,  0.4],
       [ 4.6,  3.4,  1.4,  0.3],
       [ 5. ,  3.4,  1.5,  0.2],
       [ 4.4,  2.9,  1.4,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 5.4,  3.7,  1.5,  0.2],
       [ 4.8,  3.4,  1.6,  0.2],
       [ 4.8,  3. ,  1.4,  0.1],
       [ 4.3,  3. ,  1.1,  0.1],
       [ 5.8,  4. ,  1.2,  0.2],
       [ 5.7,  4.4,  1.5,  0.4],
       [ 5.4,  3.9,  1.3,  0.4],
       [ 5.1,  3.5,  1.4,  0.3],
       [ 5.7,  3.8,  1.7,  0.3],
       [ 5.1,  3.8,  1.5,  0.3],
       [ 5.4,  3.4,  1.7,  0.2],
       [ 5.1,  3.7,  1.5,  0.4],
       [ 4.6,  3.6,  1. ,  0.2],
       [ 5.1,  3.3,  1.7,  0.5],
       [ 4.8,  3.4,  1.9,  0.2],
       [ 5. ,  3. ,  1.6,  0.2],
       [ 5. ,  3.4,  1.6,  0.4],
       [ 5.2,  3.5,  1.5,  0.2],
       [ 5.2,  3.4,  1.4,  0.2],
       [ 4.7,  3.2,  1.6,  0.2],
       [ 4.8,  3.1,  1.6,  0.2],
       [ 5.4,  3.4,  1.5,  0.4],
       [ 5.2,  4.1,  1.5,  0.1],
       [ 5.5,  4.2,  1.4,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 5. ,  3.2,  1.2,  0.2],
       [ 5.5,  3.5,  1.3,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 4.4,  3. ,  1.3,  0.2],
       [ 5.1,  3.4,  1.5,  0.2],
       [ 5. ,  3.5,  1.3,  0.3],
       [ 4.5,  2.3,  1.3,  0.3],
       [ 4.4,  3.2,  1.3,  0.2],
       [ 5. ,  3.5,  1.6,  0.6],
       [ 5.1,  3.8,  1.9,  0.4],
       [ 4.8,  3. ,  1.4,  0.3],
       [ 5.1,  3.8,  1.6,  0.2],
       [ 4.6,  3.2,  1.4,  0.2],
       [ 5.3,  3.7,  1.5,  0.2],
       [ 5. ,  3.3,  1.4,  0.2],
       [ 7. ,  3.2,  4.7,  1.4],
       [ 6.4,  3.2,  4.5,  1.5],
       [ 6.9,  3.1,  4.9,  1.5],
       [ 5.5,  2.3,  4. ,  1.3],
       [ 6.5,  2.8,  4.6,  1.5],
       [ 5.7,  2.8,  4.5,  1.3],
       [ 6.3,  3.3,  4.7,  1.6],
       [ 4.9,  2.4,  3.3,  1. ],
       [ 6.6,  2.9,  4.6,  1.3],
       [ 5.2,  2.7,  3.9,  1.4],
       [ 5. ,  2. ,  3.5,  1. ],
       [ 5.9,  3. ,  4.2,  1.5],
       [ 6. ,  2.2,  4. ,  1. ],
       [ 6.1,  2.9,  4.7,  1.4],
       [ 5.6,  2.9,  3.6,  1.3],
       [ 6.7,  3.1,  4.4,  1.4],
       [ 5.6,  3. ,  4.5,  1.5],
       [ 5.8,  2.7,  4.1,  1. ],
       [ 6.2,  2.2,  4.5,  1.5],
       [ 5.6,  2.5,  3.9,  1.1],
       [ 5.9,  3.2,  4.8,  1.8],
       [ 6.1,  2.8,  4. ,  1.3],
       [ 6.3,  2.5,  4.9,  1.5],
       [ 6.1,  2.8,  4.7,  1.2],
       [ 6.4,  2.9,  4.3,  1.3],
       [ 6.6,  3. ,  4.4,  1.4],
       [ 6.8,  2.8,  4.8,  1.4],
       [ 6.7,  3. ,  5. ,  1.7],
       [ 6. ,  2.9,  4.5,  1.5],
       [ 5.7,  2.6,  3.5,  1. ],
       [ 5.5,  2.4,  3.8,  1.1],
       [ 5.5,  2.4,  3.7,  1. ],
       [ 5.8,  2.7,  3.9,  1.2],
       [ 6. ,  2.7,  5.1,  1.6],
       [ 5.4,  3. ,  4.5,  1.5],
       [ 6. ,  3.4,  4.5,  1.6],
       [ 6.7,  3.1,  4.7,  1.5],
       [ 6.3,  2.3,  4.4,  1.3],
       [ 5.6,  3. ,  4.1,  1.3],
       [ 5.5,  2.5,  4. ,  1.3],
       [ 5.5,  2.6,  4.4,  1.2],
       [ 6.1,  3. ,  4.6,  1.4],
       [ 5.8,  2.6,  4. ,  1.2],
       [ 5. ,  2.3,  3.3,  1. ],
       [ 5.6,  2.7,  4.2,  1.3],
       [ 5.7,  3. ,  4.2,  1.2],
       [ 5.7,  2.9,  4.2,  1.3],
       [ 6.2,  2.9,  4.3,  1.3],
       [ 5.1,  2.5,  3. ,  1.1],
       [ 5.7,  2.8,  4.1,  1.3],
       [ 6.3,  3.3,  6. ,  2.5],
       [ 5.8,  2.7,  5.1,  1.9],
       [ 7.1,  3. ,  5.9,  2.1],
       [ 6.3,  2.9,  5.6,  1.8],
       [ 6.5,  3. ,  5.8,  2.2],
       [ 7.6,  3. ,  6.6,  2.1],
       [ 4.9,  2.5,  4.5,  1.7],
       [ 7.3,  2.9,  6.3,  1.8],
       [ 6.7,  2.5,  5.8,  1.8],
       [ 7.2,  3.6,  6.1,  2.5],
       [ 6.5,  3.2,  5.1,  2. ],
       [ 6.4,  2.7,  5.3,  1.9],
       [ 6.8,  3. ,  5.5,  2.1],
       [ 5.7,  2.5,  5. ,  2. ],
       [ 5.8,  2.8,  5.1,  2.4],
       [ 6.4,  3.2,  5.3,  2.3],
       [ 6.5,  3. ,  5.5,  1.8],
       [ 7.7,  3.8,  6.7,  2.2],
       [ 7.7,  2.6,  6.9,  2.3],
       [ 6. ,  2.2,  5. ,  1.5],
       [ 6.9,  3.2,  5.7,  2.3],
       [ 5.6,  2.8,  4.9,  2. ],
       [ 7.7,  2.8,  6.7,  2. ],
       [ 6.3,  2.7,  4.9,  1.8],
       [ 6.7,  3.3,  5.7,  2.1],
       [ 7.2,  3.2,  6. ,  1.8],
       [ 6.2,  2.8,  4.8,  1.8],
       [ 6.1,  3. ,  4.9,  1.8],
       [ 6.4,  2.8,  5.6,  2.1],
       [ 7.2,  3. ,  5.8,  1.6],
       [ 7.4,  2.8,  6.1,  1.9],
       [ 7.9,  3.8,  6.4,  2. ],
       [ 6.4,  2.8,  5.6,  2.2],
       [ 6.3,  2.8,  5.1,  1.5],
       [ 6.1,  2.6,  5.6,  1.4],
       [ 7.7,  3. ,  6.1,  2.3],
       [ 6.3,  3.4,  5.6,  2.4],
       [ 6.4,  3.1,  5.5,  1.8],
       [ 6. ,  3. ,  4.8,  1.8],
       [ 6.9,  3.1,  5.4,  2.1],
       [ 6.7,  3.1,  5.6,  2.4],
       [ 6.9,  3.1,  5.1,  2.3],
       [ 5.8,  2.7,  5.1,  1.9],
       [ 6.8,  3.2,  5.9,  2.3],
       [ 6.7,  3.3,  5.7,  2.5],
       [ 6.7,  3. ,  5.2,  2.3],
       [ 6.3,  2.5,  5. ,  1.9],
       [ 6.5,  3. ,  5.2,  2. ],
       [ 6.2,  3.4,  5.4,  2.3],
       [ 5.9,  3. ,  5.1,  1.8]])

実際に各サンプルに対する測定値が格納されている様子がわかります。

次は、'target_names'に対応する要素、あやめ(Iris)の種類の名前としてどういう要素が格納されているかみます。

調べ方は上記とほとんど同じです。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.target_names
array(['setosa', 'versicolor', 'virginica'], 
      dtype='

setosaとversicolorとvirginicaという名前があるのがわかります。最後についている余分なやつはよく意味はわかりませんが、とりあえずスルーします。

同様に、'feature_names'に対応する要素の中をみます。
#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

最後に、'target'に対応する要素の中身。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
で最後のlabels=target_names[target]の行で、0→setosa、1→versicolor、2→virginicaに対応させる処理をしています。 これも最初あまり意味がわかりませんでしたが、numpyの文法です。 target_namesのリストから0か1か2に対応するインデックスの要素を取り出し、新しいリストを作るという意味です。 事実上ラベル付けを行っていることになります。よく使う利用法らしい。
from sklearn.datasets import load_iris
>>data=load_iris()
>>> features=data['data']
>>> features_name=data['feature_names']
>>> target=data['target']
>>> target_names=data['target_names']
>>> label=target_names[target]
>>> label
array(['setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica'], 
   )


for文のブロック

次にわからなかったのが、この行です。

for t,marker,c in zip (range(3),’>ox’,’rgb’):

まず、このzipというのはfor文を3つ同時に処理する関数のようです。(なんて便利なんだ。。。)

上の例でいえば、変数tにはrange(3)の中身を順番に代入、変数markerには{>,o,x}を順番に代入、変数cには{r,g,b}を順番に代入、ということです。

で、rgbの方はいいとして、>oxってなんなのかと。 これは、実際に描画するときのマーカーの形(?)だそうです。matplotlibのオプションです。 詳しくはここのページを(Markers--matplotlib.markers) もう少しだ。。。次はこの行。
plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)

まず、scatterは散布図を描画するmatplotlib提供の関数です。

features[target==t,0]というのは、features自体が実際にデータ(数値)が格納されているリストなわけですが、その中でも[ ]の中の条件に一致するものだけを抽出していますよ、という意味です。

つまり上の例でいえば、featuresの0番目の要素の一覧の中、targetが例えば0(=0であればそれはsetosaなわけですが)に該当するもの、 さらに言い換えておけば、target=0のときはsetosaのfeaturesの0番目要素だけを抽出するという意味です。

なんか言い換えたけどわかりやすくなっている気がしない。

さらに、plt.scatter()やplt.plot()などmatplotlibの描画系は先にグラフを生成して、最後にplt.show()をすると、最後にグラフが重ねて描画されます。

今回のケースではfor文として3回処理されるので、3種類のプロットが重ねて描かれます。

上記のようなことも含め、実際に冒頭のコードを実行すると、次のような画面が出てきます。



そうすると、本に書かれている6枚のグラフのうち、一番左上のグラフが描画されます。



2016年4月9日土曜日

NLTKを使ってみる---『入門 自然言語処理』を読む2---

さて、『NLTKを使ってみる---『入門 自然言語処理』を読む1----』の続きです。

1.3.1が頻度分布の話になっています。その中でもFreqDistがうまくいかなかったので迷いましたが、結局次のように書くことでうまくいきました。

#以下のようなコードを書いて、例えばnlpex.pyなどの名前で保存する。
import nltk
from nltk.book import *
from nltk import *
fdist1=FreqDist(text1)
print(fdist1)
fdist1.plot(50,cumulative=True)
ターミナルにて
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py      #python3 nlpex.pyと打ってreturnを押す。
とすると、次のような画面が出てきます。


上で書いたコードの冒頭のimportに関する部分ですが、自分の読み間違えでなければ、本の中ではimport nltkだけ書けば書けるような雰囲気で書かれています。

実際やってみると、「NameError:name 'FreqDist' is not defined」とかいうエラーが表示されます。本の中では、こういうエラーがでた場合にはnltk.book import *を実行すればいいよとか書いてあります。

なのでさらに追記してfrom nltk.book import *を書いて実行しますがエラーは消えず。実際には、さらに一行追加してfrom nltk import *も書いて上記のようなコードでないと動きません。


分量が少しになってしまいましたが、本の中では区切りがいいので、一旦区切ります。


参考にしたページや文献・書籍
『入門 自然言語処理』

2016年4月5日火曜日

NLTKを使ってみる---『入門 自然言語処理』を読む1----

ずいぶんと前になりますが、『Macでpython3の環境構築7---NLTKのインストール1---』と『Macでpython3の環境構築8---NLTKのインストール2---』でNLTKをインストールしました。

その流れで、『入門 自然言語処理』を読んでみたいと思います。

というのも、この本ではpython2系をベースにして書かれていまして、python3系で動かしてみたいと思ったからです。

慣れている人にとってはpython2からpython3への読み替えもすぐできるのでしょうが、自分はそうではないし、そういう人もいると思うのでpython3で実際に動いたコードを記載しつつ勉強の過程を記録してきたいと思います。

さてこの記事のスタートとしては、『入門 自然言語処理』でいうところの1.1.3、とりあえずNLTKのインストールができたことが確認できたところから始めたいと思います。

本ではインタプリンタ上、つまりテキストファイルにプログラムを書いて保存してターミナルなどのコマンドから実行するのではなく、直接ターミナルなどのコマンドに逐次コードを打っていく方法で進められていますが、ここでは一旦保存する方法で進めていきます。

本ではtext1.concordance(""monstrous")を実行しています。
これは、指定された単語が現れた全ての場所を、その周辺の文章とともに表示します。
下の例で言えば、text1の中から「monstrous」という単語が現れた場所をその周辺の文章とともに表示します。
これをするには以下のようなコードを書きます。

#以下のように書いて、nlpex.pyという名前で保存することにする。
import nltk
from nltk.book import *
print(text1.concordance("monstrous"))

ターミナルにてカレントディレクトリへ移動し、

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py      #python3 nlpex.pyと打ってreturn

とコマンドを打つと、

*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908
Displaying 11 of 11 matches:
ong the former , one was of a most monstrous size . ... This came towards us , 
ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have r
ll over with a heathenish array of monstrous clubs and spears . Some were thick
d as you gazed , and wondered what monstrous cannibal and savage could ever hav
that has survived the flood ; most monstrous and most mountainous ! That Himmal
they might scout at Moby Dick as a monstrous fable , or still worse and more de
th of Radney .'" CHAPTER 55 Of the Monstrous Pictures of Whales . I shall ere l
ing Scenes . In connexion with the monstrous pictures of whales , I am strongly
ere to enter upon those still more monstrous stories of them which are to be fo
ght have been rummaged out of this monstrous cabinet there is no telling . But 
of Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u
None

となります。

本の方ではsimilarやcommon_contextsなども紹介されていますが、コードの書き方自体では同じなので省略。(なるべく丁寧にという、自分なりの方針からはややそれますが、、、まぁいいか)


次は、分散プロットの表示です。
#先ほどの例と同様に、以下のように書いて例えばnlpex.pyとかいう名前で保存する。
import nltk
from nltk.book import *
text4.dispersion_plot(['citizens','democracy','freedom','duties','America'])


で、次のようにコマンドを打ちます。
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py


するとこういう画面が表示されます。

とりあえず、一旦ここで区切ります。

参考にしたページや文献・書籍
 『入門 入門自然言語処理』