Skip to main content

Detect frequent phrases from Japanese texts

Project description

jphrase

日本語テキストから頻出フレーズを検出

Detect frequent phrases from Japanese texts

License: MIT Python 3.7+

特徴

  • 📝 簡単に使える: シンプルなAPIで、数行のコードで実行可能
  • 🚀 高速: N-gramベースの効率的なアルゴリズム
  • 🎯 柔軟: 豊富なパラメータでカスタマイズ可能
  • 📊 多様な形式: CSV/TSV/TXT/Excel対応
  • 🔤 エンコーディング自動検出: UTF-8、Shift-JIS、EUC-JPなど自動判別
  • 💬 文字列リスト対応: ファイルだけでなく、テキストデータを直接処理可能
  • 🧪 テスト済み: 包括的なテストスイート
  • 🔍 用途: SNSトレンド分析、ニュース話題抽出、頻出キーワード発見

インストール

pip install japhrase

または開発モードでインストール:

pip install -e .

クイックスタート

まずは試してみる(ファイル不要)

from japhrase import PhraseExtracter

# デモデータですぐに試せます
df = PhraseExtracter.demo()
print(df)

ファイルから抽出

from japhrase import PhraseExtracter

# ファイルから直接抽出
df = PhraseExtracter.from_file("input.txt")
print(df)

テキストリストから抽出

from japhrase import PhraseExtracter

sentences = [
    "フォローありがとうございます",
    "フォローしてください",
    "プレゼントキャンペーン開催中"
]

extractor = PhraseExtracter()
df = extractor.get_dfphrase(sentences)
print(df)

パラメータをカスタマイズ

from japhrase import PhraseExtracter

# パラメータを指定
df = PhraseExtracter.from_file(
    "input.txt",
    min_count=10,      # 10回以上出現
    max_length=20,     # 最大20文字
    verbose=1          # 進捗表示
)

エンコーディング自動検出

from japhrase import PhraseExtracter

# encoding='auto'で自動検出(デフォルト)
df = PhraseExtracter.from_file("shift_jis_file.txt")  # 自動でShift-JISを検出

# エンコーディングを明示指定も可能
df = PhraseExtracter.from_file("input.txt", encoding="utf-8")

文字列リストから直接抽出

from japhrase import PhraseExtracter

extractor = PhraseExtracter(min_count=2)

# ファイルパスではなく、文字列リストを直接渡せる
texts = [
    "フォローありがとうございます",
    "フォローしてください",
    "プレゼントキャンペーン開催中"
]
df = extractor.extract(texts)  # ファイル不要!

複数ファイルから抽出

from japhrase import PhraseExtracter

# 複数ファイルをまとめて処理
files = ["file1.txt", "file2.txt", "file3.txt"]
df = PhraseExtracter.from_files(files, min_count=5)

結果をエクスポート

from japhrase import PhraseExtracter

extractor = PhraseExtracter()
df = extractor.extract("input.txt")

# 各種形式で出力
extractor.export_csv(df, "output.csv")      # CSV
extractor.export_json(df, "output.json")    # JSON
extractor.export_excel(df, "output.xlsx")   # Excel

主要な機能

便利なクラスメソッド

  • PhraseExtracter.from_file() - ファイルから直接抽出
  • PhraseExtracter.from_files() - 複数ファイルから抽出

インスタンスメソッド

  • extract() - ファイルからフレーズ抽出
  • get_dfphrase() - テキストリストからフレーズ抽出
  • export_csv() - CSV形式で出力
  • export_json() - JSON形式で出力
  • export_excel() - Excel形式で出力

対応ファイル形式

  • テキストファイル (.txt, .text)
  • CSV (.csv)
  • TSV (.tsv)

パラメータ

主要なパラメータ:

パラメータ デフォルト 説明
min_count 6 フレーズの最小出現回数
max_length 16 フレーズの最大文字数
min_length 4 フレーズの最小文字数
threshold_originality 0.5 類似フレーズ除去の閾値
verbose 1 進捗表示(0:非表示, 1:表示)
knowns [] 優先的に抽出したい既知語

詳細は USAGE.md を参照してください。

使用例

SNSテキスト分析

from japhrase import PhraseExtracter

extractor = PhraseExtracter(min_count=10, max_length=20)
df = extractor.extract("tweets.csv")
extractor.export_excel(df, "sns_phrases.xlsx")

