NLTKのコーパスを用いたストップワード除去(英語)[Python][NLP]

以下手順

In [1]: import nltk.corpus import stopwords
In [2]: stopWords = stopwords.words('english')

In [3]: stopWords
Out[3]: ['i', 'me', 'my', 'myself', 'we', 'our', (省略)]

In[4]: len(stopWords)
Out[4]: 179

In[5]: words = ["he", "gets", "an", "apple"]

In[6]: [w for w in words if w not in stopWords]
Out[6]: ['gets', 'apple']

終わり。


LookupErrorが発生した場合の対処法

In[1]: from nltk.copus import stopwords
In[2]: stopWords = stopwords.words('english')
Out[2]:
LookupError: 
**********************************************************************
  Resource stopwords not found.
  Please use the NLTK Downloader to obtain the resource:

import nltk
nltk.download('stopwords')
  
  Searched in:
    - '/home/hoge/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/usr/nltk_data'
    - '/usr/lib/nltk_data'
**********************************************************************

LookupError発生時は以下のコマンドを入力し、コーパスをダウンロードしエラー回避。

In[1]: import nltk
In[2]: nltk.download('stopwords')

Proxy下の場合は、エラーがでる。

In[1]: nltk.download('stopwords')
[nltk_data] Error loading stopwords: <urlopen error [Errno -5] No
[nltk_data]     address associated with hostname>
Out[1]: False

Proxy下の場合は、一旦ターミナルに戻って、以下のコマンドを打ってエラー回避。

# コーパスのダウンロード
$ sudo -E python -m nltk.downloader -d /home/hoge/nltk_data all

AWS CLIでローカルのファイル/フォルダをS3にアップロード

f:id:Vastee:20180618174144p:plain

AWS CLIの設定が既にされていることが前提の話。

まだの方は下のリンクを参考に設定してください。

docs.aws.amazon.com


ローカルのファイルのアップロード

構文:

aws s3 cp [ローカルにあるファイルのパス] [S3のバケットのパス]

例:

aws s3 cp ./hoge.txt s3://hoge_bucket/hoge_folder/

ローカルにあるhoge.txtファイルをS3上にあるバケット"hoge_bucket"内のフォルダ"hoge_folder"にアップロード


ローカルのフォルダを再帰的にアップロード

構文:

aws s3 cp [ローカルにあるフォルダのパス] [S3のバケットのパス] --recursive

--recursiveを付けないと中身がアップロードされない。

例:

aws s3 cp ./hoge s3://hoge_bucket/hoge_folder/ --recursive

ローカルにあるhogeフォルダの中身をS3上にあるバケット"hoge_bucket"内のフォルダ"hoge_folder"にアップロード

Windows10にTensorflowとKerasをインストール

f:id:Vastee:20180617174344j:plain

環境

Anacondaをインストール

 Python使いにはお馴染みAnacondaを下のリンクからダウンロード.

 Downloadのボタンを押してEXEを入手すれば,直ぐにインストールできる.   www.anaconda.com

Anaconda Navigatorを開いて新しい環境を作る

機械学習用ライブラリは環境を分けておいた方が吉.

ということで,Anaconda Navigatorを検索し,開いて新しい環境を作る.

f:id:Vastee:20180617192636p:plain

作り方は簡単,以下の写真のボタンを押して案内に沿えば新しい環境ができる.

f:id:Vastee:20180617180001p:plain

新しい環境の名前はわかりやすければ何でもよい.私はTensorflowという名前で環境を作った.

Createを押した後の画面.Pythonは3.6に設定.

f:id:Vastee:20180617181317p:plain

環境の切り替えはホーム画面から行える.

f:id:Vastee:20180617180805p:plain

Tensorflowのインストール

Anaconda Promptを検索し,開く.

Anaconda Promptは,コマンドプロンプトWindows Powershellのことでは無いので注意.

f:id:Vastee:20180617193249p:plain

まず,先ほど作ったtensorflowという環境に入るためのコマンドを打つ.

$ activate tensorflow

tensorflowの環境に入ったら以下のコマンドを打って,インストールを行う.

$ pip install tensorflow-gpu

  * CPU版をご希望の方はこちら

$ pip install tensorflow

これだけでインストール終了.

Kerasのインストール

