# 関数
# 小数点以下を切り捨てる関数は
a = 2.5
round(a)
# 命令文と考えたら、roundが命令(動詞)で()内に目的語を書く感じ。
# 「aの小数点以下を切り捨てろ」みたいな。
# ()内に「目的語」の後ろに「どうやって」を表す副詞みたいな表現が入るときもある。
# メソッド
# 関数と同じ命令だけど、「文法」が少し違う」
# 大文字を小文字にするメソッドは
a = "I LOVE YOU MORE THAN ANYTHING IN THE WORLD."
a.lower()
# .(ドット)の前が「目的語」でその後ろに命令(動詞)を書く。
# ()の中に「どうやって」を表す副詞みたいな表現が入るときもある。
# numpyをnpという名前でimportする(これでnumpy以下の関数はすべて使える)
import numpy as np
# とするとnp.xxでnumpyの関数が使えるようになる
np.sqrt(2)
# 特定の関数をimportするとき
from numpy.random import *
# 乱数の発生
L = rand(100)
# import numpy as npと書いてたら
# L = np.random.rand(100)
# 関数の書き方
def func1(x):
return x +12
# 関数の呼び出し
func1(111)
# この関数をmodule1.pyとして保存すると
from module1 import func_plus
func_plus(2)
class myfirstclass:
def __init__(self):
self.name = ""
def getName(self):
return self.name
def setName(self,name):
self.name = name
classA = myfirstclass() #インスタンスの生成と言います。これでこのクラスのメソッドが使用できるようになります。
classA.setName("Saionji") #setName()を呼び出して引数をセット
classA.getName() # getName()を呼び出す
# 例文
a = "I walk to school"
b = "I walked to school"
c = "Yesterday I walked to school"
d = "I walked to school yesterday"
# 文を単語のリストへ
from nltk import word_tokenize
aw = word_tokenize(a)
bw = word_tokenize(b)
cw = word_tokenize(c)
dw = word_tokenize(d)
# 編集距離の算出
from nltk.metrics.distance import edit_distance
edit_distance(aw,bw)
L = [aw,bw,cw,dw]
P = []
for i in L:
M = []
for j in L:
M.append(edit_distance(i,j))
P.append(M)
print(P)
# データフレームにしてみた。
import pandas as pd
df1 = pd.DataFrame({"a":P[0],"b":P[1],"c":P[2],"d":P[3]},index=["a","b","c","d"])
df1
表1
単語 | 文a | 文b | 文c | 文d |
---|---|---|---|---|
school | 1 | 1 | 1 | 1 |
to | 1 | 1 | 1 | 1 |
walk | 1 | 0 | 0 | 0 |
walked | 0 | 1 | 1 | 1 |
yesterday | 0 | 0 | 1 | 1 |
# 対象となる文をリストに格納する。
L = [a,b,c,d]
# sklearnのクラスのインポート
from sklearn.feature_extraction.text import CountVectorizer
# インスタンスの作成
vectorizer = CountVectorizer(min_df=1)
# カウントする単語を登録
vectorizer.fit(L)
# 文のベクトル表現を算出 (Compressed Sparse Row)
X = vectorizer.transform(L)
# 行列の出力(表とは行と列が入れ替わっている)
X.toarray()
# 表1と同じにしたかったら
X.toarray().transpose()
# 新たな文を同じ方法でベクトル化する
M = ["I yesterday walked to school"]
X2 = vectorizer.transform(M).toarray()
X2
L = [a,b,c,d]
bigram_vectorizer = CountVectorizer(min_df=1,ngram_range=(2,2))
bigram_vectorizer.fit(L)
X_b = bigram_vectorizer.transform(L).toarray()
X_b
# bigramのリスト
bigram_vectorizer.get_feature_names()
点pと点qの距離は以下の式で求められる。 $$ d(p,q) = \sqrt{(q_1-p_1)^2 + (q_2-p_2)^2 + ... + (q_n -p_n)^2} \\ = \sqrt{\sum_{i=1}^n(q_i - p_i)^2} $$
表1の場合、文が5つの単語で表現されているので、
# X.toarray()を代入
X_a = X.toarray()
# numpyのインポート
import numpy as np
# ユークリッド距離を求める
np.linalg.norm(X_a[2] - X_a[3])
X_euc = []
for i in X_a:
x = []
for j in X_a:
x.append(np.linalg.norm(i - j))
X_euc.append(x)
X_euc
# 2桁のみ表示
pd.options.display.precision = 2
# データフレームしてみた。
df2 = pd.DataFrame({"a":X_euc[0],"b":X_euc[1],"c":X_euc[2],"d":X_euc[3]},index=["a","b","c","d"])
df2
# scipyのインポート
import scipy.spatial.distance as dis
# コサイン類似度
dis.cosine(X_a[2],X_a[3])
# すべての文のコサイン類似度
X_cos = []
for i in X_a:
x = []
for j in X_a:
x.append(dis.cosine(i,j))
X_cos.append(x)
X_cos
# データフレームにしてみた。
df3 = pd.DataFrame({"a":X_cos[0],"b":X_cos[1],"c":X_cos[2],"d":X_cos[3]},index=["a","b","c","d"])
df3
When you want to break into a conversation and add something, what would you say?