LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-28

次のページを参考にしました。
GiNZAを使って分かち書きをしてみた話

ginza_wakati.py
#! /usr/bin/python
#
#   ginza_wakati.py
#
#                       Nov/28/2021
#
# ------------------------------------------------------------------
import sys
import spacy

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# ------------------------------------------------------------------
def to_wakati_proc(sentence_list):
    nlp = spacy.load('ja_ginza')
    list_aa = list(nlp.pipe(sentence_list))

    docs = []
    for unit_aa in list_aa:
        unit_bb = []
        for word in unit_aa:
            unit_bb.append(str(word))
        text = ' '.join(unit_bb)
        docs.append(text)
#   print(docs) 
#
    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")
# ------------------------------------------------------------------

実行結果

$ ./ginza_wakati.py 
*** 開始 ***
sim[0][1] = 0.238241
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