年末によく見るやつ
毎年年末になるとYouTubeやApple Musicなど様々なアプリにおいて各ユーザーの「今年のトレンド」が表示される機能ってありますよね。
YouTubeだと今年よく視聴したチャンネルとか、Apple Musicだと今年一番聴いた曲とか。
こういう自分に関するランキングを見るの結構好きなんですが、ふとLINEのトーク履歴に関しても出現単語のランキングを表示したいなと思ったわけです。
先行研究
公式ではスタンプの使用回数に関するランキングは出してくれますが、トークの単語出現数に関するランキングは出してくれないようです。
非公式だと以下のものが見つかりました。
-
istalk-トーク分析
- 相性診断のようなもので単語出現数ではなさそう
-
GTalk Statistics
- メッセージ数や単語出現回数のランキングは出る
- UIは微妙 個人開発感があって好きではある
- 期間の指定ができず今年の流行語がわからない
- 大容量メッセージを送るとエラーになり解析できない
-
会話分析くん
- おそらくLINEトーク履歴解析系アプリで最も有名
- LINEbotになっておりLINE内で完結している
- UIがかなりきれいでわかりやすい
- 期間の指定ができず今年の流行語がわからない
- 各日の総メッセージ数のカウントの上限がなぜか10
- おそらく全期間を指定しても全期間の解析はできていない(実測と異なる)
いずれの解析アプリに関しても単語のカウント方法が不明瞭で、体感と異なるランキングになることがあります。また単語の解析において通常の日本語には存在しない固有名詞やミームをカウントできないという問題点もありました。
作ったもの
というわけで、固有名詞やミームもちゃんと拾って正確に単語をカウントできるwebアプリを作りました。
使用すると以下のような形式で今年の「🏆流行語大賞」と「💬流行メッセージ」が表示されます。
流行語大賞はメッセージ内の単語を解析してカウントしたもの
流行メッセージはメッセージ全文の完全一致でカウントしたものです。
上のタブをタップすることで発言者別のランキングも見ることができます。
使い方
-
解析したいLINEのトーク履歴をテキスト形式でダウンロードします
やり方はトーク履歴の取得方法を参照
※PC版LINEは対応していません。 -
「プライバシーポリシー」を読んでチェックをつけます
-
「解析を開始する」をタップ。しばらく待ちます
※無料のサーバーを使用しているため初回のみ起動に時間がかかります。
※メッセージ1000件あたり1秒くらいかかります。

-
結果が表示されます
解析サマリには期間、総メッセージ数、参加者数が表示されます。
下にスクロールすると今年の「🏆流行語大賞」と「💬流行メッセージ」が表示されます。


