ぴろの狂人日記

2014年から頑張ってブログを継続しようと思います。「継続と習慣」を今年の目標にしたので、頑張って更新を続けようと思います。おいおいはレビューや数学や認知科学などについて記事を書いていければと思っています

Macでpython3の環境構築12---NetworkXの使い方3---

NetworkXには、ある種類のグラフを自動的に作る機能も備わっております。

道(path)

path_graph — NetworkX 1.10 documentation


道(path)とは、頂点を順番につないだグラフです。
nx.path_graph(n)でn頂点のpathが生成されます。ラベルは0〜n-1までが自動的につき、0〜n-1を順番につないだグラフになります。

例えば、4頂点のpathは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.path_graph(4)        #4頂点のpath
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると

となります。

もし空のグラフを先に作成し、pathを追加するのであればこうなります。


import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_path([1,2,3,4])          #4頂点のpath
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()

 

星(star graph)

 
星とは一つの頂点にその他のノードがつながっているグラフです。
nx.star_graph(n)でn頂点の星が生成できます。ラベルは中心が0になりn-1まで自動的につきます。
 
例えば4頂点の星は次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.star_graph(4)    # 4頂点の星
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()

 

これを実行すると、

となります。

もし先に空のグラフを作成し、星を追加するのであればこうなります。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_star([1,2,3,4])   # 4頂点の星。この場合は引数は頂点のリスト(=自分で指定できる)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


閉路グラフ(cycle graph)

 
閉路グラフとは、文字通り一つの閉路から成るグラフです。(閉路グラフ - Wikipedia)
nx.cycle_graph(n)でn頂点の閉グラフが生成できます。ラベルは0〜n-1でつきます。
 
例えば4頂点の閉路グラフは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    
    g =nx.cycle_graph(4)        #  4頂点の閉グラフ
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()

 

これを実行すると、
となります。

もし先に空のグラフを作成し、閉グラフを追加するのであればこうなります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_cycle([1,2,3,4])      #  4頂点の閉グラフ。この場合は、引数は頂点のリスト(=自分で指定できる)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


完全グラフ(complete graph)

complete_graph — NetworkX 1.10 documentation


完全グラフとは、任意の二つのノードの間にエッジがあるグラフです。
nx.complete_graph(n)でn頂点の完全グラフが生成できます。ラベルは0〜n-1でつきます。

例えば4頂点の完全グラフは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g =nx.complete_graph(4)      # 4頂点の完全グラフ
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、

となります。

n=5の場合は


n=6の場合は


となっていきます。

g.add_complete([リスト])という方法はできないようです。

それ以外にもあるクラスのグラフを自動的に作れるような機能がいろいろ備わっているようですが、勉強不足でそもそもなんのことをどんなグラフのことを意味しているのかわからないものがたくさん。
ランダムグラフとかいろいろあるっぽいです。

詳細は下の参考ページで確認ください。

参考にしたページや文献・書籍

Graph generators — NetworkX 1.10 documentation

MacでC言語の環境を構築2

しばらくずっとpythonの話題が続いておりましたが、今回はC/C++の話題で。

ずいぶん前に、

piroshhh.hatenablog.com

で、コンパイラなどをインストールしたはいいものの、実際にコードが動くかどうかは確かめておりませんでした。

実際にコンパイルする作業をしてみます。

C言語の実行

例によって、テストにつかうのは次のコードです。
 
#include<stdio.h>
int main(){
printf("hello world\n") ;
return 0 ;
}

これを、「hello.c」というファイル名で保存します。

そして、ターミナルにてカレントディレクトリをhello.cがあるフォルダと同じフォルダに移動させます。
その上で、

$ gcc hello.c      #「hello.c」のところは、作成したファイル名と同じ名前を入力。


そうすると、同じフォルダ内に、「a.out」という新しいファイルができます。

続いて、ターミナルで、

$ ./a.out

と打つと、

$ ./a.out
hello world

 

C++の実行

こちらも例によってテストに使うのは次のコードです。
#include<iostream>
using namespace std;

