Python を exe ファイルに変換する
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析を始めたいと思ってグラフの描き方、ファイル選択ダイアログの使い方を調べてきました。
ここで、気分転換に exe ファイルに変換してみたいと思います。
ファイル選択ダイアログでファイルを選択して、選択されたファイルのパスをメッセージボックスで表示する exe ファイルを作成します。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
以下の2つのソースコードは共に下記の【保存ディレクトリ】に保存しました。
ファイルもそれぞれ書いておきます。
【保存ディレクトリ】
C:\WinPython-64bit-3.4.4.6Qt5\settings\.spyder-py3
exe ファイルソースコード : GUI0.py
変換実行ソースコード : GUI_Ex0.0.py
下の『結果』で今回発生したエラーについても、まとめていますが、ファイル名でには要注意です。
exe ファイル ソースコード
###############################################################################
# メッセージボックスとファイル選択ダイアログの GUI プログラム
###############################################################################
# モジュールのインポート
import os, tkinter, tkinter.filedialog, tkinter.messagebox
import sys
#==============================================================================
# 設定
#==============================================================================
program_name = 'GUIプログラム' # プログラム名設定
flag_type = 0 # 読み込むファイルの形式設定
# 0 : すべてのファイル
# 1 : cvs ファイルのみ
# 2 : xls ファイルのみ
# 3 : xlsx ファイルのみ
# 4 : xls, xlsx ファイルのみ
# 5 : txt ファイルのみ
# 6 : mp3 ファイルのみ
flag_multi_select = 1 # ファイル選択可能数設定
# 0 : 単一ファイル選択
# 1 : 複数ファイル選択
#==============================================================================
# GUI プログラム
#==============================================================================
# Tk オブジェクトのインスタンス作成
root = tkinter.Tk()
# Tk のウィンドウを非表示にする
root.withdraw()
# 読み込むファイル形式の設定
if flag_type == 0:
fTyp = [("すべてのファイル", "*")] # すべてのファイル
elif flag_type == 1:
fTyp = [("csvファイル","*.csv")] # cvs ファイルのみ
elif flag_type == 2:
fTyp = [("Excelファイル","*.xls")] # xls ファイルのみ
elif flag_type == 3:
fTyp = [("Excelファイル","*.xlsx")] # xlsx ファイルのみ
elif flag_type == 4:
fTyp = [("Excelファイル","*.xls"),
("Excelファイル","*.xlsx")] # xls, xlsx ファイルのみ
elif flag_type == 5:
fTyp = [("テキストファイル","*.txt")] # txt ファイルのみ
elif flag_type == 6:
fTyp = [("音声ファイル","*.mp3")] # mp3 ファイルのみ
# ファイル選択ダイアログのイニシャルディレクトリの設定
#initDir = os.path.abspath(os.path.dirname(__file__))
initDir = 'C:\\'
# メッセージボックスの表示
tkinter.messagebox.showinfo(program_name, '処理ファイルを選択してください.')
# ファイル選択ダイアログの表示
if flag_multi_select == 0:
file = tkinter.filedialog.askopenfilename(filetypes = fTyp, initialdir = initDir)
if file == "":
tkinter.messagebox.showinfo(program_name, '処理を中断します.')
sys.exit()
# 処理ファイル名の出力
tkinter.messagebox.showinfo(program_name, file)
print(file)
else:
files = tkinter.filedialog.askopenfilenames(filetypes = fTyp, initialdir = initDir)
if files == "":
tkinter.messagebox.showinfo(program_name, '処理を中断します.')
sys.exit()
l = list(files)
# 処理ファイル名の出力
tkinter.messagebox.showinfo(program_name, l)
print(l)
#==============================================================================
# ファイル処理プログラム
#==============================================================================
print('\ncomplete!!')
変換実行ソースコード
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
exe = Executable(script='GUI0.py', base=base)
setup(name='GUI',
version='0.1',
description='converter',
executables=[exe])
コマンドプロンプト
結果
上の exe ファイルソースコードを最初は『 GUI0.0.py 』として保存していました。 exe ファイルは生成できたのですが、 exe ファイル実行時に図2 のエラーメッセージが表示されました。
なんのことかよくわかりませんが、『 GUI0.0.py 』というファイルが悪さをしている感じがしたので、exe ファイルソースコードを『 GUI0.py 』というファイル名で保存し直して、再度 exe ファイルに変換しました。
すると、 exe ファイルは生成できたのですが、 exe ファイル実行時に図3 のエラーメッセージが表示されました。
ファイル選択ダイアログで、最初に表示するディレクトリ設定をスクリプトファイルがあるディレクトリとしていたのですが、 exe ファイルに変換すると取得できなくなるみたいなので、 C ドライブ直下を指定する様にソースコードを変更して再度 exe ファイルに変換しました。
すると、正常に動作する様になりました。
exe ファイルは上の2つのソースコードを保存したディレクトリ『 C:\WinPython-64bit-3.4.4.6Qt5\settings\.spyder-py3 』に新しく『 build 』というフォルダができます。その中に exe ファイルと付帯ファイルが出来ています。
起動スピード、実行速度共に普通なスピードでした。
まぁ、簡単なファイル選択のみのプログラムなので当たり前ですが…
コメント
exe ファイルに変換出来ると自動化や効率化に大きく影響してくると思います。
今のプログラムのままでは使い道がないので、もうちょっと実用的なクラス、関数を作って組み込みたいです。
以上
Python で ファイル選択ダイアログを使う
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析を始めたいと思ってグラフの描き方を調べました。
まだ、基本的なグラフの書き方だけですが…
今回は ファイル選択ダイアログを使ってみます。
グラフの描き方は少しわかってきたので、グラフにする値の読み込みに少し力を入れたいと思います。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
###############################################################################
# メッセージボックスとファイル選択ダイアログの GUI プログラム
###############################################################################
# モジュールのインポート
import os, tkinter, tkinter.filedialog, tkinter.messagebox
import sys
#==============================================================================
# 設定
#==============================================================================
program_name = 'GUIプログラム' # プログラム名設定
flag_type = 0 # 読み込むファイルの形式設定
# 0 : すべてのファイル
# 1 : cvs ファイルのみ
# 2 : xls ファイルのみ
# 3 : xlsx ファイルのみ
# 4 : xls, xlsx ファイルのみ
# 5 : txt ファイルのみ
# 6 : mp3 ファイルのみ
flag_multi_select = 1 # ファイル選択可能数設定
# 0 : 単一ファイル選択
# 1 : 複数ファイル選択
#==============================================================================
# GUI プログラム
#==============================================================================
# Tk オブジェクトのインスタンス作成
root = tkinter.Tk()
# Tk のウィンドウを非表示にする
root.withdraw()
# 読み込むファイル形式の設定
if flag_type == 0:
extension = [("すべてのファイル", "*")] # すべてのファイル
elif flag_type == 1:
extension = [("csvファイル","*.csv")] # cvs ファイルのみ
elif flag_type == 2:
extension = [("Excelファイル","*.xls")] # xls ファイルのみ
elif flag_type == 3:
extension = [("Excelファイル","*.xlsx")] # xlsx ファイルのみ
elif flag_type == 4:
extension = [("Excelファイル","*.xls"),
("Excelファイル","*.xlsx")] # xls, xlsx ファイルのみ
elif flag_type == 5:
extension = [("テキストファイル","*.txt")] # txt ファイルのみ
elif flag_type == 6:
extension = [("音声ファイル","*.mp3")] # mp3 ファイルのみ
# ファイル選択ダイアログのイニシャルディレクトリの設定
initDir = os.path.abspath(os.path.dirname(__file__))
# メッセージボックスの表示
tkinter.messagebox.showinfo(program_name, 'ファイルを選択してください.')
# ファイル選択ダイアログの表示
if flag_multi_select == 0:
file = tkinter.filedialog.askopenfilename(filetypes = extension, initialdir = initDir)
if file == "":
tkinter.messagebox.showinfo(program_name, '処理を中断します.')
sys.exit()
# 処理ファイル名の出力
tkinter.messagebox.showinfo(program_name, file)
print(file)
else:
files = tkinter.filedialog.askopenfilenames(filetypes = extension, initialdir = initDir)
if files == "":
tkinter.messagebox.showinfo(program_name, '処理を中断します.')
sys.exit()
l = list(files)
# 処理ファイル名の出力
tkinter.messagebox.showinfo(program_name, l)
print(l)
#==============================================================================
# ファイル処理プログラム
#==============================================================================
print('\ncomplete!!')
結果
意外と楽でした。
図1 は実行して表示されたファイル選択ダイアログです。
図2 は『 dir.txt 』というファイルを選択した時の表示です。
図3 は『 dir.txt 』と『 dir1.txt 』いうファイルを選択した時の表示です。
コメント
グラフ出力のコードと合わせれば、アプリケーションっぽくなると思います。
これをテンプレートみたいに使いまわして、ソースコードの『 # ファイル処理プログラム 』よりも下の行に処理プログラムを入れれば、簡単にいろんなファイルの処理プログラムが作れます。
単一ファイル選択の時は下の様にファイルパスが文字列として取得できます。
In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/GUI0.0.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
C:/Users/UserName/Desktop/dir.txt
complete!!
また、複数ファイル選択の時は下の様にファイルパスが配列として取得できます。
In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/GUI0.0.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
['C:/Users/UserName/Desktop/dir1.txt', 'C:/Users/UserName/Desktop/dir.txt']
complete!!
以上
Python でパレート図を描く
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
###############################################################################
# パレート図を作成するプログラム
###############################################################################
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# グラフの値の準備 ---------------------------------------------------------------
sample_label = ["a", "b", "c", "d", "e", "f", "g"]
np.random.seed(seed=42)
sample_data = np.random.randint(0, 100, size=7)
# グラフの値の整形 ---------------------------------------------------------------
sample_df = pd.DataFrame({"label": sample_label, "data":sample_data}, columns=["label", "data"])
# グラフの値のソート ---------------------------------------------------------------
sample_df = sample_df.sort_values(by="data", ascending=False)
# グラフの値を項目毎に加算する -----------------------------------------------------
sample_df["accum"] = np.cumsum(sample_df["data"])
# 全体に対する項目の割合を計算する -------------------------------------------------
sample_df["accum_percent"] = sample_df["accum"] / sum(sample_df["data"]) * 100
# グラフの作成 ------------------------------------------------------------------
fig, ax1 = plt.subplots(figsize=(6,4))
# データ数のカウント ---------------------------------------------------------------
data_num = len(sample_df)
accum_to_plot = [0] + sample_df["accum_percent"].tolist()
percent_labels = [str(i) + "%" for i in np.arange(0, 100 + 1, 10)]
# 棒グラフのプロット ---------------------------------------------------------------
ax1.bar(range(1, data_num + 1), sample_df["data"], align="edge", width=-1, edgecolor='k')
ax1.set_xticks([0.5 + i for i in range(data_num)], minor=True)
ax1.set_xticklabels(sample_df["label"].tolist(), minor=True)
ax1.tick_params(axis="x", which="major", direction="in")
ax1.set_ylim([0, sum(sample_df["data"])])
# 横軸に名前をつける -------------------------------------------------------------
ax1.set_xlabel("label")
# 縦軸に名前をつける -------------------------------------------------------------
ax1.set_ylabel("counts")
# 第 2 軸のグラフの作成 ----------------------------------------------------------
ax2 = ax1.twinx()
# 押せ連グラフのプロット ------------------------------------------------------------
ax2.set_xticks(range(data_num + 1))
ax2.plot(range(data_num + 1), accum_to_plot, c="red", marker="o")
ax2.set_xticklabels([])
ax2.set_xlim([0,data_num])
ax2.set_ylim([0, 100])
ax2.set_yticks(np.arange(0, 100 + 1, 10))
ax2.set_yticklabels(percent_labels)
ax2.grid(True, which='both', axis='y')
# グラフタイトル設定 ---------------------------------------------------------------
ax1.set_title("PARETO_CHART")
# パーセンテージライン -------------------------------------------------------------
ax2.hlines(y=80, xmin=-1, xmax=data_num, lw=.9, color='orange', linestyle='--')
ax2.hlines(y=85, xmin=-1, xmax=data_num, lw=.9, color='orange', linestyle='--')
ax2.hlines(y=90, xmin=-1, xmax=data_num, lw=.9, color='orange', linestyle='--')
ax2.hlines(y=95, xmin=-1, xmax=data_num, lw=.9, color='orange', linestyle='--')
# グラフの保存 -------------------------------------------------------------------
plt.savefig("C:\\WinPython-64bit-3.4.4.6Qt5\\settings\\.spyder-py3\\Pareto_Chart.jpg", bbox_inches="tight")
結果
データはシード値を固定した乱数です。
棒グラフはデータが大きい順に左から並べ替えられています。
赤線は 100% 積み上げの折れ線グラフで、黄色は 80% 、 85% 、 90% 、 95% 線です。
コメント
パレート図って分析してる感じが出ますね。
全体の 80% を超えるデータなどがひと目で分かるようになりました。
以上
Python で棒グラフを描く
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析を始めたいと思ってグラフの描き方を調べ出しました。
今回は棒グラフの描き方をまとめました。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
###############################################################################
# 棒グラフを作成するプログラム
###############################################################################
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# グラフの値の準備 ---------------------------------------------------------------
sample_label = ["a", "b", "c", "d", "e", "f", "g"]
np.random.seed(seed=42)
sample_data = np.random.randint(0, 180, size=7)
# グラフの値の整形 ---------------------------------------------------------------
sample_df = pd.DataFrame({"label": sample_label, "data":sample_data}, columns=["label", "data"])
# グラフの値のソート ---------------------------------------------------------------
sample_df = sample_df.sort_values(by="data", ascending=False)
# グラフの値を項目毎に加算する -----------------------------------------------------
sample_df["accum"] = np.cumsum(sample_df["data"])
# 全体に対する項目の割合を計算する -------------------------------------------------
sample_df["accum_percent"] = sample_df["accum"] / sum(sample_df["data"]) * 100
# 全体に対する項目の割合を計算する -------------------------------------------------
fig, ax1 = plt.subplots(figsize=(6,4))
# データ数のカウント----------------------------------------------------------------
data_num = len(sample_df)
# 棒グラフの棒の設定--------------------------------------------------------------
bar = 2 # 1:棒グラフの棒幅が広い 2:棒グラフの棒幅が狭い
if bar == 1:
ax1.bar(range(1, data_num + 1), sample_df["data"], align="edge", width=-1, edgecolor='k')
ax1.set_xticks([0.5 + i for i in range(data_num)], minor=True)
else:
ax1.bar(range(1, data_num + 1), sample_df["data"], width=-0.5, edgecolor='k')
ax1.set_xticks([1 + i for i in range(data_num)], minor=True)
# 自動で割り当てられる横軸ラベルを消去------------------------------------------------
ax1.set_xticklabels([])
# 横軸ラベルに "label" を設定-----------------------------------------------------
ax1.set_xticklabels(sample_df["label"].tolist(), minor=True)
# 横軸に名前をつける
ax1.set_xlabel("label")
# 縦軸に名前をつける
ax1.set_ylabel("counts")
# グラフの保存 -------------------------------------------------------------------
plt.savefig("C:\\WinPython-64bit-3.4.4.6Qt5\\settings\\.spyder-py3\\Bar_Graph.jpg", bbox_inches="tight")
コメント
この棒グラフはランキングを整理する場合は良さそうですね。
以上
Python で折れ線グラフの足し算
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析を始めたいと思い立ち、まず最初にグラフが思い浮かびました。
かなり安易な発想ですが、こういうのは蓄積していくことが大切なので、まとめておきます。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
###############################################################################
# グラフの足し算をするプログラム
###############################################################################
import matplotlib.pyplot as plt
import numpy as np
# グラフの値の準備 ---------------------------------------------------------------
x = [100, 200, 300, 400, 500, 600]
y1 = [ 10, 20, 30, 50, 80, 130]
y2 = [ 10, 15, 30, 45, 60, 75]
# グラフの値の出力----------------------------------------------------------------
plt.plot(x, y1, marker="o", color="red", linestyle="--")
plt.plot(x, y2, marker="v", color="blue", linestyle=":")
# グラフの y1, y2 を要素毎に足す --------------------------------------------------
y11 = np.array(y1)
y22 = np.array(y2)
y = y11 + y22
# y の出力 ---------------------------------------------------------------------
plt.plot(x, y, marker="x", markersize=8, color="green", linestyle="-.")
# グラフの保存 -------------------------------------------------------------------
plt.savefig("C:\\WinPython-64bit-3.4.4.6Qt5\\settings\\.spyder-py3\\Addtition_Graph.jpg", bbox_inches="tight")
# グラフの表示 -------------------------------------------------------------------
plt.show()
# linestyle の種類
# '-' '実線'
# '--' '破線'
# '-.' '一点鎖線'
# ':' '点線'
# marker の種類
# '.' 'point'
# ',' 'pixel'
# 'o' 'circle'
# 'v' 'triangle_down'
# '^' 'triangle_up'
# '<' 'triangle_left'
# '>' 'triangle_right'
# '1' 'tri_down'
# '2' 'tri_up'
# '3' 'tri_left'
# '4' 'tri_right'
# '8' 'octagon'
# 's' 'square'
# 'p' 'pentagon'
# '*' 'star'
# 'h' 'hexagon1'
# 'H' 'hexagon2'
# '+' 'plus'
# 'x' 'x'
# 'D' 'diamond'
# 'd' 'thin_diamond'
# '|' 'vline'
# '_' 'hline'
以上
コピペで音声データの作成アプリが出来るようになる【Windows】【HTML】【JavaScript】【VBS】
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
なんのキッカケかは忘れましたが、音声データの作成をやってみたくなり、調べたところ簡単だったので、雑ですが、音声データ作成アプリっぽいものを作りました。
動作環境
・Windows 7
・HTML
・JavaScript
・VBScript
また、音声読み上げに関するランタイム、ライブラリは画像の通りです。
プログラム
speak.html ソースコード
<html>
<head>
<title>テキスト読み上げ音声ファイルメーカー</title>
<script language="javascript" type="text/javascript">
function OnLinkClickAudition() {
var txt = document.form1.msg.value;
var sh = new ActiveXObject("WScript.Shell");
sh.Exec("cmd /C wscript C:\\Users\\UserName\\Desktop\\speak\\Speak_Audition.vbs " + txt);
sh.null;
}
function OnLinkClickOutput() {
var txt = document.form1.msg.value;
var sh = new ActiveXObject("WScript.Shell");
sh.Exec("cmd /C wscript C:\\Users\\UserName\\Desktop\\speak\\Speak_Output.vbs " + txt);
sh.null;
}
</script>
<style type="text/css">
.btn-real-dent {
/*周りの凹み*/
display: inline-block;
position: relative;
text-decoration: none;
color: rgba(3, 169, 244, 0.54);
width: 100px;
height: 100px;
border-radius: 50%;
text-align: center;
background: #f7f7f7;
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.08);
}
.btn-real-dent i {
/*ボタン自体*/
position: absolute;
content: '';
width: 80px;
height: 80px;
line-height: 80px;
left: 10px;
top: 9px;
border-radius: 50%;
font-size: 30px;
background-image: linear-gradient(#e8e8e8 0%, #d6d6d6 100%);
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.66);
box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19);
border-bottom: solid 2px #b5b5b5;
}
.btn-real-dent .fa:active {
box-shadow: inset 0 1px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19);
border-bottom: solid 2px #d8d8d8;
}
.textlines {
padding: 0.5em; /* 内側の余白量 */
background-color: snow; /* 背景色 */
width: 40em; /* 横幅 */
height: 350px; /* 高さ */
font-size: 1em; /* 文字サイズ */
line-height: 1.2; /* 行の高さ */
}
</style>
</head>
<body>
<form name="form1">
<p>
<textarea name="msg" cols="30" rows="7" class="textlines"></textarea>
</p>
</form>
<a href="#" class="btn-real-dent" onClick="OnLinkClickAudition()">
<i class="fa fa-home">試聴</i>
</a>
<a href="#" class="btn-real-dent" onClick="OnLinkClickOutput()">
<i class="fa fa-home">出力</i>
</a>
</body>
</html>
Speak_Audition.vbs ソースコード
cntArgs = WScript.Arguments.Count
If cntArgs <> 1 Then
WScript.Echo "引数が" & intArgsCount & "個渡されました。" & vbCrLf _
& "指定可能な引数の数は 1 個なので処理を中止します。"
' 処理を中断
WScript.Quit
End If
arg = WScript.Arguments(0)
Set tts = WScript.CreateObject("Speech.SpVoice")
tts.Rate = 2
tts.Speak(arg)
Speak_Output.vbs ソースコード
cntArgs = WScript.Arguments.Count
If cntArgs <> 1 Then
WScript.Echo "引数が" & intArgsCount & "個渡されました。" & vbCrLf _
& "指定可能な引数の数は 1 個なので処理を中止します。"
' 処理を中断
WScript.Quit
End If
arg = WScript.Arguments(0)
Set tts = WScript.CreateObject("Speech.SpVoice")
Set stream = WScript.CreateObject("Speech.SpFileStream")
tts.Rate = 2
stream.Open "speak.wav", 3
Set tts.AudioOutputStream = stream
tts.Speak(arg)
stream.Close
コメント
使い道はあまり思いつかないですが、たった 3 つのファイルを作成するだけで音声データが作成出来ました。
以上
python で単語感情極性対応表を使った感情分析〜失敗!?〜
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
前回の記事で『単語感情極性対応表』という辞書の使い方について練習しました。
今度は実際に使ってみます。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
#-*- encoding: utf-8 -*-
from pyknp import Juman
import pandas as pd
strlen = 10
###############################################################################
# 形態素解析
###############################################################################
# 形態素分析器 juman のインスタンス作成
juman = Juman(jumanpp=False)
# 形態素解析
text = '最近、痛ましい事件や事故のニュースが多い。'
result = juman.analysis(text)
# 形態素解析結果表示 および numpy 配列作成
print('*** 形態素解析結果 ***')
print('原文'.ljust(strlen, ' ') + '原形'.ljust(strlen, ' ') + '品詞'.ljust(strlen, ' ') + '分類'.ljust(strlen, ' '))
targetwords = []
for mrph in result.mrph_list():
print(mrph.midasi.ljust(strlen, ' ') + mrph.genkei.ljust(strlen, ' ') + mrph.hinsi.ljust(strlen, ' ') + mrph.bunrui.ljust(strlen, ' '))
targetwords.append(mrph.genkei)
print()
###############################################################################
# 単語感情極性解析
###############################################################################
# 単語感情極性対応表 のパスを設定する
filepath='C:\\Users\\UserName\\Desktop\\dictionary\\pn_table.txt'
print('*** 単語感情極性対応表 ***')
print('dictionary path = ' + filepath)
print()
# pandas で読み込む
pn_table = pd.read_csv(filepath, engine='python', encoding='shift_jis', sep=':', names=('Word','Reading','POS','PN'))
# 語のリスト と PN 値のリスト の作成
word_list = list(pn_table['Word'])
pn_list = list(pn_table['PN'])
# 語をキーとした PN 値辞書の作成
pn_dict = dict(zip(word_list, pn_list))
# 単語感情極性解析
print('*** 単語感情極性解析結果 ***')
for w in targetwords:
if w in pn_dict.keys():
print(w.ljust(strlen, ' ') + str(pn_dict[w]).ljust(strlen, ' '))
else:
print(w.ljust(strlen, ' ') + '無し'.ljust(strlen, ' '))
print()
結果
In [1]: runfile('C:/WPy64-3720/settings/.spyder-py3/jumanknptest5.py', wdir='C:/WPy64-3720/settings/.spyder-py3')
*** 形態素解析結果 ***
原文 原形 品詞 分類
最近 最近 名詞 時相名詞
、 、 特殊 読点
痛ましい 痛ましい 形容詞 *
事件 事件 名詞 普通名詞
や や 助詞 接続助詞
事故 事故 名詞 普通名詞
の の 助詞 接続助詞
ニュース ニュース 名詞 普通名詞
が が 助詞 格助詞
多い 多い 形容詞 *
。 。 特殊 句点
*** 単語感情極性対応表 ***
dictionary path = C:\Users\UserName\Desktop\dictionary\pn_table.txt
*** 単語感情極性解析結果 ***
最近 -0.0125929
、 無し
痛ましい -0.997224
事件 -0.8599600000000001
や -0.278384
事故 -0.9970530000000001
の 無し
ニュース -0.391963
が 無し
多い 無し
。 無し
In [2]:
コメント
分析速度は悪くなかったと思います。
『最近』や『ニュース』がネガティブな数値を示しています。
辞書を見てみると、そんなにネガティブではない単語にネガティブな数値が与えられているモノが多数あります。
ポジティブとネガティブの閾値など、単語感情極性対応表をもっと理解する必要がありそうです。
以上