Python(Anaconda)で”TypeError: parse() got an unexpected keyword argument ‘transport_encoding'”エラー

Python(Anaconda)を使っていて、pipでインストールしようとしたら、次のようなエラーになった。

TypeError: parse() got an unexpected keyword argument 'transport_encoding'

次のコマンドを実行したら、インストールできるようになった。

conda install -c anaconda html5lib

PythonでJanomeを使って形態素解析した結果をファイルに保存する

PythonでJanomeを使って形態素解析した結果をファイルに保存する方法です。

PythonでJanomeを使って形態素解析」のコメント欄で質問をもらったので、書いておきます。

実行環境は

$ python3 --version
Python 3.5.2

ソースコードです。

from janome.tokenizer import Tokenizer

tokenizer = Tokenizer()
with open("token.txt", "w") as fp:
    for token in tokenizer.tokenize("すもももももももものうち"):
        fp.write(str(token))
        fp.write("\n")

実行結果

すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も   助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も   助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の   助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

PythonでJanomeを使って形態素解析

JanomeはPythonで書かれた形態素解析のライブラリです。
インストールが簡単で、Mecabをインストールできない環境でも使用できる点が魅力です。

Janomeのインストール

次のコマンドでインストールできます。

pip install janome

Janomeの使い方

Tokenizerをインポートします。

>>> from janome.tokenizer import Tokenizer

Tokenizerオブジェクトを作ります。

>>> tokenizer = Tokenizer()

Tokenizerオブジェクトのtokenize()メソッドに解析する文字列を渡します。
返り値はTokenオブジェクトのlistです。

>>> for token in tokenizer.tokenize("すもももももももものうち"):
...     print(token)
...
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

tokenize()メソッドの引数streamにTrueを指定すると、返り値がgeneratorになります。

tokenize()メソッドの引数wakatiにTrueを指定すると、返り値が表層形(surface)のみになります。

>>> for token in tokenizer.tokenize("すもももももももものうち", wakati=True):
...     print(token)
...
すもも
も
もも
も
もも
の
うち

Tokenオブジェクトは、次のインスタンス変数を持ちます。

surface (表層形)
part_of_speech (品詞)
infl_type (活用型)
infl_form (活用形)
base_form (基本形)
reading (読み)
phonetic (発音)
node_type

実行例

>>> tokens = tokenizer.tokenize("吾輩は猫である")
>>> print(tokens[0])
吾輩    名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
>>> tokens[0].surface
'吾輩'
>>> tokens[0].part_of_speech
'名詞,代名詞,一般,*'
>>> tokens[0].infl_type
'*'
>>> tokens[0].infl_form
'*'
>>> tokens[0].base_form
'吾輩'
>>> tokens[0].reading
'ワガハイ'
>>> tokens[0].phonetic
'ワガハイ'

part_of_speechはカンマ区切りなので、次のようにして値を取得できます。

>>> tokens[0].part_of_speech.split(',')[0]
'名詞'
>>> tokens[0].part_of_speech.split(',')[1]
'代名詞'
>>> tokens[0].part_of_speech.split(',')[2]
'一般'
>>> tokens[0].part_of_speech.split(',')[3]
'*'

最後に

実行環境

  • Linux Mint
  • Python バージョン3.5.2
  • Janome バージョン0.3.5

jupyter notebookにmatplotlibを使ってグラフを描画する

jupyter notebookにグラフを表示するためのおまじない

%matplotlib notebook

または

%matplotlib inline

notebookはグラフを操作できる。

inlineはグラフが画像になる。

グラフを書いてみる

%matplotlib notebook
# ライブラリの読み込み
import matplotlib.pyplot as plt
# グラフを描画する
plt.plot([1,2,3,4])

X軸、Y軸の値を指定する

%matplotlib notebook
import matplotlib.pyplot as plt
# X軸、Y軸の値を指定する
plt.plot([1,2,3,4], [2,4,6,8])

直線以外の描画

青円

plt.plot([1,2,3,4], [2,4,6,8], 'bo')

赤い下向き三角

plt.plot([1,2,3,4], [2,4,6,8], 'rv')

指定できる文字列は「Matplotlib documentation」を参照。

plt.plot([1,2,3,4], [2,4,6,8], 'bo')
plt.plot([1,2,3,4], [4,3,2,1], 'rv')
plt.plot([1,2,3,4], [7,7,7,7], 'g*')
plt.plot([1,2,3,4], [6,6,6,6], 'mp')

グラフにラベルをつける

%matplotlib notebook
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])

# X軸のラベル
plt.xlabel('X Label')
# Y軸のラベル
plt.ylabel('Y Label')

軸の設定

X軸Y軸の範囲を指定する

%matplotlib notebook
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.xlabel('X Label')
plt.ylabel('Y Label')

plt.axis([1,5,1,8])

axisの引数は、[X軸最小値, X軸最大値, Y軸最小値, Y軸最大値]となる。

X軸Y軸を表示しない

plt.axis('off')

他にも、’equal’,’scaled’,’tight’,’image’などの設定がある。

関数を描画

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy

def sigmoid(x):
    return 1 / (1 + numpy.exp(-x))

x = numpy.arange(-5, 5, 0.1)
plt.plot(x, sigmoid(x))