LoginSignup
0
0

More than 1 year has passed since last update.

Python3: cos類似度を計算 (Mecab わかちがき)

Last updated at Posted at 2021-11-28

次のページを参考にしました。
[文章生成]MeCabをインストールして分かち書きを試してみよう
文書のコサイン類似度を求める

mecab_wakati.py
#! /usr/bin/python
#
#   mecab_wakati.py
#
#                       Nov/28/2021
#
# ------------------------------------------------------------------
import sys
import MeCab
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# ------------------------------------------------------------------
def to_wakati_proc(sentence_list):
    tagger = MeCab.Tagger('-Owakati') 

    docs=[]
    for it in range(len(sentence_list)):
        result = tagger.parse(sentence_list[it])
#       print(it)
#       print(result)
        docs.append(result)
#
    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%以上で出現する単語は無視する
X = vectorizer.fit_transform(docs)
# print('feature_names:', vectorizer.get_feature_names())
# print('X:')
# print(X.toarray())
sim = cosine_similarity(X) # 類似度行列の作成
#

output_proc(sim)

sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------

実行結果

$ ./mecab_wakati.py 
*** 開始 ***
sim[0][1] = 0.315979
sim[0][2] = 0.425818
sim[0][3] = 0.315979
sim[0][4] = 1.000000
*** 終了 ***
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0