LoginSignup
4

More than 1 year has passed since last update.

posted at

updated at

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

概要

  • 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で湯婆婆を実装してみる

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
What you can do with signing up
4