int main(){
  cout << "Hello World"<<endl;
  return 0 ;
}


今度は拡張子を.cppにして保存します。
ここでは、「hello.cpp」というファイル名で保存します。

またカレントディレクトリに移動します。

今度はターミナルにて次のように打ちます。

$ c++ hello.cpp      #C++の場合はgccではなくc++


C言語のときと同様に「a.out」というファイルができます。
また同様に、

$ ./a.out

とうてば、

$ ./a.out
Hello world

となります。

参考にしたページや文献・書籍

www.sirochro.com


piroshhh.hatenablog.com

Macでpython3の環境構築11---NetworkXの使い方2---

前回

piroshhh.hatenablog.com

で、なんとかNetworkXでラベルを表示することができたので、今回はNetworkXの基本的な使い方を公式Documentを参考にしながら掘り下げてみようと思います。

グラフの作成(ノードとエッジの作成)

参考:Creating a graph — NetworkX 1.10 documentation

ノードの作成

簡単な処理から順番に行きます。ノードを追加するには以下のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()       # まずは、空のグラフオブジェクトを用意します。
        
    g.add_nodes_from([2,3,4,5])      #  用意したグラフオブジェクトにノード(だけ)を追加します。引数はノードのリストです。
    
    nx.draw_networkx(g,pos=nx.spring_layout(g))     # グラフの描画に必要

    pyplot.show()
if __name__ == '__main__':
    main()


これを実行すると、次のような画面が出てきます。(配置は自動でされます)


エッジの追加

さらにコードを書き足します。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
             
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)      # 2と3をつなぐエッジを追加する。
    
    nx.draw_networkx(g,pos=nx.spring_layout(g))
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、以下のようになり2と3をつなぐエッジが追加されます。

エッジは次のような書き方でも追加できるようです。


import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
               
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)        
    
    g.add_edge(*e)      # こういう書き方でもエッジは追加できる。
    
    nx.draw_networkx(g,pos=nx.spring_layout(g))
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、確かに4と5をつなぐエッジが追加されています。

 

オプションの指定

挿入している画像のサイズなどを調整したいので、このあたりでオプションの指定をしおきます。

参考:draw_networkx — NetworkX 1.10 documentation

ノードのサイズ

node_sizeで指定します。デフォルトは300だそうです。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
     
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500)        # node_sizeで指定します。デフォルトは300だそうです。
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、こうなります。


(ラベルの)フォントサイズ

font_sizeで指定します。デフォルトは12らしいです。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
      
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=30)    # font_sizeで指定します。デフォルトは12らしいです。
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、こうなります。

 

ノードの色

node_colorで指定します。デフォルトは今まで見てきたように赤です。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
                
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=30,node_color="b")     # node_colorで指定します。デフォルトは赤です。
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、こうなります。

色の指定については(他のオプションもかもしれませんが)、Matplotlibの機能を使って実現されています。
なので、指定方法はMatplotlibに則ります。
よく使う色であれば、青であれば"b"、赤は"r"、緑は"g"、と記号で指定できます。
その他、hexstring(16進指定、#FFFFFFみたいな)だったり、gray shade(灰色の濃淡指定)で0〜1の間の値で指定できたりもします。
より詳しいことは、

colors — Matplotlib 1.5.1 documentation

(Matplotlibのドキュメントページ)やHTMLの色の指定方法などを調べてみましょう。

エッジの太さ

widthで指定します。デフォルトは1.0です。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
        
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=30,node_color="b",width=5.0)     # widthで指定します。デフォルトは1.0です。
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、こうなります。

 

エッジの種類

ノードとノードをつなぐ線の種類はstyleで指定します。デフォルトはsolidですが、その他dashedやdotted、dashdotなどが指定できるようです。
次のコードはdashedを指定してみました。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=30,node_color="b",width=5.0,style="dashed")    # styleで指定します。デフォルトはsolidです。
    
    pyplot.show()

if __name__ == '__main__':
    main()


実行結果はこちら。

 

