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