mcpField
C
coverage-check

coverage-check

github.com/serhiikorniienko生産性16051 回インストール4 週間前に更新
リポジトリ

coverage-check について

coverage-check は、ニュース検索結果の背後にある独立した情報源の数を推定するファクトチェック用スキルです。GDELT の報道データと見出しのクラスタリングにより、独自取材と転載を区別します。

主な機能

  1. 01見出しの類似度で記事を分類
  2. 02転載や通信社名入り見出しを表示
  3. 03重複 URL を集計前に統合
  4. 04報道期間と結果上限の警告を表示
  5. 05GDELT 演算子と JSON 出力に対応

活用シーン

  1. 01大量の検索結果が同じ通信社記事に由来するか確認
  2. 02ファクトチェックの根拠欄向けに情報源数を推定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/serhiikorniienko/bullshit-detector --skill coverage-check

インストール後、Claude Code で/coverage-checkを入力して読み込まれたか確認します。

同梱ファイルscripts/coverage.pyVERSION

詳細

coverage-check

URL が 10 件あっても、情報源が 10 件あるとは限りません。「多くの報道機関が取り上げた」という主張を、根拠を示せる数字に変換します。

使う場面

主張の検証中に、検索結果が山のように表示され、どれも同じ内容を伝えているため、主張が量によって裏付けられているように見える場合に使います。このパターンには、まったく異なる原因が 2 つあります。

  • 多くの報道機関がそれぞれ独自に事実を確認した → 本当に強い証拠
  • 1 件のプレスリリース、通信社の記事、または調査が 40 回転載された → 情報源は1 件

どちらの場合も検索結果は同じように見えます。このツールで違いを見分けられます。

使い方

uv run scripts/coverage.py "<query>" [--timespan 3m] [--max 250] [--sort dateasc] [--timeout 120] [--json]

処理には時間がかかりますが、これは正常です。 GDELT では、1 日分の簡単なクエリでも約 15 秒かかり、250 件のレコードを対象に 3 か月間を検索すると、さらにかなり時間がかかります。スクリプトは進捗を標準エラー出力に表示し、呼び出しにかかった時間も表示するため、「処理中」か「応答なし」かを見分けられます。クエリ実行中の行が表示されたら、そのままお待ちください。速度を上げるには --timespan を短くします。壊れていると判断する前に、--timeout を大きくしてください。

クエリでは GDELT の演算子を使用できます:"exact phrase"、(a OR b)、-exclude、domain:example.com、sourcelang:english。主張に含まれる特徴的な言い回しを引用符で囲んでください。転載記事を検出するには、原文と一致するフレーズが有効です。

# Is this "40 outlets confirmed it" or one wire story?
uv run scripts/coverage.py '"quantum breakthrough" AND university'

# Narrow to the week the claim surfaced
uv run scripts/coverage.py '"record quarterly revenue" domain:reuters.com' --timespan 7d

出力の読み方

最初の行には、検出器が必要とする判定が表示されます。それ以降の内容は、その判定を裏付ける情報です。

  • Distinct story clusters — 見出しの類似性に基づいてグループ化された記事です。情報源の起点を推定します。報道機関の数がクラスター数を大きく上回る場合は、シンジケーションが行われています。
  • クラスターに表示される ⚠️ syndicated — 複数の報道機関が 24 時間以内に同じ記事を公開しています。クラスター全体を 1 件の情報源として扱ってください。
  • クラスターに表示される wire-attributed headline — 見出しに通信社またはプレスリリース配信会社(Reuters、AP、PR Newswire…)の名前が含まれています。見出しレベルで利用できる、機械的に判定された単一起点の最も強いシグナルです。記事本文があれば、さらに多くを検出できますが、GDELT からは取得できません。
  • Duplicate URLs collapsed — トラッキングパラメーター、www.、末尾のスラッシュなどの違いによって、同じページが重複して数えられています。ほかの項目を数える前に重複は統合されるため、以下の数値はすべて重複排除済みです。
  • Span (hours) — 短時間に集中して公開されていれば、プレスリリースや報道解禁が示唆されます。数週間にわたって報道が広がっていれば、それぞれ独立した報道である可能性が高くなります。

結果は、発生元の件数としてレポートの証拠欄に記載してください。*「検索結果は 6 件、発生元は 1 件(すべて同社のプレスリリースの転載)」*という情報は、リンク 6 件を示すよりも価値があります。

制限事項 — 数値を信頼する前にお読みください

  • 対象は直近3か月の期間のみです。 GDELT DOC 2.0 はそれより古い情報を取得できません。古い主張に対しては何も返されませんが、何も返されないことは、報道されていないことを意味しません。スクリプトは出力にその旨を示します。エージェントが空の結果を反証としてひそかに扱わないようにしてください。

  • クラスタリングは見出しの類似性に基づき、言い換えられた見出しに対するシーケンス比と、同じ事実を異なる順序で伝える見出しに対するトークンの重複度という2つの指標を使います。グループ化は推移的です。同じ通信社記事を掲載した3つの報道機関は、両端の組み合わせが個別には基準値を下回っていても、同じグループになります。 完全な転載、書き直された通信社記事、順序を入れ替えた見出しは、いずれも適切に同じグループにまとめられます。

    それでも検出できないのは、2つの報道機関が独自に同じ発見に至り、まったく異なる言葉で説明した場合です。これらは別々のクラスタとして表示されます。これは誤りとしては安全な方向です。シンジケーションを捏造するのではなく、過少に報告します。

    しきい値は推測ではなく、実際の GDELT 出力を使って調整しています。誤って統合されている場合は、スクリプト内の TITLE_MATCH/TOKEN_MATCH を上げてください。通信社記事が別々のものとしてすり抜ける場合は、値を下げてください。

  • 報道されていることは、信頼できることを意味しません。 200の報道機関、30の異なるクラスタで取り上げられた主張は、広く報道されているのであって、真実であるとは限りません。判定には、検出ツールの RUBRIC.md に記載された情報源の優先順位を引き続き適用する必要があります。

  • クエリあたりの結果数は最大250件です。 上限に達すると出力にその旨が示されます。その場合、すべての件数は下限値となります。適切な対処は、数を大きくするのではなく、--timespan を絞ることです。

  • 無料のエンドポイントは不安定です。重要なのはこの点です。 GDELT は、公開 API が混雑していると、リクエストの間隔を5秒以上空けていても "Please limit requests to one every 5 seconds" を返すことがあります。これは IP、User-Agent、クエリのサイズとは無関係です。実測では、同じ呼び出しが数分の間隔で成功したり失敗したりします。スクリプトはバックオフ時間を延ばしながら再試行し、その後 3 で終了します。

    終了コード3は「未計測」を意味し、「報道なし」ではありません。 チェックに失敗しても判定を弱めたり強めたりせず、検索で何も返されなかったかのように記録しないでください。ツールが計測できない場合、レポートは発信元の件数が不明であると示し、RUBRIC.md にある目視で確認できる兆候を代わりに使います。数分後に再試行するか、スキップしてください。

    終了コード意味
    0計測成功(正当なゼロ件の期間を含む)
    1入力不正、またはホストに到達不能
    3GDELT によるレート制限 — 計測なし、主張は未計測
  • API キー不要、認証不要、無料です。 設定もローテーションも必要ありません。

対応していないこと

報道の件数を数え、グループ化します。記事本文は取得しません。その処理は fetch-content が行います。また、何かを判定することもありません。分析スキルは出力を読み取りますが、独自の判断で判定を下すためにこのツールを呼び出すことはありません。

コメント