Phrasify は、英語の長文 transcript から「実務でそのまま使える英語表現カード」を抽出する CLI ツールです。
主な読者・利用者は日本語ネイティブのビジネスパーソンです。特に VC、startup、finance、MBA、などのビジネスシーンの文脈で、単語ではなく「発話で再利用できる表現の塊」を集めることを目的にしています。
Phrasify is a Japanese-first CLI that turns English transcripts into reusable business expression cards. It is designed for learners who want to turn podcasts, interviews, and startup/VC content into JSONL or CSV learning assets.
30 秒で試す
git clone https://github.com/<your-org>/phrasify.git
cd phrasify
python3 -m venv .venv
.venv/bin/pip install -e .
phrasify extract examples/sample_transcript.md --dry-run
phrasify export examples/sample_output.jsonl --format csv読み込み・整形・CSV / JSONL export などの基本処理には必須の外部依存はありません。LLM 抽出を実行する場合だけ、使う provider の SDK を入れてください。
git clone https://github.com/<your-org>/phrasify.git
cd phrasify
python3 -m venv .venv
.venv/bin/pip install -e '.[anthropic]'
# or: .venv/bin/pip install -e '.[openai]'未インストールのまま開発実行する場合は、PYTHONPATH=src を付けます。
ANTHROPIC_API_KEY または OPENAI_API_KEY は .env に置きます。
cp .env.example .env既定モデルは provider ごとに設定されています。明示したい場合は --model を使うか、PHRASIFY_ANTHROPIC_MODEL / PHRASIFY_OPENAI_MODEL を .env に置いてください。
loader / chunker だけ確認する dry-run:
PYTHONPATH=src python -m phrasify extract /path/to/transcript.md --dry-run英語表現カードを JSONL で抽出:
PYTHONPATH=src python -m phrasify extract /path/to/transcript.md \
--provider anthropic \
--max-expressions 30Notion MCP handoff 用 JSON も同時に作る:
PYTHONPATH=src python -m phrasify extract /path/to/transcript.md --notion-handoff既存の JSONL 出力を CSV に変換:
PYTHONPATH=src python -m phrasify export outputs/example_20260503.jsonl --format csv複数 JSONL を横断集約し、正規化した expression で dedup:
PYTHONPATH=src python -m phrasify aggregateaggregate は expression を小文字化し、空白と末尾の句読点を正規化して重複判定します。複数ファイルに同じ expression が出た場合は frequency と source_ids に集約され、最新の record が代表メタデータとして使われます。
| option | 説明 |
|---|---|
--provider |
anthropic / openai を選択 |
--model |
provider の model 名を明示 |
--output-dir |
生成物の保存先。既定は実行ディレクトリの outputs/ |
--max-expressions |
抽出する最大 expression 数 |
--chunk-max-chars |
1 chunk あたりの最大文字数 |
--min-native-reusable-score |
native reusable score が低いカードを除外 |
--max-too-basic |
基礎的すぎるカードを除外する上限 |
--max-too-context-specific |
文脈依存すぎるカードを除外する上限 |
--no-nlp-hints |
NLP 候補ヒントを LLM に渡さない |
--format |
jsonl / json / csv |
--notion-handoff |
Notion MCP handoff JSON を生成 |
--notion-database-id |
handoff payload に database ID を含める |
--notion-data-source-id |
handoff payload に data source ID を含める |
PYTHONPATH=src python -m phrasify extract examples/sample_transcript.md --dry-run
PYTHONPATH=src python -m phrasify export examples/sample_output.jsonl --format csvPhrasify は CLI として直接使えるだけでなく、Claude Code や Codex などの coding agent から呼び出しやすいように skills/phrasify/SKILL.md を同梱しています。skill を登録すると、agent は Phrasify の安全な実行手順を読んだうえで、transcript の dry-run、LLM 抽出、CSV export、Notion handoff 生成を進められます。
Codex の user skill として使う場合:
mkdir -p ~/.codex/skills
cp -R skills/phrasify ~/.codex/skills/その後、Codex のセッションで次のように依頼します。
$phrasify を使って、この transcript から英語表現カードを抽出してください。
入力: /path/to/transcript.md
出力は JSONL と CSV の両方でお願いします。
Codex が repo 内で作業している場合は、Phrasify の repository root、または既に phrasify が入っている environment を見つけ、まず phrasify extract ... --dry-run で loader / chunking を確認してから、本抽出に進む想定です。
Claude Code の user skill として使う場合:
mkdir -p ~/.claude/skills
cp -R skills/phrasify ~/.claude/skills/Claude Code では、以下のように明示的に skill 名を含めると意図が伝わりやすくなります。
$phrasify を使って、/path/to/transcript.md から実務英語表現を抽出してください。
まず dry-run で入力を確認し、問題なければ JSONL を作って、最後に CSV に変換してください。
プロジェクトで共有したい場合は、リポジトリ内に skills/phrasify/ を置いたままにして、README や agent 用の project instructions から参照させる運用が向いています。ユーザー個人の全プロジェクトで使いたい場合だけ、~/.claude/skills や ~/.codex/skills にコピーしてください。
.envや API key を表示しないextractは transcript chunk を選択した LLM provider に送るexportとaggregateはローカルファイルだけを処理する- まず dry-run で loader / chunking を確認する
outputs/の生成物は原則 git commit しない- Notion ID は user が明示した場合だけ使い、コードや docs に固定値を書かない
$phrasify でこの Markdown から表現カードを抽出して、CSV も作ってください。
$phrasify で outputs/example.jsonl を Notion handoff JSON に変換してください。
Notion target ID はまだ入れないでください。
$phrasify の抽出結果を確認して、expression_in_source が false のカードを優先レビュー候補としてまとめてください。
.md.txt.srt.vtt
デフォルトでは以下の JSONL を作ります。
outputs/<transcript>_<YYYYMMDD>.jsonl
必要に応じて CSV や Notion handoff JSON も生成できます。
{
"seq": 1,
"expression": "double down on",
"original_sentence": "We should double down on founder-led sales.",
"jp_translation": "創業者主導の営業にさらに注力すべきです。",
"nuance": "確信を持って追加投資・集中するニュアンス。",
"usage": "戦略、投資判断、営業・市場選択の文脈で使う。",
"pattern": "double down on + noun",
"reusable_examples": [
"We should double down on enterprise customers before expanding internationally."
],
"tags": ["collocation", "strategy"],
"source": {
"file": "examples/sample_transcript.md",
"chunk_id": "sample_transcript-001"
},
"scores": {
"usefulness": 0.9,
"reusability": 0.9,
"executive_naturalness": 0.86,
"silicon_valley_fit": 0.92,
"mba_interview_fit": 0.72,
"japanese_speaker_lift": 0.88,
"too_basic": 0.12,
"too_context_specific": 0.08,
"native_reusable_score": 0.78,
"source_confidence": 0.95
},
"review_status": "New",
"expression_in_source": true,
"original_sentence_in_source": true
}expression_in_source:expressionが transcript chunk 内に文字列として存在するかoriginal_sentence_in_source:original_sentenceが transcript chunk 内に存在するかnative_reusable_score: 他の場面で再利用でき、自然なビジネス英語として使える度合いjapanese_speaker_lift: 日本語話者が「単語は知っているが、とっさに自然に出せない」発話フレームとして学ぶ価値too_basic: B2+ 学習者には基礎的すぎる可能性too_context_specific: transcript 固有の事実に閉じすぎている可能性
LLM は学習しやすい形に正規化することがあるため、expression_in_source は false になる場合があります。原文 grounding を重視する場合は、この値を review queue の優先度付けに使います。native_reusable_score は reusability、executive_naturalness、silicon_valley_fit、mba_interview_fit、japanese_speaker_lift から加点し、too_basic と too_context_specific を減点して Phrasify 側で計算します。
extract を実行すると、入力 transcript の本文が指定した LLM provider(Anthropic または OpenAI)に送信されます。API key はローカルの environment variable から読み、Phrasify は key を出力ファイルに保存しません。
生成物はデフォルトで outputs/ に保存されます。outputs/ は .gitignore されているため、.gitkeep 以外の生成物は git 管理外です。
Notion 連携は直接書き込みではなく、MCP handoff 用 JSON を生成するだけです。Notion target metadata を入れたい場合は --notion-database-id / --notion-data-source-id、または PHRASIFY_NOTION_DATABASE_ID / PHRASIFY_NOTION_DATA_SOURCE_ID を使います。
現時点では CSV export を使って取り込めます。将来的には --format anki-csv を追加する想定です。
extract では、選択した LLM provider に transcript chunk を送ります。export と aggregate はローカルファイルだけを処理します。
技術的には使えますが、現状の prompt と README は日本語ネイティブ向けに最適化しています。
src/phrasify/: 本体コードsrc/phrasify/prompts/extract.md: 抽出プロンプトtests/: 標準ライブラリunittestによるテストoutputs/: ローカル生成物(JSONL / CSV / Notion handoff)。.gitkeep以外は git 管理外
PYTHONPATH=src python -m unittest discover -s tests -vLLM API を叩かない処理は stdlib unittest で検証します。provider SDK は必要なものだけ optional dependency として入れます。
spaCy を入れると、noun chunks / verb phrases / discourse markers を候補ヒントとして LLM に渡し、lemma-based source grounding や too_basic / too_context_specific の補助判定にも使います。
.venv/bin/pip install -e '.[nlp]'
python -m spacy download en_core_web_smspaCy や model が入っていない場合も、Phrasify は regex fallback で基本的な発話フレーム候補を抽出します。
