次のページを参考にしました。
Python, Janomeで日本語の形態素解析、分かち書き(単語分割)
janome_wakati.py
#! /usr/bin/python
#
# janome_wakati.py
#
# Nov/28/2021
#
# ------------------------------------------------------------------
import sys
from janome.tokenizer import Tokenizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# ------------------------------------------------------------------
def to_wakati_proc(sentence_list):
tk = Tokenizer()
docs=[]
for it in range(len(sentence_list)):
result = list(tk.tokenize(sentence_list[it], wakati=True))
# print(it,len(result))
# print(result)
text = ' '.join(result)
docs.append(text)
#
return docs
# ------------------------------------------------------------------
def output_proc(sim):
from_id = 0
# print('doc_id:', from_id)
for to_id in range(1,len(docs)):
print('sim[{0}][{1}] = {2:f}'.format(
from_id, to_id, sim[from_id][to_id]))
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
sentence_list = [
'昔ある所に、王様がいました。', # 文章A
'ある所に、かわいい女の子がいました。', # 文章B
'一人の王様がいました。', # 文章C
'昔ある所に、貧しい女がいました。', # 文章D
'昔、王様がある所にいました。', # 文章E
]
docs = to_wakati_proc(sentence_list)
#
vectorizer = TfidfVectorizer(max_df=0.90) # tf-idfの計算
# 文書全体の90%以上で出現する単語は無視する
try:
X = vectorizer.fit_transform(docs)
# print('feature_names:', vectorizer.get_feature_names())
# print('X:')
# print(X.toarray())
sim = cosine_similarity(X) # 類似度行列の作成
output_proc(sim)
except Exception as ee:
sys.stderr.write("*** error *** in vectorizer.fit_transform ***\n")
sys.stderr.write(str(ee) + "\n")
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
実行結果
$ ./janome_wakati.py
*** 開始 ***
sim[0][1] = 0.238241
sim[0][2] = 0.765241
sim[0][3] = 0.315979
sim[0][4] = 1.000000
*** 終了 ***