# jphrase の位置づけと設計思想

## 📍 このツールは何をするのか

jphrase は **「頻出フレーズ検出ツール」** です。

### ✅ できること

```
日本語テキストから、頻繁に出現するフレーズを抽出する
- "フォローありがとう"
- "プレゼントキャンペーン"
- "機械学習"
- "人工知能"
```

### ❌ できないこと

```
「新語」かどうかの判定
→ 辞書との照合機能がないため、既知語も抽出される

言語学的に正しい単位の抽出
→ 形態素解析を使っていないため、真の単語境界は不明

低頻度の重要語の発見
→ 頻度ベースのため、稀な専門用語は見逃す可能性
```

---

## 🎯 設計思想

### 1. **シンプルさ重視**

**理念:**
- 外部依存を最小限に（形態素解析器不要）
- インストールが簡単
- すぐ使える

**トレードオフ:**
- 精度よりも使いやすさ
- 完璧さよりも実用性

### 2. **N-gramベース**

**選択理由:**
- 実装がシンプル
- 計算コストが低い
- 特別な知識不要

**制約:**
- 連続した文字列のみ
- 構文構造は考慮しない

### 3. **頻度ベース**

**アプローチ:**
```python
頻出する = 重要である
```

**適用場面:**
- SNSのトレンド分析 ✅
- ニュースの話題抽出 ✅
- 大量テキストの要約 ✅

**不適切な場面:**
- 学術的な専門用語抽出 ❌
- 辞書編纂 ❌
- 低頻度の新語発見 ❌

---

## 📊 他のツールとの比較

### jphrase vs 形態素解析（MeCab）

| 特徴 | jphrase | MeCab |
|------|---------|-------|
| **単語境界** | 統計的 | 辞書ベース |
| **新語対応** | 頻出なら抽出可能 | 辞書にないと分割できない |
| **インストール** | pip のみ | 辞書ファイル必要 |
| **精度** | 中 | 高 |
| **速度** | 高速 | 高速 |
| **用途** | トレンド分析 | 形態素解析全般 |

### jphrase vs 専門用語抽出（TermExtractor）

| 特徴 | jphrase | TermExtractor |
|------|---------|---------------|
| **手法** | N-gram + 頻度 | C-value |
| **理論的根拠** | 弱い | 強い（論文あり） |
| **専門用語** | 高頻度のみ | 低頻度も可 |
| **実装** | シンプル | 複雑 |
| **用途** | 一般的なフレーズ | 専門用語 |

### jphrase vs BERT（深層学習）

| 特徴 | jphrase | BERT |
|------|---------|------|
| **文脈理解** | なし | あり |
| **意味的類似性** | レーベンシュタイン距離 | 埋め込み距離 |
| **計算コスト** | 低 | 非常に高 |
| **精度** | 中 | 高 |
| **用途** | 軽量な分析 | 高精度分析 |

---

## 🎨 適切な使い方

### ✅ 推奨される使用例

#### 1. **SNSトレンド分析**
```python
# Twitterの投稿から話題のフレーズを抽出
df = PhraseExtracter.from_file("tweets.txt", min_count=10)
print("今日のトレンド:")
print(df.head(20))
```

**なぜ適切？**
- 高頻度 = 話題性が高い
- 完璧でなくても "それらしい" ものが取れればOK
- リアルタイム性重視

#### 2. **ニュース記事の話題抽出**
```python
# 今月のニュースから頻出キーワードを抽出
df = PhraseExtracter.from_files(news_files, min_count=5)
print("今月の主要トピック:")
print(df.head(30))
```

**なぜ適切？**
- ニュースは高頻度語が重要
- 固有名詞や時事用語が抽出される

#### 3. **顧客フィードバックの要約**
```python
# レビューから頻出フレーズを抽出
df = PhraseExtracter.from_file("reviews.csv", column="comment")
print("よく言及される内容:")
print(df.head(50))
```

**なぜ適切？**
- 頻繁に言及 = 重要な問題・評価
- 自由記述の要約に便利

---

### ❌ 不適切な使用例

#### 1. **辞書編纂のための新語判定**
```python
# ❌ これだけでは不十分
df = PhraseExtracter.from_file("corpus.txt")
# "これは新語です" とは言えない
```

**なぜダメ？**
- 既知語辞書との照合がない
- 時系列的な "新しさ" を判定できない
- 言語学的妥当性の検証がない

#### 2. **学術的な専門用語抽出**
```python
# ❌ 低頻度の重要語を見逃す
df = PhraseExtracter.from_file("papers.txt", min_count=10)
# 重要な専門用語が低頻度だと抽出されない
```

**なぜダメ？**
- 頻度 ≠ 専門用語の重要性
- C-valueなど専門手法が適切

#### 3. **言語学的に正しい単位の抽出**
```python
# ❌ 真の単語境界は分からない
df = PhraseExtracter.from_file("text.txt")
# "機械学習" が出ても、それが1語なのか2語なのか不明
```

**なぜダメ？**
- 形態素解析が必要
- 構文解析が必要

---

## 🔄 将来的な拡張の方向性

### Phase 1: 現在の強化（すぐできる）
- ✅ TF-IDFの導入
- ✅ 既知語辞書との照合
- ✅ より良い評価指標

### Phase 2: 機能追加（中期）
- 形態素解析との連携（オプション）
- C-value実装
- 時系列分析

### Phase 3: 高度な手法（長期）
- BERTベースの文脈考慮
- ドメイン適応
- 多言語対応

---

## 💬 よくある質問

### Q1: 「新語」を検出できますか？

**A:**
厳密には **できません**。

「頻繁に出現する新しいフレーズ」なら抽出できますが、それが本当に「新語」かどうかの判定は別途、辞書との照合が必要です。

### Q2: MeCabと一緒に使うべき？

**A:**
**用途次第です。**

- **トレンド分析**: jphrase 単体で十分
- **専門用語抽出**: MeCab併用を推奨
- **言語学的分析**: MeCabが必須

### Q3: 精度はどのくらい？

**A:**
**用途と設定によります。**

- SNSトレンド: 70-80%くらいの感覚で "それらしい" ものが出る
- 専門用語: 50%未満（不向き）
- 一般フレーズ: 60-70%

ただし、これは主観的な評価です。

### Q4: 他の言語でも使える？

**A:**
**理論上は可能ですが、推奨しません。**

- 英語: 単語境界が明確なので不要（空白で分割すればOK）
- 中国語: 使えるかもしれない
- その他: 未検証

---

## 📝 まとめ

### jphrase の正しい理解

```
jphrase は頻出フレーズ検出ツールです

✅ できること
  - 頻繁に出現するフレーズを見つける
  - SNSやニュースのトレンドを把握
  - テキストの大まかな内容を掴む

❌ できないこと
  - 「新語」であることの確定的な判定
  - 言語学的に正しい単語境界の決定
  - 低頻度の重要語の網羅的発見

🎯 適切な用途
  - トレンド分析
  - 話題抽出
  - 大量テキストの要約

🔧 補完すべきツール
  - MeCab（形態素解析）
  - 辞書（既知語判定）
  - C-value（専門用語抽出）
```

### 開発哲学

```
完璧を目指さず、実用的であれ

シンプルで、すぐ使えて、だいたい合ってる
それが jphrase の価値
```

---

## 🔗 関連ドキュメント

- [README.md](README.md) - プロジェクト概要
- [THEORY.md](THEORY.md) - 理論的考察と限界
- [USAGE.md](USAGE.md) - 使い方ガイド
- [OPTIMIZATION.md](OPTIMIZATION.md) - パラメータ最適化