透かし

ノードの透かします。これはalphaで指定します。デフォルトでは当然透かしは入っていないので、それは1.0となっています。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=30,node_color="b",width=5.0,style="dashed",alpha=0.5)    # alphaで指定します。デフォルトは1.0で透かしは入っていないですが、ここでは0.5と指定しています。
    
    pyplot.show()

if __name__ == '__main__':
    main()


実行結果はこちら。


とりあえず、よく使いそうなところだけ取りあげましたが、NetworkXのドキュメントを見ると他にもいろいろ指定できるようですが、 値として何を指定できるのかがわからないものもある。。。

とりあえずはここまでにしておいて、おいおい分かり次第、紹介します。

Macでpython3の環境構築10---NetworkXの使い方1---

以前の記事

piroshhh.hatenablog.com

piroshhh.hatenablog.com

piroshhh.hatenablog.com

 

にて、Matplotlibをインストールしたものの、Networkxのプログラムを実行しても、ノードにラベルがつかない、といろいろ悩んでおりました。

 
で、解決策の一つがわかったので、自分のための忘備録もかねて書いておきたいと思います。

サンプルプログラムとして次のコードを使います。

プログラムの各行の意味などは、また別の機会に書きますが、最後の方の描画部分がポイントです。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
              
    g.add_nodes_from([2,3,4,5])
    
    g.add_edge(2,3)
    
    e=(4,5)
    
    g.add_edge(*e)
    
    g.add_path([1,3,4,2])   #  ノードのリストを渡すと、ノードを順番通りにつなぐ道のりがグラフについかされる。

    nx.draw_networkx(g,pos=nx.spring_layout(g))        # この行が重要。nx.draw()ではない。posを指定しないとエラーになる。
    pyplot.show()
    


if __name__ == '__main__':
    main()


これまでは、nx.draw(g)などとしていましたがnx.draw_networkx(g,pos=nx.spring_layout(g)) とすれば改善するようです。

実際の実行結果がこちら。


となり、確かにノードにラベルがついております。


で話はそれますが、

if __name__ == '__main__':
    main()

の部分についてよく理解していなかったので調べてみました。

調べていたらとてもわかりやすい説明があったので、そちらのリンクを紹介しておきたいと思います。

azuuun-memorandum.hatenablog.com

 

Macでpython3の環境構築9---Scipyのインストール---

今回はScipyのインストールをします。

参考書として手元に置いてある『パーフェクトpython』では、gfortranとswig(とそれに必要なPCRE)というものを先にインストールしているようなのですが、ネット上ではswigをインストールしているものはあまり見かけませんでした。

swigとはなにか調べてみると、pythonの中でC/C++を呼び出すためのライブラリのようです。

特にswigは必ずしも必要ではないようでしたので、とりあえず、Scipyだけインストールすることにしました。

gfortranのインストール

ということで、まずはgfortranのインストールをします。
次のように打ちます。


hiroshi-no-MacBook-Air:~ hiroshi$ brew install gfortran      #「brew install gfortran」と打ってreturnを押す。

するとこんなメッセージがでました。


GNU Fortran is now provided as part of GCC, and can be installed with:
  brew install gcc

gfortranはgccの一部として提供されています。brew install gccとすればインストールできます、と表示されているので素直に指示に従ってみます。


hiroshi-no-MacBook-Air:~ hiroshi$ brew install gcc      #  「brew install gcc」と打ってreturnを押す。

そうすると、処理が始まります。


