ゆっくりムービーメーカー4ymm4のプロジェクトファイルymmpから、pythonでワードクラウドを生成する方法です。jupyter notebookで作成しました。
環境構築はこちら。
ゆっくりしていってね
動画作成
ymm4を使用して動画を編集します。しました。
この動画のプロジェクトファイルから、ワードクラウドを生成します。
セリフ抽出
ymmpファイルからセリフを抽出します。ymmpファイルはjson形式で、動画のタイムラインなど様々な情報を持っています。その中からSerifキーの値のみを抽出し、1つの文字列にまとめます。
import json
filepath = r"path\to\yukkuri.ymmp"
# ファイル読み込み
data = {}
with open(filepath, 'r', encoding='utf-8-sig') as f:
data = json.load(f)
# セリフ抽出
serif_texts = [item['Serif'] for item in data['Timelines'][0]['Items'] if 'Serif' in item]
# リストの各要素をスペースで結合して1つの文字列に
text = ' '.join(serif_texts).replace('\r\n', ' ')
print(text)
すーみそー sumiso C0DB8C だ 今回は 銅ゴーレム式アイテム仕分け機を...
セリフ抽出の処理はリスト内包表記を使用しています。for文に書き換えると以下のようになります。
serif_texts = []
for item in data['Timelines'][0]['Items']:
if 'Serif' in item:
serif_texts.append(
item['Serif']
)
形態素解析
抽出したセリフを単語ごとに分離し、名詞のみを抽出しスペースで区切った文字列を作成します。
janomeというライブラリを使用しました。
https://janome.mocobeta.dev/ja/
from janome.tokenizer import Tokenizer
tokenizer = Tokenizer("user_simpledic.csv", udic_type="simpledic", udic_enc="utf8")
words = [token.surface for token in tokenizer.tokenize(text) if token.part_of_speech.startswith('名詞')]
clean_text = ' '.join(words)
print(clean_text)
すーみそー sumiso C0DB8C 今回 銅ゴーレム 式 アイテム 仕分け 機 紹介 スタック...
user_simpledic.csvでユーザー辞書を指定しています。固有名詞を正しく分割するためです。次のような形式で記載します。
すーみそー,名詞,スーミソー
sumiso C0DB8C,名詞,スミソシーレイディービーハチシー
銅ゴーレム,名詞,ドウゴーレム
フルブロック,名詞,フルブロック
かまど,名詞,カマド
コンパレーター,名詞,コンパレーター
ワードクラウドの生成結果を確認しながら、調整していくとよいです。
ワードクラウド
ワードクラウドを作成します。wordcloudを生成し、matplotlibで描画します。
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 意味のない単語(ストップワード)を除去する。
stopWords = ['ここ','こちら','の','とき','ため','用','ところ','これ','もの','よう','バイバイ','チャンネル','登録','お願い','sumiso','C0DB8C','すーみそー']
# ワードクラウドの生成
wordcloud = WordCloud(
font_path=r"path\to\font.otf",
width=800,
height=400,
stopwords=set(stopWords),
background_color='white',
colormap='copper'
).generate(clean_text)
# 表示
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.tight_layout()
plt.show()
stopWords
ワードクラウドに表示させたくない単語を除外します。ワードクラウドを生成しながら、調整していくとよいです。
stopWords = ['チャンネル','登録','お願い','ここ','こちら','の','とき','ため','用','ところ','これ','もの','よう','バイバイ','sumiso','C0DB8C','すーみそー']
チャンネル登録お願いします
font_path
ワードクラウド生成に使用するOTFまたはTTF形式のフォントを指定します。windowsの場合、指定しないとエラーになります。
源ノ角ゴシック Code JPというフォントを利用しました。
colormap
ワードクラウドの色合いを指定します。ちょうど銅色があったので指定してみました。
カラーマップのサンプルはこちらのサイトが参考になります。
まとめ
本記事では、ゆっくりムービーメーカー4 (YMM4) のプロジェクトファイル(.ymmp)からセリフを抽出し、Pythonでワードクラウドを生成する手順を解説しました。
- セリフ抽出
JSON形式のymmpファイルからSerifキーの値を抽出 - テキスト前処理
態素解析ライブラリ Janome を適用し、名詞を抽出 - ワードクラウド生成
wordcloudライブラリとMatplotlibを使用して、名詞データからワードクラウドを生成・描画
ぜひご自身の動画でもワードクラウドを作成してみてください。