単語カウント方法の仕様
単語カウント方法の仕様について説明します。
現在はこのようなルールになっていますが、今後変更があったり、設定から変更可能になる場合もあります。
より詳細(実装)を知りたい方はGitHubリポジトリをご確認ください。
形態素解析
- 単語の抽出には MeCab (形態素解析ライブラリ)を使用しています。
- 辞書はmecab-ipadic-neologd を使用しています。
- 新語・固有名詞の認識精度が高い
- 「dアニメストア」「シャニマス」などの複合語を正しく認識
- 定期的に更新される最新の辞書
- すべての品詞で表層形(ユーザーが実際に使った言葉そのまま)を使用します。
抽出対象の品詞
以下の品詞が抽出対象です。
あくまで「流行語大賞」的な観点で面白い単語を抽出することを目的としているため、汎用的・実用的・機械的な単語は除外しています。
| 品詞 | 対象細分類 | 対象例 |
|---|---|---|
| 名詞 | 非自立、代名詞、数以外全般 | 「ガンダム」「プラモデル」「東京」「ストア」「稀」 |
| 形容詞 | 非自立、接尾以外全般 | 「荒い」「美しい」「すごい」 |
| 感動詞 | すべて | 「わあ」「おお」 |
| 記号 | 絵文字 | 「😭」「😂」「🙏」 |
以下の品詞は抽出対象外です。
| 品詞 | 除外細分類・説明 | 除外例 |
|---|---|---|
| 名詞 | 非自立、代名詞、数 | 「こと」「もの」「これ」「それ」「1」「2」 |
| 形容詞 | 非自立、接尾 | 「ない」「づらい」「がたい」「っぽい」「らしい」 |
| 動詞 | すべて | 「走る」「食べる」「する」 |
| 助詞 | すべて | 「は」「が」「を」「に」「で」 |
| 助動詞 | すべて | 「です」「ます」「た」「だ」 |
| 副詞 | すべて | 「とても」「すごく」「かなり」 |
| 連体詞 | すべて | 「この」「その」「あの」 |
| 接続詞 | すべて | 「しかし」「だから」「そして」 |
| 接頭詞 | すべて | 「お」「ご」「不」 |
| 記号 | 絵文字以外 | 「!」「。」「、」 |
連続名詞の結合
固有名詞を正確にカウントするため、連続する名詞を1つの単語として結合します。
以下の細分類の名詞が連続する場合に結合されます。
| 細分類 | 説明 | 例 |
|---|---|---|
| 一般 | 一般名詞 | 「プラモデル」「アニメ」 |
| 固有名詞 | 固有名詞 | 「ガンダム」「東京」 |
| サ変接続 | サ変接続 | 「ストア」「センター」 |
| 形容動詞語幹 | 形容動詞語幹 | 「稀」 |
例:「マイティーストライクフリーダムガンダム」→「マイティー」(固有名詞)「ストライクフリーダムガンダム」(固有名詞)→ 結合 → 「マイティーストライクフリーダムガンダム」(1単語)
絵文字の扱い
絵文字の品詞統一
MeCabが絵文字を「記号」と「名詞」で交互に認識する問題を解決するため、絵文字を含む単語は全て「記号」として統一しています。
| 入力 | MeCab解析(本来) | 品詞統一後 |
|---|---|---|
| 😭😭😭 | 😭(記号)+ 😭(名詞)+ 😭(記号) | 😭(記号)+ 😭(記号)+ 😭(記号) |
連続絵文字の結合
「😭😭😭😭😭😭」などと絵文字を連打して感情を表現する人がいますが、絵文字1つ1つを1文字にカウントしていると膨大な数となってしまうため、連続する絵文字は1単語として結合します。
結合の例
| 入力 | 結合結果 |
|---|---|
| 😭😭😭 | 😭😭😭(1単語) |
| 😂😂😂😂😂 | 😂😂😂😂😂(1単語) |
| 😭😂🙏 | 😭😂🙏(1単語) |
除外単語
1文字のひらがな・カタカナ
ひらがな・カタカナの1字は相槌や感嘆詞として使われることが多く、流行語として面白みに欠けるため除外されます。
ストップワードリスト
頻出するが意味の薄い単語を除外します。
| カテゴリ | 除外単語 |
|---|---|
| 基本的な動詞・形容詞 | する、ある、いる、なる、やる、できる、出来る、いい、ない |
| 指示語 | そう、こう、ああ、どう、これ、それ、あれ、どれ、ここ、そこ、あそこ、どこ |
| 敬称 | さん、くん、君、ちゃん、様 |
| 抽象名詞 | もの、物、こと、事、ため、為、ところ、所、とき、よう、やつ、奴、人、方 |
| 時間関連 | 今日、明日、昨日、明後日、一昨日、今年、来年、去年、毎日、毎週、毎月、毎年、朝、昼、夜、今朝、今昼、今夜、午前、午後、時間、今、日、時、年、分、月、週、ヶ月 |
| 接続詞・副詞 | あと、しかし、だから、そして、でも、また、さらに、ただ、もし |
| 基本語 | 前、後、左、右、上、下、中、外、内、間、毎、回 |
| その他 | すぎる、すぎ、たち |
システムメッセージの除外
以下のメッセージは解析対象外です。
特殊メッセージ
| パターン | 例 |
|---|---|
[スタンプ] |
スタンプ送信 |
[写真] |
画像送信 |
[動画] |
動画送信 |
[ファイル] |
ファイル送信 |
[アルバム] |
アルバム作成 |
[ノート] |
ノート作成 |
[ボイスメッセージ] |
ボイスメッセージ送信 |
通話関連メッセージ
| パターン | 例(iPhone版) | 例(Android版) |
|---|---|---|
| 不在着信 | ☎ 不在着信 |
不在着信 |
| 応答なし通知 | ☎ 通話に応答がありませんでした |
通話に応答がありませんでした |
| 通話時間記録 | ☎ 通話時間 0:38 |
通話時間 2:49 |
| 通話キャンセル通知 | ☎ 通話をキャンセルしました |
通話をキャンセルしました。 |
| グループ通話開始通知 | ☎ グループ通話が開始されました。 |
グループ音声通話が開始されました。グループビデオ通話が開始されました。
|
| グループ通話終了通知 | グループ通話が終了しました。 |
グループ通話が終了しました。 |
メンバー変更メッセージ
| パターン | 例 |
|---|---|
〇〇が参加しました。 |
メンバー参加 |
〇〇が退出しました。 |
メンバー退出 |
〇〇がメンバーを追加しました。 |
メンバー追加 |
〇〇がメンバーを削除しました。 |
メンバー削除 |
URLの除外
メッセージ本文からURLが自動的に除外されます。
| 元のメッセージ | 処理後 |
|---|---|
| これ見て https://example.com すごい | これ見て すごい |
| https://example.com | (メッセージ自体が除外) |
メッセージ全文カウント方法の仕様
「ミーム」を適切にカウントするため、メッセージ全文を1つの単語として扱い、完全一致でカウントします。
| メッセージ | カウント結果 |
|---|---|
| それな | それな: 1回 |
| それな | それな: 2回 |
| それな^^ | それな^^: 1回 |
おわりに
webアプリを自分で作るのは初めてでしたが、AIと仲良くしながら3週間くらいで作れました。
個人的にやりたいことはできたので満足です。
こういう年末特有のモチベは年を越さないので、来年また気が向いたら機能の追加などしてみたいと思います。
前年とのランキングの上下が表示されるとか、単語からLLMがトーク内容の要約を出してくれるとか実装できると面白そうですね。


