When you want to break into a conversation and add something, what would you say?
# Goodという評価が付与された発話のファイルを読み込む
f = open("../DATA02/TALL06_1.txt","r")
text = f.read()
f.close()
# ひとつの発話が1行で示されているので改行で分割してリストにする
good_text = text.split("\n")
# Poorという評価が付与された発話のファイルを読み込む
f = open("../DATA02/TALL06_0.txt","r")
text = f.read()
f.close()
# ひとつの発話が1行で示されているので改行で分割してリストにする
poor_text = text.split("\n")
# CountVectorizerでベクトル化する際にすべての単語を利用するので
# GoodとPoorを結合したリストの作成
all_text = good_text + poor_text
# CountVectorizerのimport
from sklearn.feature_extraction.text import CountVectorizer
# インスタンスの生成
vectorizer = CountVectorizer(min_df=1)
# インスタンスに単語を登録
vectorizer.fit(all_text)
# Good、Poorを個別にベクトル化
good_vec = vectorizer.transform(good_text).toarray()
poor_vec = vectorizer.transform(poor_text).toarray()
# 判定するテキストをリストに代入
new_text =["can i join your conversation","join me a conversation","let me talk","please listen to me"]
# 判定するテキストのベクトル化
new_vec = vectorizer.transform(new_text).toarray()
# numpyのimport
import numpy as np
# 出力のためのn
# 以下のfor文でカウントアップする
n = 0
# new_vecからひとつの発話ベクトルを取り出し、good_vec、
# poor_vecそれぞれですべての発話とnew_vecの発話の
# ユークリッド距離を算出し、それぞれで平均値を算出する
# 最後のif...else...はGoodとPoorでの距離の平均値を比較して
# Goodへの平均的な距離が近ければ"Good!"、そうでなければ
# "Poor!"と出力
for v in new_vec:
n += 1
G = []
for g in good_vec:
euc = np.linalg.norm(v - g)
G.append(euc)
good_average = np.average(G)
P = []
for p in poor_vec:
euc = np.linalg.norm(v - p)
P.append(euc)
poor_average = np.average(P)
if good_average < poor_average:
print(n, ":" + "Good!")
else:
print(n, ":" + "Poor!")
1 :Good! 2 :Good! 3 :Poor! 4 :Poor!