8
5

More than 3 years have passed since last update.

日本人の名前の一部を対義語に変換する

Last updated at Posted at 2020-04-12

はじめに

大学生時代、ひょんなことから友達の名前の一部を対義語にして呼んでみたことがありました。

  • 西郷隆盛→東郷隆盛
  • 小野妹子→大野妹子

何回か繰り返していると、ある友達のツボにハマってしまい、笑い過ぎて身動きが取れなくなってしまいました。その友達に久しぶりに喜んでもらいたい、あとはそれを自動化できたら(?)という思いがありプログラムで実装しました。

日本人の名前の一部を対義語に変換する

データベース

LinkDataより、KeitarouNakayamaさんが公開している“漢字一文字の対義語”を利用させていただきました。380種の漢字(190対)でパブリックドメインです。

実装

関数を実装するコードは以下のようになりました。

import random
import re
import requests

JSON_URL = "http://linkdata.org/api/1/rdf1s3497i/antonym_rdf.json"
LABEL = "http://www.w3.org/2000/01/rdf-schema#label"
WORD = "http://ja.dbpedia.org/page/漢字"
ANTONYM_WORD = "https://www.wikidata.org/wiki/Property:P461"

res = requests.get(JSON_URL)
data = res.json()

antonym_data = {}
for i in data:
  if i not in antonym_data:
      antonym_data[data[i][WORD][0]["value"]] = []
  antonym_data[data[i][WORD][0]["value"]].append(data[i][ANTONYM_WORD][0]["value"])

def be_antonyms_name(pure_name):
  antonym_name = ""
  for one_kanji in pure_name: 
    if one_kanji in antonym_data:
      antonym_name += random.choice(antonym_data[one_kanji])
    else :
      antonym_name += one_kanji
  return antonym_name

実行

実行してみましょう。

names = ["織田信長", "坂本龍馬", "西郷隆盛", "源頼朝", "小野妹子"]
for name in names:
  print(be_antonyms_name(name))
織田信短
坂末龍猫
東郷隆衰
源頼夕
大野妹子

正しく(?)変換されていますね。

おわりに

是非みなさんも使ってみてください!文章などにも応用できます!

追記

8
5
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
8
5