mcpField
A
acikpoz

acikpoz

ローカル
github.com/gulmezeren2-byteビジネス・マーケティング112 週間前に更新

acikpoz について

acikpozは、トルコの公共建設工事単価カタログPDFを構造化データに変換し、積算担当者、請負業者、監査担当者を支援します。ページの配置と価格列の見出しから解析し、未記載の価格を推測で補いません。

主な機能

  1. 01カタログPDFを構造化pozデータに変換
  2. 02ページやグループで解析範囲を指定
  3. 03JSONLとCSVへの出力
  4. 04カタログ年度間の単価比較
  5. 05コード、価格、単位の品質検証
  6. 06未価格項目と解析カバレッジの報告

活用シーン

  1. 01公式カタログPDFから積算データを作成
  2. 022年度のカタログ単価変動を比較
  3. 03積算ワークフロー前に解析品質を確認
  4. 04エージェント経由でカタログを照会し構造化結果を取得

MCP 対応

オプションのMCP依存関係を導入すると、acikpozはparse_catalog、diff、validateの3ツールを提供します。MCPクライアントはカタログ解析、年度間の変更、品質検査結果を構造化データで取得できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"gulmezeren2-byte-acikpoz": {
"command": "uvx",
"args": [
"acikpoz"
]
}
}
}
起動コマンドuvx acikpoz

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiacikpoz0.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

acikpoz

PDF からデータに変換し、計算に使えるようにしたトルコの公共工事単価。

Python License: MIT

トルコの公共工事はすべて、政府のカタログに基づいて価格が決まります。ÇŞB (Çevre, Şehircilik ve İklim Değişikliği Bakanlığı)の birim fiyat(単価)冊子には、見積担当者、請負業者、監査担当者が参照する何千もの単価が掲載されています(poz とは、コード、説明、単位、価格の組です)。これらは長大な PDF 形式で提供されます。acikpoz は、そうしたページを決定論的に構造化レコードへと戻し、コスト見積もりや入札準備で、手作業で転記するのではなく、計算できるようにします。

これは言語モデルではなく、規律ある幾何学的処理です。ページ上の単語を視覚的な行にまとめ、固定位置を推測するのではなく、ページヘッダーから価格列の位置を読み取ります。この判断こそが信頼性を支えます。たとえば、Sıhhi Tesisat のように、1 行に 2 つの数値が印刷されているセクションもあります。実際の Birim Fiyat と、別項目の Montaj Bedeli です。単純なパーサーでは、気づかないうちに誤った数値を読み取ってしまいます。acikpoz はヘッダーを読み取るため、正しい列を読み取れます。

入札の 結果 を構造化する ihalent と組み合わせることで、acikpoz はトルコの公共工事経済のもう半分、つまり入札結果の基準となる 価格 を扱います。

決して破らない唯一のルール

価格として扱うのは、カタログの価格列に実際に印刷された数値だけです。型変換せず、隣の数値を借りず、推測もしません。意図的に設けたこのルールには、2 つの帰結があります。

  • グループヘッダー poz — 実際の価格を持つサブ項目のカテゴリタイトル(EVİYELER: など) — 自身の価格はありません。acikpoz はその fiyat を None のままにし、is_group_header フラグを設定します。ゼロを作り出すことはありません。
  • カタログに価格が印刷されていない poz は、欠落として表示・集計され、隠されることはありません。すべての結果で網羅状況が報告されます。価格が付いた poz、ヘッダー、実際に価格が欠落している poz の件数が分かります。

コストツールの価値の半分は、元データに印刷されていない数値を作り出さないことです。これは andon や ihalent と同じ、誠実さを重んじる姿勢です。

インストール

pip install acikpoz          # add [mcp] for the MCP server: pip install "acikpoz[mcp]"

クイックスタート

手元にある公式カタログ PDF を指定します(acikpoz に含まれるのはパーサーであり、データではありません)。

