はじめに
大学生時代、ひょんなことから友達の名前の一部を対義語にして呼んでみたことがありました。
- 西郷隆盛→東郷隆盛
- 小野妹子→大野妹子
何回か繰り返していると、ある友達のツボにハマってしまい、笑い過ぎて身動きが取れなくなってしまいました。その友達に久しぶりに喜んでもらいたい、あとはそれを自動化できたら(?)という思いがありプログラムで実装しました。
日本人の名前の一部を対義語に変換する
データベース
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))
織田信短
坂末龍猫
東郷隆衰
源頼夕
大野妹子
正しく(?)変換されていますね。
おわりに
是非みなさんも使ってみてください!文章などにも応用できます!
追記
-
2020年04月16日に更新されたPython記事まとめ(毎日自動更新)、いいねが多い最近の記事として紹介していただきました。
-
2020年04月16日に更新された【Python】Qiita 週間いいね数ランキング【自動更新】、04月09日 ~ 04月16日を集計期間としたランキング内で、22位として紹介していただきました。