LoginSignup
3
1

More than 3 years have passed since last update.

【Python】ある歌手が次出しそうな曲名を提案する

Posted at

この記事の目的

最近一人カラオケに行ったのですが、

「この歌手が次出しそうな曲名なんだろう...」

僕はふとこう思いました。

誰しもこう思ったことはあるはずです。

ということで、この記事では、

「ある歌手の出した曲名」から「似ている単語」を用いて「新しい曲名」を作る

プログラムを紹介していきます。

今回使用する言語など

  • 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)

※今回はあいみょんさんの曲名を例に使用しました。

実行結果

image.png

このように、動詞の活用に対応していないので、不自然な日本語になってしまいます。

image.png

たまに手を抜くこともあります。チェシャとはなんでしょうか...?

今後追加したい機能

  • 日本語の活用の改善
  • もっとわかりやすくする
  • 「チェシャ」とは何なのか解明する

参考文献

Mecab(形態素解析)で遊んでみた!
https://qiita.com/str32/items/c1ced3b017ff5cacc4dc

【Python】Word2Vecの使い方
https://qiita.com/kenta1984/items/93b64768494f971edf86

Word2Vecを理解する
https://qiita.com/g-k/items/69afa87c73654af49d36

3
1
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
3
1