end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

spacy , ginza for python による 形態素解析とコサイン類似度

similarity()は形態素解析での表面的?な類似度なのでしょうか、 意味的な類似度はイマイチな印象です

参考 url

https://dev.classmethod.jp/articles/try-cosine-similarity-using-ginza-and-spacy/ https://dev.classmethod.jp/articles/vectorization-in-natural-language-processing/

インストール

CONDA> pip install spacy
CONDA> pip install ginza ja_ginza ja_ginza_electra

python scriptと、その実行結果

# -*- coding: utf-8 -*-
import spacy

def main():
    nlp = spacy.load('ja_ginza') # 英語の場合、'en_core_web_sm'
    
    base_text = "Spacyによれば、今日はweatherが良いですね。"
    base_doc = nlp(base_text)           # 形態素解析
    #debug_tokenize( base_doc )
    print( base_doc )
    
    
    target_texts  = [
        "spaCyは、pythonによる自然言語処理ライブラリです。",
        "spacyによれば、weatherは天気を表す名詞です。",
        "天気予報のとおり、今日は快晴ですね。",
        "天気予報によれば、今日の天気は雨になりそうですね。" ]
    for target_text in target_texts:
        target_doc = nlp(target_text)   # 形態素解析
        print( base_doc.similarity(target_doc) ,target_doc )

    
def debug_tokenize(doc):
    for token in doc:
        #print(token.text, token.pos_, token.tag_, token.lemma_)
        print(token.i,
              token.text,
              token.vector,
              token.vector.shape )

if __name__ == '__main__':
    main()

↑こう書くと、↓こう表示されます

Spacyによれば、今日はweatherが良いですね。
0.8380004263616485 spaCyは、pythonによる自然言語処理ライブラリです。
0.9455396055865913 spacyによれば、weatherは天気を表す名詞です。
0.9211266660355326 天気予報のとおり、今日は快晴ですね。
0.9744085806711252 天気予報によれば、今日の天気は雨になりそうですね。