複数ファイルからの専門用語抽出

from japhrase import PhraseExtracter

files = ["article1.txt", "article2.txt", "article3.txt"]
df = PhraseExtracter.from_files(
    files,
    min_count=5,
    max_length=30,
    threshold_originality=0.7
)

ワンライナー

from japhrase import PhraseExtracter

# 抽出して即座にCSV出力
extractor = PhraseExtracter()
extractor.export_csv(
    PhraseExtracter.from_file("input.txt", min_count=10),
    "output.csv"
)

プロジェクト構造

phrase-project/
├── jphrase/              # メインパッケージ
│   ├── __init__.py       # パッケージ初期化
│   ├── constants.py      # 定数定義
│   ├── patterns.py       # 正規表現パターン
│   ├── extracter.py      # メインクラス
│   ├── utils.py          # ユーティリティ関数
│   └── example.ipynb     # サンプルノートブック
├── tests/                # テストスイート
│   ├── test_constants.py
│   ├── test_patterns.py
│   ├── test_extracter.py
│   └── test_utils.py
├── requirements.txt      # 依存パッケージ
├── setup.py             # セットアップスクリプト
├── README.md            # このファイル
├── USAGE.md             # 詳細な使用ガイド
└── TESTING.md           # テストガイド

開発

テストの実行

# 開発依存関係のインストール
pip install -e ".[dev]"

# テストの実行
pytest

# カバレッジレポート付き
pytest --cov=jphrase --cov-report=html

詳細は TESTING.md を参照してください。

ドキュメント

ライセンス

MIT License

作者

Takeshi SHIMIZU

貢献

Issue や Pull Request は大歓迎です!

変更履歴

v0.1.2

  • エンコーディング自動検出: chardetライブラリを使用した自動検出機能
    • UTF-8、Shift-JIS、EUC-JP、CP932などを自動判別
    • encoding='auto'がデフォルト(明示指定も可能)
  • 文字列リスト入力対応: extract()メソッドが文字列リストを直接受け取れるように
    • ファイルパスまたはリスト/タプルを自動判別
    • ファイルを作成せずに直接テキストデータを処理可能
  • 依存関係にchardet>=4.0.0を追加
  • 包括的なテスト追加(エンコーディング検出、文字列入力対応)

v0.1.1

  • パッケージ名とモジュール名の不一致を修正
    • モジュール名をjphraseからjaphraseに変更
    • pip install japhrasefrom japhrase import で統一

v0.1.0

  • 初回リリース
  • 位置づけの明確化: 頻出フレーズ検出ツールとして定義
  • モジュール分割(constants, patterns, extracter, utils)
  • 便利なユーティリティメソッド追加
    • from_file(), from_files()
    • export_csv(), export_json(), export_excel()
  • データソースモジュール(Wikipedia, 青空文庫対応)
  • パラメータ最適化機能(教師なし/教師あり)
  • 評価モジュール(内部指標ベース)
  • 包括的なテストスイート
  • 充実したドキュメント
    • POSITIONING.md(位置づけと設計思想)
    • THEORY.md(理論的考察)
    • OPTIMIZATION.md(最適化ガイド)
    • DATA_SOURCES.md(データ取得方法)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

japhrase-0.1.2.tar.gz (478.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

japhrase-0.1.2-py3-none-any.whl (33.4 kB view details)

Uploaded Python 3

File details

Details for the file japhrase-0.1.2.tar.gz.

File metadata

  • Download URL: japhrase-0.1.2.tar.gz
  • Upload date:
  • Size: 478.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for japhrase-0.1.2.tar.gz
Algorithm Hash digest
SHA256 3f66cb0b91643dd9fe6e49c651f6276b0605d0ccb000a1a6503c6892c30dc082
MD5 33b13ef17dad9b773a25ffd820250668
BLAKE2b-256 6af1b0094a11e497a51dc60e5bead055c2835932f9c5c46c0dbb893c02300d90

See more details on using hashes here.

File details

Details for the file japhrase-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: japhrase-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 33.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for japhrase-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ad7e5433b23f10db212c4fb73b3f5bcf8a9dc2a330c4285ac043aff34e9cb863
MD5 6da3e5fc2c80fb498c8d2f44280f1d64
BLAKE2b-256 9f1f0cef874fea1363a076d47419c4f9bbaf871cfd5e5e5b7a73e42a2cc0bbfb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page