==> Installing dependencies for gcc: gmp, mpfr, libmpc, isl
==> Installing gcc dependency: gmp
==> Downloading https://homebrew.bintray.com/bottles/gmp-6.0.0a.yosemite.bottle.
######################################################################## 100.0%
==> Pouring gmp-6.0.0a.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/gmp/6.0.0a: 15 files, 3.2M
==> Installing gcc dependency: mpfr
==> Downloading https://homebrew.bintray.com/bottles/mpfr-3.1.3.yosemite.bottle.
######################################################################## 100.0%
==> Pouring mpfr-3.1.3.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/mpfr/3.1.3: 24 files, 3.6M
==> Installing gcc dependency: libmpc
==> Downloading https://homebrew.bintray.com/bottles/libmpc-1.0.3.yosemite.bottl
######################################################################## 100.0%
==> Pouring libmpc-1.0.3.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/libmpc/1.0.3: 10 files, 380K
==> Installing gcc dependency: isl
==> Downloading https://homebrew.bintray.com/bottles/isl-0.14.1.yosemite.bottle.
######################################################################## 100.0%
==> Pouring isl-0.14.1.yosemite.bottle.3.tar.gz
🍺  /usr/local/Cellar/isl/0.14.1: 68 files, 3.2M
==> Installing gcc
==> Downloading https://homebrew.bintray.com/bottles/gcc-5.2.0.yosemite.bottle.1
######################################################################## 100.0%
==> Pouring gcc-5.2.0.yosemite.bottle.1.tar.gz
==> Caveats
GCC has been built with multilib support. Notably, OpenMP may not work:
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60670
If you need OpenMP support you may want to
  brew reinstall gcc --without-multilib
==> Summary
🍺  /usr/local/Cellar/gcc/5.2.0: 1353 files, 248M

で、確認のためもう一度同じコマンドを打ってみます。


hiroshi-no-MacBook-Air:~ hiroshi$ brew install gcc      #「brew install gcc」と打ってreturnを押すと、、、
Warning: gcc-5.2.0 already installed       #  すでにインストールされてますよ、と出る。

gfortranのインストールはこれで完了。

Scipyのインストール

gfortranのインストールさえしてしまえば、あとはほとんどやることはありません。

「pip3 install scipy」とするだけです。


hiroshi-no-MacBook-Air:~ hiroshi$ pip3 install scipy      #  「pip3 install scipy」と打ってreturnを押すと下の行からの処理が始まる。
You are using pip version 7.1.0, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting scipy
  Downloading scipy-0.16.0-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (19.7MB)
    100% |████████████████████████████████| 19.7MB 19kB/s
Installing collected packages: scipy
Successfully installed scipy-0.16.0

「Successfully installed scipy-0.16.0」と出ているので無事インストール終了です。

でもさ。少し疑問。
gccってXcodeをインストールしたときに一緒にインストールしなかったっけ?それとは違うのか?。
わかる人いたらご教示ください。

csvファイルの扱い1---スプレッドシートやExcelとの絡みにて---

csvファイルについて調べたことを書いてみようと思います。

もともとの目標は、pythonなどのプログラミング言語csvファイルを扱う方法について調べようと思っていたのですが、もう少し基本的なことまで遡ってcsvファイルの扱い方について調べてみました。

csvファイルとは

そもそもなんなのか、という部分については検索すれば丁寧な解説がたくさんでているので、そちらへ譲ります。
要するに、windowsでいえばメモ帳、Macでいえばテキストエディタとかに書かれていて、カンマで区切られて書かれている
こういうファイルです。
 
これを、例えばExcelとか、もともとは表形式で作成したデータを、テキストファイル形式にして、他のアプリケーションとやりとりをしやすくします。
 
表形式のデータだと、ExcelExcelの間のやりとりなら、まだいいとしても、他のソフトとやりとりをしようと思うと、ファイルの形式が合わず、うまくいきません。
 
データそのもの(つまりExcelの場合でいえば、各セルに入力されているデータ)以外にも、体裁を整えるための余分なデータがくっついてしまっているので。
 
で、データの基本的な部分だけ残して作ったものが、csvファイルです。

 

スプレッドシートcsvファイルの作成

Excelをあまり使ったことがないのでわかりませんが、おそらくExcelでも基本的には同じだと思います。
 
ここでは、Googleドライブのスプレッドシートからcsvファイルを作成します。
 
サンプル用のデータとして、次のようなデータを用意します。
 
 
データを作成したら、画面左上の「ファイル」をクリックし、「形式を指定してダウンロード」→「カンマ区切りの値(.csv、現在のシート)」を選んでクリックします。
 
 
クリックをすると、すぐにダウンロードされます。
 