acikpoz parse bf2026.pdf --pages 8-20
acikpoz parse bf2026.pdf --json > pozes.jsonl     # one poz per line, for pipelines
acikpoz parse bf2026.pdf --csv pozes.csv          # Excel-ready (utf-8-sig, Turkish text)
acikpoz parse bf2026.pdf --group 25               # only Sıhhi Tesisat pozes
acikpoz parse bf2026.pdf --priced-only            # drop headers and gaps

表形式での表示です。モックアップではなく、公開されている 2026 年版カタログを実際に処理した結果です。

公式 2026 年版 ÇŞB カタログの 1 ページを acikpoz で解析した画面。コード、単位、価格、トルコ語の説明がある 19 件のポズが表示され、そのうち 3 件はカタログに価格が印刷されていないためダッシュになっている。下部では validate が、パーサーが確信を持てない 5 つの単位を含む 16 件の警告を報告している

この画像で重要なのは、次の 2 点です。

  • 価格欄が - の行が 3 つあります。カタログに価格が印刷されていないため、acikpoz も価格を出力しません。これらは欠落として数えられ、隣の行の価格で埋められることはありません。
  • その後、validate は解析結果のうち、確信が持てない部分にフラグを付けます。このページでは、5 つの単位(+2000、azami、Yapı、-30°C、2,5)が説明文の断片で、単位欄に入り込んでいます。レイアウトによっては抽出が不完全になるため、ツールは誤った単位を含む見た目だけ整った表を渡すのではなく、そのことを報告します。

再現するには、ページを選ぶだけです。他の条件は同じです。

acikpoz parse    bf2026.pdf --pages 400
acikpoz validate bf2026.pdf --pages 400

カタログは省庁の公式ファイルで、こちらで公開されています。画像は scripts/make_demo_svg.py によって再生成されます。このスクリプトは PDF をダウンロードし、CLI と同じコードを実行します。

グレード(excellent/good/fair/poor)は、camelot が精度を示す方法のように、ひと目で分かる信頼度の指標です。good 未満の場合は、出力を信頼する前にページを確認してください。--json では、解析ごとに price_parse_rate と grade が含まれます。

Python から使う場合:

from acikpoz import parse_catalog

result = parse_catalog("bf2026.pdf", pages=range(8, 20))
for p in result.pozes:
    if p.is_priced:
        print(p.poz_no, p.birim, p.fiyat)
print(result.to_dict()["counts"])   # priced / group_headers / price_gaps

仕組み

  1. 行。 単語は垂直位置を基準に(数ポイントの許容範囲で)視覚上の行にまとめられ、左から右へ並べ替えられます。
  2. ヘッダーを基準にした価格欄。 右側(x > 400)にある Fiyat ヘッダーの単語から、価格欄の x 座標を特定します。左欄の説明文に「fiyat」が紛れ込んでいても、価格欄と誤認されることはありません。
  3. セル。 各ポズ行では、最も左のセルがポズコードです。価格は価格欄の x 座標に最も近い数値形式のトークンで、その左隣に単位があり、残りが説明文です。インデントされた続きの行は説明文に追加されます(次の行に流れ込んだ価格が含まれる場合もあります)。
  4. グループヘッダー。 説明文が : で終わる価格なしのポズはカテゴリ名です。欠落として扱わず、フラグを付けます。

2 年分のカタログを比較する

カタログは定期的に再発行されます。積算担当者や監査担当者が手作業で確認するのは、「今年の単価は昨年からどのように変わったか」という点です。acikpoz diff を使うと、ポズコードを基準に 2 年分を結合し、各変更を分類できます。

acikpoz diff bf2025.pdf bf2026.pdf --pages 8-400
acikpoz diff bf2025.pdf bf2026.pdf --tolerance 1   # hide sub-1-TL rounding noise
acikpoz diff bf2025.pdf bf2026.pdf --json

価格の変動(Δ と %Δ)、追加・削除されたポズ、単位の変更、印刷された価格が付いた、または失われたポズに加え、その年の平均価格変動率を報告します。調査した範囲では、ÇŞB カタログの前年比較を行える他のオープンツールはありません。

