この記事の目的
最近一人カラオケに行ったのですが、
「この歌手が次出しそうな曲名なんだろう...」
僕はふとこう思いました。
誰しもこう思ったことはあるはずです。
ということで、この記事では、
「ある歌手の出した曲名」から「似ている単語」を用いて「新しい曲名」を作る
プログラムを紹介していきます。
今回使用する言語など
- Python3
- MeCab(形態素解析)
- Word2Vec(言葉の意味合いの処理)
大まかな手順
※手順は下の参考文献に詳しく書いているのでそちらを参照してください。
1.wikipediaから全記事のデータをひっぱります
2.MeCabやWord2Vecなどをpipなどを使ってインストールします
3.コーパスの用意、モデルの作成が終わったらpythonでプログラムを書きます
(コピペでもプラグイン類があればしっかり動きます。)
main.py
import MeCab
import random
from gensim.models import KeyedVectors
mt = MeCab.Tagger('')
wv = KeyedVectors.load_word2vec_format('./wiki.vec.pt', binary=True)
word_result=""
# texts 変数は曲名を格納する配列なので自由にいじってください
texts=["裸の心","マリーゴールド","桜が降る夜は","君はロックを聞かない","愛を伝えたいだとか","今夜このまま","さよならの今日に","空の青さを知る人よ","生きていたんだよな","猫"]
text=texts[random.randint(0, len(texts)-1)]
node = mt.parseToNode(text)
while node:
fields = node.feature.split(",")
# 名詞、動詞、形容詞に限定
if fields[0] == '名詞' or fields[0] == '動詞' or fields[0] == '形容詞':
topnumber=10 # topnumberを多くするとバリエーションが増えますが精度が落ちます
results = wv.most_similar(positive=[fields[6]],topn=topnumber)
result = results[random.randint(0, topnumber-1)][0]
word_result += result
else:
word_result += fields[6]
node = node.next
print(word_result)
※今回はあいみょんさんの曲名を例に使用しました。
実行結果
このように、動詞の活用に対応していないので、不自然な日本語になってしまいます。
たまに手を抜くこともあります。チェシャとはなんでしょうか...?
今後追加したい機能
- 日本語の活用の改善
- もっとわかりやすくする
- 「チェシャ」とは何なのか解明する
参考文献
Mecab(形態素解析)で遊んでみた!
https://qiita.com/str32/items/c1ced3b017ff5cacc4dc
【Python】Word2Vecの使い方
https://qiita.com/kenta1984/items/93b64768494f971edf86
Word2Vecを理解する
https://qiita.com/g-k/items/69afa87c73654af49d36