普段ダウンロードされたデータが入る場所をみると、「.csv」のファイルができています。
今はMacを使っているので、「ダウンロード」というフォルダの中に入りました。
 
そのままcsvのデータを開くと、Excelとかデフォルトで指定されているソフトで開かれてしまうと思うので、どのソフトで開くかを指定します。
 
Macの場合であれば、
 

 

ここをクリックすると、


「このアプリケーションを開く」にマウスを合わせ、

テキストエディタ」をクリックします。

そうすると、テキストエディタ

このように書かれたデータが表示されます。これがcsvファイルです。

csvファイル→スプレッドシート

具体的な操作手順に関してはいろいろあると思いますが、今回は次のような方法でいきます。

新規にスプレッドシートを開き、画面左上のメニューから「インポート」を選びます。


新しく出てくる画面で、アップロードを選び、画面の指示通り、該当のファイルを直接ドラッグするか、パソコンのから該当のファイルを選んで指定します。そうすると、左下の「選択」のボタンが押せるようになるので、クリックします。


そうすると次のような画面がでます。


ここで操作を選びます。
インポート操作のところは、

 

    • 新しいシートを挿入する。
      →現在開いているスプレッドシートで、新しいシートを追加し新しく追加したシートにcsvファイルを読み込み。

 

  • スプレッドシートを置き換えする。
    →現在のシートにそのままcsvファイルを流し込む。(それ以下の三つと混同しやすい表現ですが。。。)
それ以下三つの選択肢はやや説明が面倒なのでしません。
 
区切り文字の方は、文字通り「データの区切りの記号はなににしているか」です。
ここは「自動的に検出する」か、「カンマ」にします。csvですのでね。
 
「タブ」もあるのは、世の中にはcsv(Camma Separeted Value)に対して、「タブ」で区切られてるtsv(Tab Separated Value)なるものもあるからです。
 
それで読み込みをすると、こうなって無事読み込めます。
 
 
 
ちなみにcsvファイルを読み込むのに、区切り文字に「タブ」を選択すると、次のようになります。
 
これは、区切り文字は「タブ」と指定しているので、「タブ」がデータの区切りになっているわけです。
つまり、タブが現れるまでは一塊のデータです。
一方、csvと同じように改行コードがくれば、行が変わります。
csvファイルをtsvとして読み込むと、タブが来る前に改行コードが来ているので、一行目が、丸々ひとつのデータをして扱われ、改行コードにて次の行に読み込まれているわけです。
 
次回は、csvpythonやCで扱う方法について書いてみようと思います。

Macでpython3の環境構築8---NLTKのインストール2---

