2023年のOssan.fmを勝手にハイライトする機構

本日のレシピはこちら。 年末にやりがちなやつです。

# 作業ディレクトリを掘って
New-Item -ItemType Directory -Path "mp3", "text", "fixed", "csv", "word", "image"

# 2023年は第222回から273回まで
for ($i = 222; $i -le 273; $i++) {
  # エピソードをダウンロードして
  Invoke-WebRequest -Uri "https://cdn.ossan.fm/audio/$i.mp3" -OutFile "mp3/$i.mp3"

  # 文字起こしして
  whisper "mp3/$i.mp3" --language ja --model large --output_dir text --output_format txt

  # 最低限の修正だけして
  (Get-Content "text/$i.txt").Replace("おっさんFM", "Ossanfm").Replace("クリス", "栗栖") > "fixed/$i.txt"

  # 形態素解析して
  python -X utf8 word.py dic/ipadic-mecab-2_7_0/system.dic.zst "fixed/$i.txt" > "csv/$i.csv"

  # 何となくそれっぽい結果になる名詞だけ取り出して
  ((
    Import-Csv -Path "csv/$i.csv" -Header "surface", "pos", "pos_detail_1", "pos_detail_2", "pos_detail_3", "conjugated_type", "conjugated_form", "basic_form", "reading", "pronunciation" |
    Where-Object { $_.pos -eq "名詞" -and $_.pos_detail_1 -ne "代名詞" -and $_.pos_detail_1 -ne "非自立" -and $_.pos_detail_1 -ne "接尾" } |
    ForEach-Object { $_.surface } |
    Out-String -Stream
  ) -join " ").Replace("ハテナ", "はてな") > "word/$i.txt"
  # 「はてな」で形態素解析にかけると感動詞に分類されちゃうのでこれだけ後で直して

  # ワードクラウドにする
  wordcloud_cli --text "word/$i.txt" --imagefile "image/$i.png" --fontfile azukiP.ttf --no_collocations --max_words 100 --width 720 --height 360
}

Whisperの精度は悪くはないけど惜しいなって感じだった。 とはいえいろいろ調整どころがあるだろうから追々で。 ここで校正を頑張った方がいいんだけどWhisper先生の今後の活躍に期待する体で今回は手抜きの構え。 多少時間はかかるけどローカルで好きなだけブン回せるのは助かる。

形態素解析は単純にこんな感じ。 ここでも辞書を換えたりユーザー辞書を作ったりした方がより番組にマッチしたワードを拾えるだろうけど。

# word.py

import sys
import vibrato
import zstandard

dic = sys.argv[1]
txt = sys.argv[2]

dctx = zstandard.ZstdDecompressor()
with open(dic, "rb") as fp:
  with dctx.stream_reader(fp) as dict_reader:
    tokenizer = vibrato.Vibrato(dict_reader.read())

with open(txt, "r") as f:
  text = f.read().strip()

tokens = tokenizer.tokenize(text)

for token in tokens:
  print(f"{token.surface()},{token.feature()}")

全部載せてもアレなので印象深いエピソードをいくつか。 一応エクスキューズを置いておくと、先の通りデータの精度はお察しなのでネタとしてお楽しみください。

224. 鹿児島旅行のおすすめポイント

230. とんかつの話をしましょう(前編) (ゲスト:kudakurageさん)

231. とんかつの話をしましょう(後編) (ゲスト:kudakurageさん)

236. Do It Yourself (ゲスト:kobakenさん)

239. 松本市での暮らしぶり (ゲスト:june29さん)

243. 2ヶ月間の南米旅行(ゲスト:セコンさん)

254. お気に入りのコンビニ

260. 5周年

263. 不機嫌なおじさん

267. おじさんの趣味マップ

272. どういう顔していいか分からないとき

273. 2023年の振り返り

掲載しなかったものも含め各回それぞれ特徴があって面白いwww 「感じ」と「人」が無駄に多いから作為的に抜いてもよかったかなとも思ったけど、それもまた味っぽそうなのでそのままで。 一通り眺めて、確かにそんな話あったなーも、そんな話あったっけもあったけどまぁ良かろう。

今年も楽しい番組ありがとうございました。 そんじゃー良いお年を。