Anaconda Promptで以下を打つ.

$ pip install keras

これだけ!

GrovePiをRaspi 3B+に取り付けて簡単にLチカを行う[Grove][Python][RaspberryPi]

f:id:Vastee:20180616234826j:plain

Groveとは?

  • マイコンに取り付けたシールドにセンサモジュールを抜き差しするだけで簡単に電子工作ができるキット.

  • IoTのプログラミングには興味があるが,ハードウェアの勉強をするのが面倒な人にピッタリ!

  • 研究のプロトタイプ作成にもピッタリ!

用意したもの

GrovePi+シールドの箱にはB, B+ A+, 2対応と書いてあったが,3B+でも問題なく使えた.

f:id:Vastee:20180616234613j:plain

秋葉原のマルツでは,Groveモジュールが多数陳列されていた.

ギーク感溢れるパッキングだったため,テンションが上がってしまいついついたくさん買ってしまった.

f:id:Vastee:20180616230029j:plain

GrovePi+シールドをRaspberry Piに取り付ける

ここから作業開始だ.

まず,下の写真のようにGrovePi+シールドをRaspberry Piに取り付ける.特に迷うことは無いはず.

f:id:Vastee:20180616222700j:plain

GrovePiのソースコードをダウンロード&インストール

$ git clone https://github.com/DexterInd/GrovePi.git # ソースコードのダウンロード
$ cd GrovePi/Script
$ sudo sh ./install.sh

 インストール完了後,自動で再起動する

 再起動の後,以下のコマンドを入力し,以下の出力が返ってくればOK

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

GrovePi+シールドにLEDモジュールを取り付ける

 LEDを基盤に取り付ける.写真をみるとわかるが,足の長さが同じなので端子の形から+-を判断する.

f:id:Vastee:20180616225207j:plain

GrovePiのサンプルプログラムを実行しLEDをチカチカさせる

$ cd GrovePi/Software/Python # サンプルプログラムがあるフォルダ
$ python grove_led_blink.py # LEDをチカチカさせるスクリプト

Pythonスクリプトを実行すると,ON, OFFのアラートが交互に出力.

f:id:Vastee:20180616233124p:plain

LEDがチカチカしてる様子.

f:id:Vastee:20180616233202j:plain

以上.とっても簡単でした.

ワールドカードでタグ検索

# 必要なモジュールのインポート
import BeautifulSoup
import re

try:
     # Python 3
     from urllib import request
except ImportError:
      # Python 2
     import urllib2 as request

# urlはスクレイピング対象 ex) url = http://www.hoge.co.jp/content
response = request.urlopen(url)
body = response.read()
soup = BeautifulSoup(body)

# ワイルドカードでタグ検索
soup.find_all(href=re.compile(".*"))

フォルダ内のファイルを特定の割合に分ける[Python]

なんでこんなことするの?

CNNで学習するために、画像ファイルをTrainingとValidationに分けたかったから。

画像ファイルを7:3に分けるスクリプト
from glob import glob
from os.path import join
import random

img_src = "/home/img/"

# 指定パスのPNG画像ファイルのリストを取得
files = glob(join(img_src, "*.png"))

# ファイルの総数を取得
num_files = len(files)

# ファイルのリストを7:3に分ける
files30 = random.sample(files, int(num_files*0.3))
files70 = random.sample(files, num_files - int(num_files*0.3))
ポイント
  • random.sample(リストからランダムでn個の要素を取り出す関数)を使ったこと。
  • ファイルの抜けが無いように、(num_file*n) : (1 - numfile*n) の割合で分けたこと。

PILで透過PNGのαチャンネルを消す方法[Python][PIL]

なんでこんなことするの?

Pytorchで透過PNGテンソルに変換したらエラーがでたから。

やり方
In[1]: from PIL import Image

In[2]: img_pil = Image.open("hoge.png")

In[3]: img_pil.mode
Out[3]: 'RGBA'

In[4]: img_pil = img_pil.convert("RGB") # αチャンネルを消す

In[5]: img_pil.mode
Out[5]: 'RGB'
コメント
  • RGBA -> RGBに変換することでαチャンネルを消している。
  • pilのconvertは簡単で、可読性が高いと思う。
  • これでJPGと同じようにテンソル変換できる。