LoginSignup
0
0

More than 1 year has passed since last update.

Python3: cos類似度を計算 (Mecab)

Posted at

こちらと同じことを Mecab で行いました。
Python3: cos類似度を計算 (janome)

次のページを参考にしました。
PythonのMeCabで形態素解析!Tf-idfとCos類似度で文書の類似度を算出してみよう!

mecab_check.py
#! /usr/bin/python
#
#   mecab_check.py
#                   Nov/27/2021
# ------------------------------------------------------------------
import sys
import MeCab
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

# ------------------------------------------------------------------
def mplg(article):
    word_list = ""
    m=MeCab.Tagger()
    m1=m.parse(text)
    for row in m1.split("\n"):
        word =row.split("\t")[0]
        if word == "EOS":
            break
        else:
            word_list = word_list +" "+ word
    return word_list

# ------------------------------------------------------------------
def tfidf(word_list):
    docs = np.array(word_list)#Numpyの配列に変換する
    #単語を配列ベクトル化して、TF-IDFを計算する
    vecs = TfidfVectorizer(
                token_pattern=u'(?u)\\b\\w+\\b'#文字列長が 1 の単語を処理対象に含めることを意味します。
                ).fit_transform(docs)
    vecs = vecs.toarray()
    return vecs


# ------------------------------------------------------------------
def cossim(v1,v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
sentence_list = [
        '昔ある所に、王様がいました。',  # 文章A
        'ある所に、かわいい女の子がいました。',  # 文章B
        '一人の王様がいました。',  # 文章C
        '昔ある所に、貧しい女がいました。',  # 文章D
        '昔、王様がある所にいました。',  # 文章E
        ]   
word_list = []
for text in sentence_list:
    word_list.append(mplg(text))

vecs=tfidf(word_list)
print(cossim(vecs[0],vecs[1]))
print(cossim(vecs[0],vecs[2]))
print(cossim(vecs[0],vecs[3]))
print(cossim(vecs[0],vecs[4]))

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

実行結果

$ ./mecab_check.py 
*** 開始 ***
0.5274797167376858
0.47111722018067215
0.6698436999383569
1.0
*** 終了 ***
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