ラッパーの語彙を分析するCLIツールを作った
はじめに
というのをやりたくて、まずラッパーの語彙を収集しようと作ったCLIツールがBarScanです
そのツールの紹介と実際に使って4人のアーティストの語彙を分析してみた記事です
BarScanの出力フォーマットであるWordGrainの設計思想については別記事にまとめています
BarScanの紹介
BarScanはGenius(音楽歌詞のプラットフォームサイト)からAPI経由で歌詞を取得し、自然言語処理で語彙を分析するCLIツールです
GitHub上のパブリックリポジトリで開発し、PyPIにも公開しました
インストールと基本的な使い方
# インストール
pip install barscan
# 日本語サポートのためには以下extraが必要
# pip install barscan[japanese]
# アーティストの語彙分析を実行
barscan analyze "アーティスト名"
CLIの詳細オプション(出力フォーマット・フィルタリング)
主要なオプション
# 分析する曲数を指定(デフォルト: 10曲)
barscan analyze "アーティスト名" --max-songs 20
# 表示するTop語数を変更(デフォルト: 50語)
barscan analyze "アーティスト名" --top 100
# 組み合わせ(短縮オプション: -n, -t)
barscan analyze "アーティスト名" -n 15 -t 50
出力フォーマット
# テーブル形式(デフォルト)
barscan analyze "アーティスト名"
# JSON形式
barscan analyze "アーティスト名" --format json
# WordGrain形式(語彙分析データの標準スキーマ)
barscan analyze "アーティスト名" --format wordgrain
# ファイルに保存
barscan analyze "アーティスト名" --format wordgrain --output jpthewavy.json
フィルタリング
# ストップワード除去を無効化("the", "a" 等も含める)
barscan analyze "アーティスト名" --no-stop-words
# 特定の単語を除外
barscan analyze "アーティスト名" --exclude "yeah" --exclude "oh"
出力結果
テーブルでの出力結果:
$ barscan analyze "beyonce" --top 5
Found Beyoncé with 10 songs
Artist: Beyoncé
Songs analyzed: 10
Total words: 3,001
Unique words: 839
Word Frequencies
┏━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━━━━━━┓
┃ Rank ┃ Word ┃ Count ┃ Percentage ┃
┡━━━━━━╇━━━━━━╇━━━━━━━╇━━━━━━━━━━━━┩
│ 1 │ love │ 94 │ 3.13% │
│ 2 │ like │ 94 │ 3.13% │
│ 3 │ halo │ 69 │ 2.30% │
│ 4 │ ai │ 53 │ 1.77% │
│ 5 │ slay │ 49 │ 1.63% │
└──────┴──────┴───────┴────────────┘
WordGrainでの出力結果(フォーマットの詳細は別記事を参照):
WordGrain出力例(JSON)
barscan analyze "beyonce" --format wordgrain -enhanced -c short --detect-slang -o beyonce.wg.json
{
"$schema": "https://raw.githubusercontent.com/.../wordgrain.schema.json",
"meta": {
"source": "genius",
"artist": "Beyoncé",
"generated_at": "2026-02-12T20:03:34.711344Z",
"corpus_size": 10,
"total_words": 3001,
"generator": "barscan/0.2.1",
"language": "en"
},
"grains": [
{
"word": "love",
"frequency": 94,
"frequency_normalized": 313.23,
"is_slang": false,
"contexts": ["Drunk in love, I want...", ...]
},
{ "word": "like", "frequency": 94, ... },
{ "word": "halo", "frequency": 69, ... },
// ... 以下続く
]
}
技術スタック
- Python 3.11+ - 言語
- Typer + Rich - CLIフレームワークとターミナル出力(テーブル表示、カラー出力)
- lyricsgenius - Genius APIラッパー。歌詞・アーティスト情報の取得
- NLTK - 自然言語処理(トークナイズ、レンマタイズ、ストップワード除去、POS tagging、VADER感情分析)
-
Janome - 日本語形態素解析(
pip install barscan[japanese]で追加) - Pydantic + pydantic-settings - データバリデーション・WordGrainスキーマ定義・環境変数ベースの設定管理
- Hatchling - ビルドシステム。PyPIへのパッケージ配布
- pytest + ruff + mypy - テスト・リンティング・型チェック
ラッパー4人の語彙を分析してみた
実際にBarScanで4人のラッパーの語彙を分析してみました、自分自身もよく聞く、主に日本語でラップする4人のアーティストを対象としています
分析対象
Genius上にリリックが登録されているアーティストから以下のアーティストを選定しました
| アーティスト | 選定理由 |
|---|---|
| KOHH | シンプルな言葉の繰り返しが耳に残る、ずっと聞いてた |
| Awich | 日本人femaleラッパーQueen、リリックもパフォーマンスも力強い |
| JP THE WAVY | 圧倒的にポップなスタイル、作品だけではなくファッション含めて |
| Tohji | 確固とした世界観、そんなワードある?っていうセンスがリリックで飛び出す |
語彙の豊かさ[1]
| アーティスト | 総語数 | ユニーク語数 | TTR |
|---|---|---|---|
| Awich | 7,305 | 3,060 | 0.419 |
| Tohji | 3,458 | 1,173 | 0.339 |
| JP THE WAVY | 5,518 | 1,669 | 0.303 |
| KOHH | 5,358 | 1,450 | 0.271 |
Awichが0.419で圧倒的に高く、KOHHが0.271で最も低い結果です
Awichは総語数も7,305と最多で、母数が大きいほどTTRは下がりやすいにもかかわらずこの数値は、語彙の幅が圧倒的に広いことを示しています
一方KOHHのTTRの低さは語彙の貧弱さではなくスタイルを示すものだと言えます
頻出ワードの上位を占める同じ言葉を何度も繰り返して刻み込むスタイルがそのままTTRに反映されており、
反復それ自体が表現手法であり、数値の低さがむしろスタイルの一貫性を示していると言えます
頻出語の違い
上位頻出語を見ると、4人のスタイルの差が鮮明に浮かび上がります
テーブル各項目(frequency / tfidf / sentiment)の補足
- frequency: コーパス(対象30曲)内での出現回数
-
tfidf: そのアーティストにとって「特徴的」な単語ほど高スコアになる指標です。0.0〜1.0に正規化されています
- 計算式: TF × IDF(最大値で割って正規化)
- TF(Term Frequency): コーパス全体での単語頻度 = 出現回数 / 総単語数
- IDF(Inverse Document Frequency): log(総曲数 / その単語を含む曲数)
- sentiment: VADER感情分析によるポジティブ/ネガティブ/ニュートラルの判定
KOHH — 語彙がスタイルそのもの
上位に「死ぬ」「吸う」「生きる」「dirt」「iphone」「ジュンジタカダ」、
生と死、日常、地元のリアルなどを表す言葉で構成されており、装飾的な言葉はほとんどありません
アーティスト名を伏せてリストを見ても、KOHHだと気づくことができそうです
| word | frequency | tfidf | sentiment |
|---|---|---|---|
| cbd | 119 | 1.0 | neutral |
| dirt | 84 | 0.8866 | negative |
| f**k | 71 | 0.3206 | negative |
| p***y | 66 | 0.4716 | neutral |
| 死ぬ | 65 | 0.2024 | neutral |
| ビ*チ | 64 | 0.3558 | neutral |
| tonight | 61 | 0.6438 | neutral |
| 吸う | 60 | 0.3336 | neutral |
| iphone | 59 | 0.328 | neutral |
| die | 54 | 0.3858 | negative |
Awich — 圧倒的な英語率
上位50語のうち日本語は7語(14%)、他の3人が45-50%前後なのに対して圧倒的なバイリンガル度合いです
感情分析ではPositiveとNegativeがおよそ半分ずつ含まれており、ただ「前向きに」というメッセージではなく、ネガティブな状況を逆転させるような強さをラップしていることが彼女のパワフルな楽曲スタイルにつながっているのだと考えられます
| word | frequency | tfidf | sentiment |
|---|---|---|---|
| bad | 76 | 0.5241 | negative |
| like | 59 | 0.37 | positive |
| run | 48 | 1.0 | neutral |
| get | 47 | 0.2948 | neutral |
| b***h | 46 | 0.3814 | negative |
| wax | 46 | 0.9583 | neutral |
| yeah | 45 | 0.4085 | positive |
| f**k | 44 | 0.2034 | negative |
| know | 43 | 0.2965 | neutral |
| ya | 42 | 0.4175 | neutral |
JP THE WAVY — "陽"の語彙
「仲間」57回、「いい」49回、「cool」46回、「好き」23回、「飛ぶ」27回、唯一ポジティブな語彙が上位を占めるアーティストでした
一方でf**kはわずか9回で、他の3人(71, 44, 51回)と比べて圧倒的に少ない傾向にあります
アドリブ・感嘆詞の比率が8.2%で最高なのも、彼のスタイルがデータに表れていると言えます
| word | frequency | tfidf | sentiment |
|---|---|---|---|
| ya | 113 | 1.0 | neutral |
| yeah | 102 | 0.2865 | positive |
| 見える | 68 | 0.4942 | neutral |
| wavy | 65 | 0.203 | neutral |
| yah | 64 | 0.953 | neutral |
| okay | 63 | 0.5575 | positive |
| 仲間 | 57 | 0.1432 | neutral |
| いい | 49 | 0.3561 | neutral |
| like | 48 | 0.2418 | positive |
| cool | 46 | 0.685 | positive |
Tohji — 誰とも重ならない世界観と語彙
「oreo」「godzilla」「mantle」「naked」「snowboarding」など、他のラッパーの語彙とまったく重ならない独自の単語が並びます
全体に感嘆詞が少ないものの、楽曲から感じられる雰囲気・ニュアンスが豊かなのは、感情を直接的な語彙ではなく独自のワードで置き換えているからかもしれません
「love」がたった1回というのも象徴的です
| word | frequency | tfidf | sentiment |
|---|---|---|---|
| oreo | 139 | 1.0 | neutral |
| yeah | 101 | 0.1787 | positive |
| f**k | 51 | 0.1736 | negative |
| nay | 45 | 0.3237 | neutral |
| がいす | 36 | 0.259 | neutral |
| wassa | 36 | 0.259 | neutral |
| wanna | 30 | 0.1137 | neutral |
| mantle | 29 | 0.2086 | neutral |
| godzilla | 27 | 0.1942 | neutral |
| duh | 27 | 0.1942 | neutral |
発見
Tohjiの「oreo」139回
『Oreo』の中で繰り返し出てくるワードで、全アーティスト・全単語中で最高頻度です
統計的にいうとノイズとなるデータではありますが、これも実際の楽曲とリリック、Tohjiの他作品ともあわせて見ると彼のスタイルをあらわすものに見えます
yeah/yaはノイズか、それともスタイルか
「yeah」「ya」「yah」などの感嘆詞はストップワードとして除外すべきノイズにも見えます
BarScanには特定ワードのフィルタ機能もあるので除去可能です
しかし、実際にはアーティストによって使用頻度に大きな差があり(JP THE WAVYは上位3語すべてが感嘆詞、KOHHの上位10語には1語も入らない)、フロウやアドリブの多い/少ないがそのままデータに表れているとも言えます
ノイズとして切り捨てるよりも、スタイルの指標として残しておく方が面白い結果が得られそうです
感情分析
Positive/Negative比率を出してみると以下のようになります[2]
- AwichのP/Nはほぼイーブン
- KOHHは圧倒的にNegative寄り、JP THE WAVYは真逆でPositive寄り
- Tohjiは感情語の出現率自体が最も少ない
| 指標 | KOHH | Awich | Tohji | JP THE WAVY |
|---|---|---|---|---|
| Positive語彙数 | 27 | 101 | 20 | 48 |
| Negative語彙数 | 23 | 102 | 20 | 32 |
| P/N比 | 36:64 | 45:55 | 60:40 | 76:24 |
| 感情語出現率 | 10.1% | 13.2% | 8.8% | 10.3% |
全員共通の語彙は8語のみ
Top100ワード内で4人全員が使う単語はb***h, know, uh, yeah, やる, 全部, 見る, 言うのわずか8語のみでした
4人のスタイルがいかに異なるかを端的に示していますし、英語4語・日本語4語というバランスも、日本語ラップの日英混在という側面がよくあらわれているように見えます
対象アーティストをもっと増やしてどうなるかが気になります
まとめ
BarScanで4人のラッパーの語彙を収集し分析した結果、数値データからでもアーティストごとのスタイルの違いがはっきりと浮かび上がりました
- TTR(語彙多様性) だけでも、Awichの圧倒的な語彙の広さとKOHHの反復で刻み込むスタイルが対照的に見える
- 頻出語 を並べれば、KOHHのリアル、Awichのバイリンガルな強さ、JP THE WAVYの陽のエネルギー、Tohjiの独自の世界観がそのまま表れる
- 感情分析 や 共通語彙の少なさ(Top100で全員共通はわずか8語)からも、4人それぞれのスタイルの独立性が裏付けられる
「歌詞の語彙」は単なるテキストデータですが、頻度・多様性・感情といった切り口で見ることで、アーティストのスタイルを定量的に捉えられる可能性を感じました
もともとの動機だった「ラッパーのペルソナでLLMに話させたい」という目的に対しては、BarScanの出力フォーマットであるWordGrainをプロンプトに組み込むことで、アーティスト固有の語彙や口調をLLMに渡す入口になると考えています
WordGrainを実際にLLMプロンプトに活用する部分は今まさに他のアプリケーションで実装中です
リンク集
- BarScan(GitHub)
- BarScan(PyPI)
- WordGrainの設計についての記事
- WordGrain仕様サイト
- The Largest Vocabulary in Hip Hop - The Pudding
Discussion