前回の続きです。
(前回:

piroshhh.hatenablog.com



nltk.download()とコマンドを打ってもうまくいかないというお話でした。

これは次のようなコマンドでも代替できるようです。

hiroshi-no-MacBook-Air:~ hiroshi$ python3 -m nltk.downloader book                
#  「python3 -m nltk.downloader book」と打ってreturnを押す。


そうすると、次のような処理が始まります。

[nltk_data] Downloading collection 'book'
[nltk_data]    |
[nltk_data]    | Downloading package abc to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package abc is already up-to-date!
[nltk_data]    | Downloading package brown to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package brown is already up-to-date!
[nltk_data]    | Downloading package chat80 to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package chat80 is already up-to-date!
[nltk_data]    | Downloading package cmudict to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package cmudict is already up-to-date!
[nltk_data]    | Downloading package conll2000 to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package conll2000 is already up-to-date!
[nltk_data]    | Downloading package conll2002 to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package conll2002 is already up-to-date!
[nltk_data]    | Downloading package dependency_treebank to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package dependency_treebank is already up-to-date!
[nltk_data]    | Downloading package genesis to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package genesis is already up-to-date!
[nltk_data]    | Downloading package gutenberg to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package gutenberg is already up-to-date!
[nltk_data]    | Downloading package ieer to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package ieer is already up-to-date!
[nltk_data]    | Downloading package inaugural to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package inaugural is already up-to-date!
[nltk_data]    | Downloading package movie_reviews to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package movie_reviews is already up-to-date!
[nltk_data]    | Downloading package nps_chat to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package nps_chat is already up-to-date!
[nltk_data]    | Downloading package names to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package names is already up-to-date!
[nltk_data]    | Downloading package ppattach to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package ppattach is already up-to-date!
[nltk_data]    | Downloading package reuters to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Package reuters is already up-to-date!
[nltk_data]    | Downloading package senseval to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/senseval.zip.
[nltk_data]    | Downloading package state_union to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/state_union.zip.
[nltk_data]    | Downloading package stopwords to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/stopwords.zip.
[nltk_data]    | Downloading package swadesh to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/swadesh.zip.
[nltk_data]    | Downloading package timit to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/timit.zip.
[nltk_data]    | Downloading package treebank to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/treebank.zip.
[nltk_data]    | Downloading package toolbox to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/toolbox.zip.
[nltk_data]    | Downloading package udhr to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/udhr.zip.
[nltk_data]    | Downloading package udhr2 to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/udhr2.zip.
[nltk_data]    | Downloading package unicode_samples to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/unicode_samples.zip.
[nltk_data]    | Downloading package webtext to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/webtext.zip.
[nltk_data]    | Downloading package wordnet to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/wordnet.zip.
[nltk_data]    | Downloading package wordnet_ic to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/wordnet_ic.zip.
[nltk_data]    | Downloading package words to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/words.zip.
[nltk_data]    | Downloading package maxent_treebank_pos_tagger to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping taggers/maxent_treebank_pos_tagger.zip.
[nltk_data]    | Downloading package maxent_ne_chunker to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping chunkers/maxent_ne_chunker.zip.
[nltk_data]    | Downloading package universal_tagset to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping taggers/universal_tagset.zip.
[nltk_data]    | Downloading package punkt to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping tokenizers/punkt.zip.
[nltk_data]    | Downloading package book_grammars to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping grammars/book_grammars.zip.
[nltk_data]    | Downloading package city_database to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping corpora/city_database.zip.
[nltk_data]    | Downloading package tagsets to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |   Unzipping help/tagsets.zip.
[nltk_data]    | Downloading package panlex_swadesh to
[nltk_data]    |     /Users/hiroshi/nltk_data...
[nltk_data]    |
[nltk_data]  Done downloading collection book
hiroshi-no-MacBook-Air:~ hiroshi$


では、次にそのまま、

hiroshi-no-MacBook-Air:~ hiroshi$ from nltk.book import *             
 #       $のあとにいきなり「from nltk.book import *」と打ってもうまくはいかない。


としても。。。

from: can't read /var/mail/nltk.book
hiroshi-no-MacBook-Air:~ hiroshi$


と返されうまくいきません。

今度はこうしてみます。

hiroshi-no-MacBook-Air:~ hiroshi$ python3


そうすると、こうなります。

Python 3.4.3 (default, Aug 11 2015, 08:57:25)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>


また入力の待ち状態になるので、続けて二つコマンドを打ってみます。

>>> import nltk      #  「import nltk」と打ってreturnを押す。
>>> text1               #    続けてtext1と打ってreturnを押す。


それでも、やはりこうなってしまい失敗。

Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'text1' is not defined
>>>
 


今度は、こうしてみます。

>>> from nltk.book import *         #  「from nltk.book import *」と打って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
>>>


最後に、「text1」と打って

>>> text1
<Text : Moby Dick by Herman Melvile 1851 >
>>>


となり、なんとか成功しました。

まとめとしては、「python3 -m nltk.downloader book」を行ったあとは

  1. python3  とコマンドを打つ。
  2. import nltk とコマンドを打つ。
  3. from nltk.book import * とコマンドを打つ。
  4. 最後にtext1と打って、上記のように表示されれば成功。

となります。