前回
https://qiita.com/kuroge/items/e4b2e08108d9ffbb254b
前回より変わったこと
プログラムを微妙に変えました。
import requests
from bs4 import BeautifulSoup
import sentencepiece as spm
import os
dic = "2000-2010"
net = range(43000,43000 + 23000)
for i in net:
kasi = ""
memory = ""
load_url = f"https://www.uta-net.com/song/{i}/"
html = requests.get(load_url)
soup = BeautifulSoup(html.content ,"html.parser")
for element in soup.find_all(id="kashi_area"):
memory = element.text
kasi += memory
path = f"{dic}/歌詞{str(i)}.txt"
if not(os.path.isfile(f"{dic}/{path}")):
with open(path,"w",encoding="utf-8")as file:
file.write(str(kasi))
print(i)
count = {}
for a in net:
path = f"{dic}/歌詞{str(a)}.txt"
if os.path.isfile(path):
with open(path, "r", encoding="utf-8")as readfile:
kasi = readfile.read()
if not(kasi == "[]" or kasi == None or kasi == ""):
TEXT = kasi
# 学習済みモデルの読み込み
sp = spm.SentencePieceProcessor()
sp.load('trained_model.model')
# 分割した結果を表示
result = sp.EncodeAsPieces(TEXT)
#result = "".join(result)
print(result)
for c in result:
if c in count:
count[c] = count[c] + 1
else:
count[c] = 1
print(a)
new_count = {}
jogen = 1000
for d in count:
if count[d] <= jogen or str(d).isascii() or len(str(d)) <= 2:
pass
else:
new_count[d] = count[d]
new_count = sorted(new_count.items(), key=lambda x:x[1])
print(new_count)
new_count = str(new_count).replace("('","").replace("',",":").replace(",","\n").replace(")","").replace("["," ").replace("]","")
with open(f"{dic}/結果 {dic}.txt","w",encoding="utf-8")as file:
file.write(new_count)
変更点
1 歌詞のtxtデータをフォルダー分けした
2 同じ数値が出る場合は変数に格納
あと色々追加されたので、見ていってね
作詞をしてみた
作詞手順
1 歌詞データを一つのtxtデータに集める
2 それをAIに学習させる
3 AIに歌詞をある程度出させる
4 最後は人の目で不適切性がないか確認して、いい歌詞だけ別txtに保存
細かい手順
1 歌詞データを一つのtxtデータに集める
これはある程度分かる思いますが、一応コードを載せておきます
import os
dic = "2000-2010"
net = range(43000, 43000 + 23000)
text = ""
for a in net:
path = f"{dic}/歌詞{str(a)}.txt"
if os.path.isfile(path):
try:
with open(path, "r", encoding="utf-8")as f:
text += f.read()
except Exception:
pass
else:
pass
print(a)
text = text.replace(" ", "\n")
with open("結果メモ.txt","w", encoding="utf-8")as f2:
f2.write(text)
これで大まかに歌詞を一つのファイルに入れておきます。
2 それをAIに学習させる & 3 AIに歌詞をある程度出させる
今回は、「markovify」というモジュールを使いました。
pip install markovify
または
python3 -m pip install markovify
とりあえずコードを見せておきます
import markovify
# Get raw text as string.
with open("結果メモ.txt", "r", encoding="utf-8") as f:
text = f.read()
# Build the model.
text_model = markovify.NewlineText(text, state_size=4)
# Print five randomly-generated sentences
count = 0
while(1):
sentence = text_model.make_sentence(tries=1000)
if not(sentence == None) and len(sentence) >= 200:
with open("歌詞メモ.txt","a+",encoding="utf-8")as sf:
sf.write(f"{sentence}\n\n")
count = count + 1
if count >= 10:
break
200文字以上の歌詞を10個生成します。
なお、時々None
と出てしまうため、それを弾くようにもしています。
4 最後は人の目で不適切性がないか確認して、いい歌詞だけ別txtに保存
そのまんまです(
やっぱり最後は人の目が一番良いです。
あとは、歌詞を改行して、見やすくします。
こんな作業をして、作られた歌詞がこちらです。
作詞 / AI
倖せだから
汗ばむ身体はずむ息
この神聖な熱いコートで意識と爪を研ぎ澄まし
遥かな場所へと羽ばたけ絶望に心震わせ
叫ぶ魂
抑えられぬまま許せずに全て壊した
ゼロから始めよう
さあ進め
今!築き上げろ
俺たちのHistory
戻る場所など
どこにもないさ見えるだろう
明日へ続く
Victory Road
この瞬間を抱きしめて越えて行こう
俺たちのDestiny
振り返らず
ただ先を見つめひとりじゃない
明日へ続く
Victory Road
この思い抱きしめて
Take you…
Together!
追いかけよう…
過ぎて行く季節を何度も
追いかけて時に埋もれ
いつか君は瞳を閉ざした
かじかんだ心をあたためてあげるよ
どんな夜も忘れないで僕等は
いつでも一緒さあの風の中で永遠を浴びて
生まれ変わる
小さな鳥のように
僕等の想いも
いつかよみがえる フェニックス
今
なかなか良いんじゃないですか?
AIも捨てたもんじゃないですね
これで作曲もできたらなぁ(
まとめ
なかなかいい歌詞が作れました。
まだまだ、この企画は続けるので、お楽しみに!
ご視聴ありがとうございました!