解析結果を検証する

解析したカタログをコスト見積もりに使う前に、データが適切か確認しておくと役立ちます。acikpoz validate はポズに対して決定論的な品質ルールを適用します。ML も修正も行わず、問題を明らかにするだけです。

acikpoz validate bf2026.pdf --pages 8-400
acikpoz validate bf2026.pdf --json

重複したポズコード、不正な形式のコード、0 以下の価格(エラー)、および単位がない、または既知の単位セットに含まれない価格付きポズ(警告)にフラグを付けます。エラーが 1 件でもあるとゼロ以外の終了コードを返すため、パイプラインのゲートとして使えます(acikpoz validate … && build-estimate)。また、これにより acikpoz は自身の限界を率直に示せます。グループヘッダーに単位が一度だけ印刷され、各行がその単位を引き継ぐセクション(Sıhhi Tesisat)では、行ごとの単位検出が不確実です。validate はそのことを隠さずに報告します。価格、ポズコード、説明文の信頼性は保たれます。

AI エージェントでの acikpoz の使用

MCP サーバー(pip install 'acikpoz[mcp]' の後に acikpoz-mcp を実行)では、3 つのツールを利用できます。 parse_catalog(PDF → 網羅性を正直に示した構造化済みのポーズ)、diff(2 年分のカタログ → 分類済みの変更点)、validate(PDF → 品質に関する検出事項)です。エージェントは、解析が必要な文章ではなく、 構造化データを受け取ります。ihalent と組み合わせれば、エージェントは入札の結果と、その評価に使われた 単価の両方を横断して推論できます。

// e.g. Claude Desktop / Claude Code mcp config
{ "mcpServers": { "acikpoz": { "command": "acikpoz-mcp" } } }

対応範囲について、正直に

  • 標準的なカタログレイアウトを読み取ります。 見出しに基づく列検出は、一般的な 1 列および 2 列の価格ページに適切に対応します。一方、珍しいレイアウトでは、空欄が増えることがあります。その場合も、見えないように取り繕うのではなく、その旨を報告します。セクションの解析に問題があれば、サンプルを添えて報告する価値のあるバグです。
  • 価格データベースではなく、パーサーです。 カタログを同梱または再配布することはありません。公式 PDF を用意すると、acikpoz がそのコピーをデータに変換します。
  • 価格は印刷されたとおりの名目価格です。 インフレ調整は組み込まれていません。該当する年を把握したうえで、呼び出し元が分析方法を決めます。

データについて、PDF をここに置いていない理由

ÇŞB のカタログは公式の公開文書ですが、このリポジトリでは再配布していません。含まれるのはパーサーだけで、それ以外はなく、.gitignore により *.pdf は除外されています。公式の入手元から取得したカタログを acikpoz に指定してください。これは、ihalent と同じ方針です。ツールは自分で管理し、データは同梱しません。

このプロジェクトの開発方法

私は建設分野で働く産業エンジニアで、これらのカタログを読んでいます。機械学習ではなく幾何学的な手法を使い、数値を捏造するのではなく欠落を正直に示す解析アプローチを設計し、すべてのコード行をレビューしています。実装を速めるために AI エージェントを多用しており、コミットのトレーラーにもそのことが記されています。品質を保証するのはテストです。実際のページが出力する正確な単語の配置を、2 列の Sıhhi Tesisat の落とし穴やグループ見出しのルールも含めてテストに記録しています。そのため、テストがすべて成功すれば、パーサーが実際のデータを扱えていることを意味します。

関連プロジェクト

  • ihalent — トルコの公共調達を理解するための、もう一方のツールです。acikpoz は、作業の「本来の」費用を示す単価カタログを読み取り、ihalent は、落札結果とその割引率を示す入札結果通知を読み取ります。どちらも同じ方針に基づいています。すべての数値を出典まで追跡可能にし、何も捏造しません。

Eren Gülmez によるその他のツール。

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。