Skip to content

bowo-prasetyo/japanese-sentiment-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

112 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Japanese Rule-Based Sentiment Analyzer

🚀 Current Version: v0.3.0(否定処理 + 強調語対応)

🌐 Demo

https://bowo-prasetyo.github.io/japanese-sentiment-analyzer/#/


🧠 概要

日本語テキストを対象にしたルールベースの感情分析ツールです。 ブラウザのみで動作し、辞書(JSON)を編集することで簡単に拡張できます。


✨ 特徴

  • 🟢 サーバ不要(100%フロントエンド)
  • 🟢 Vue 3 + Vue Router によるモダンUI
  • 🟢 JSONベース辞書でロジックとデータを分離
  • 🟢 3層モデル(単語 → 感情 → 極性)
  • 🟢 ヒット単語の可視化(Explainable AI)
  • 🟢 カテゴリ別スコア分析
  • 🟢 否定表現対応(〜ない)
  • 🟢 強調語対応(とても、めっちゃ等)
  • 🟢 GitHub Pagesでそのまま公開可能

🏗️ アーキテクチャ

3層モデル

単語 → 感情カテゴリ → 極性スコア

例:

嬉しい → 喜び → +1
ムカつく → 怒り → -1

👀 分析結果の可視化

本ツールは、単なる判定だけでなく分析過程を可視化します。

表示内容

  • 判定結果(ポジティブ / ネガティブ / 中立)
  • 総合スコア
  • ヒット数
  • ヒット単語一覧(カテゴリ・極性・変換付き)
  • カテゴリ別スコア(感情の内訳)

🧾 表示例(v0.3.0)

判定: ネガティブ
スコア: -1.5

ヒット単語:
嬉し(喜び / +1 → -1 否定 ×1.5 = -1.5)

カテゴリ別スコア:
喜び: -1.5

👉 「なぜそうなったか」だけでなく、 👉 「どう変換されたか(否定・強調)」まで分かる


📁 ディレクトリ構成

project/
 ├── index.html         # Vue UI + スタイル
 ├── app.js             # Vueアプリ本体
 ├── engine/
 │    └── analyzer.js   # 感情分析ロジック
 ├── data/
 │    └── config.json   # 感情辞書
 ├── pseudo-api/        # 擬似API
 │    ├── index.html
 │    └── api.js
 ├── README.md
 └── LICENSE

⚙️ 動作方法

方法①(推奨)

ローカルサーバを起動:

python -m http.server

ブラウザで:

http://localhost:8000

方法②

GitHub Pagesを利用(公開版): 👉 https://bowo-prasetyo.github.io/japanese-sentiment-analyzer/#/


🖥️ 使い方

  1. テキストを入力
  2. 「分析」ボタンをクリック
  3. 結果・スコア・ヒット単語・カテゴリ別スコアを確認

🔌 Pseudo API(擬似API)

ブラウザのみで動作する擬似APIを提供しています。


📍 エンドポイント(擬似)

https://bowo-prasetyo.github.io/japanese-sentiment-analyzer/pseudo-api/?text=今日は嬉しい

📤 レスポンス例

{"result":"ポジティブ","score":1,"hits":1}

⚙️ 仕組み

  • 静的HTMLをロード
  • JavaScriptが解析を実行
  • JSONを画面に出力
URL → HTML → JS実行 → JSON表示

⚠️ 注意事項

Pseudo APIは本物のAPIではありません

項目 Pseudo API 本物API
レスポンス HTML(JSでJSON表示) JSON
Content-Type text/html application/json
curl対応
JS実行 必須 不要

🚫 制限

  • POST不可
  • URL長制限あり
  • JS実行必須

🧪 利用例

const result = await page.evaluate(() => document.body.textContent);
const json = JSON.parse(result);

🧩 辞書の構造(config.json)

{
  "groups": { ... },

  "polarity": {
    "喜び": 1,
    "怒り": -1
  },

  "words": {
    "喜び": ["嬉し", "最高"],
    "怒り": ["ムカつ"]
  },

  "negations": ["ない", "なく", "なかった", "ません", "", ""],

  "intensifiers": {
    "とても": 1.5,
    "めっちゃ": 2
  }
}

🔧 カスタマイズ

単語追加

"喜び": ["", "神すぎる"]

否定語追加

"negations": ["ない", "なかった", "ません"]

強調語追加

"intensifiers": {
  "超": 2,
  "かなり": 1.3
}

🧪 現在の仕様

  • 部分一致(text.includes()
  • 語幹ベース検出(例:嬉し → 嬉しい)
  • 否定表現検出(後方ウィンドウ + includes)
  • 強調語検出(前方ウィンドウ)
  • スコア合計による判定
  • ヒット単語の可視化
  • カテゴリ別スコア集計

⚠️ 制限事項

  • 形態素解析なし
  • 複雑な否定(例:嬉しいわけではない)未対応
  • 文脈理解なし
  • 多義語・重複ヒットあり
  • 強調スコープの曖昧性あり

🚀 今後の改善

  • 否定スコープ改善(高度化)
  • 弱化表現対応(少し、ちょっと)
  • グラフ可視化
  • API化(サーバレス)
  • 精度改善(重複・優先度制御)

📜 ライセンス

MIT License


🙌 作者

Bowo Prasetyo


🙌 支援

ChatGPT