LoginSignup
14
4

More than 3 years have passed since last update.

[Python]自然言語処理ツールGiNZAを使って湯婆婆を実装してみた。

Last updated at Posted at 2020-11-30

概要

  • Qiitaの謎の湯婆婆ムーブに乗りました笑。
  • 普通にPythonで湯婆婆を実装すると、ランダムで名前一文字が選ばれます。参考

  • ランダムに名前が選ばれると、変な名前になることがあります。

    • 例:萩野千尋⇒野 とか…
  • GiNZAを使って湯婆婆を実装します。

  • GiNZAを使う理由

    • 名前同士の類似度を比較することで、一番高い類似度の名前が選ばれます。
    • フルネームと類似度が高い一文字を選ぶことで、より近い名前を湯婆婆に与えてもらえるからです。

コード

import spacy
import warnings
warnings.simplefilter('ignore')

nlp = spacy.load("ja_ginza")

print("湯婆婆:契約書だよ。そこに名前を書きな。")
full_name = input("契約書:")

print()
print("湯婆婆:フン。" + full_name + "というのかい?")

max_similarity = 0
new_name = "" # 新しい名前
for name in full_name:
    similarity = nlp(full_name).similarity(nlp(name)) # フルネームと名前の一文字の類似度を出す

    if similarity > max_similarity:
        max_similarity = similarity
        new_name = name

if max_similarity == 0:
    print("意味のわからない名前だね。")
else:
    print("湯婆婆:贅沢な名だねぇ。")
    print("湯婆婆:今からおまえの名前は" + new_name + "だ。いいかい、" + new_name + "だよ。分かったら返事をするんだ、" + new_name + "!!")


実行結果

良い例

湯婆婆:契約書だよ。そこに名前を書きな。

契約書:萩野千尋

湯婆婆:フン。萩野千尋というのかい?
湯婆婆:贅沢な名だねぇ。
湯婆婆:今からおまえの名前は千だ。いいかい、千だよ。分かったら返事をするんだ、千!!
  • 類似度の比較
萩野千尋との類似度比較
0.20879780892202868
0.15629871529551143
0.7294977215873004
0.4434461637748406
  • 「萩野千尋」と「千」の類似度が1番高いため、「千」が選ばれました。

悪い例

湯婆婆:契約書だよ。そこに名前を書きな。

契約書:湯婆婆

湯婆婆:フン。湯婆婆というのかい?
意味のわからない名前だね。

  • 類似度の比較
湯婆婆
0.0
0.0
0.0
  • 名前の中には類似度を出力できないものがあるため、類似度は0となります。

まとめ

  • GiNZAを使うことで、一番良い一文字を湯婆婆に与えてもらえる。(湯婆婆などの名前の例外あり)

参考

【初心者向け】自然言語処理ツール「GiNZA」を用いた言語解析(形態素解析からベクトル化まで)
Python 3で湯婆婆を実装してみる

14
4
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
14
4