API Documentation

パターンマッチ認識器

正規表現パターンによる高速な認識器です。社員番号、契約番号、注文番号など、 フォーマットが明確に決まっている識別子の検出に最適です。

✅ こんな場面に最適
  • 社員番号(EMP-123456)
  • 契約番号(CNT-2024-A001)
  • 注文番号(ORD-2024-00001)
  • 自社独自のID体系

特徴

極めて高速

正規表現エンジンによる高速マッチング。大量テキストでも数ミリ秒オーダーで処理。

🎯
高精度

厳密なパターン定義により、誤検出を最小化。チェックサム検証も可能。

🔧
即時反映

API経由でサービス無停止のまま追加・更新・削除。次のリクエストから即時反映。

追加できるエンティティの例

タイプ例 説明 パターン例
JPII_EMPLOYEE_ID 社員番号 EMP-123456、E12345
JPII_CUSTOMER_ID 顧客ID CUS-12345-01、C123456
JPII_ORDER_NUMBER 注文番号 ORD-2024-00001
JPII_CONTRACT_ID 契約番号 CNT-2024-A001
JPII_PROJECT_CODE プロジェクトコード PRJ-ABC-001
JPII_MEMBER_ID 会員番号 M-12345678
JPII_PATIENT_ID 患者ID PT-000001
JPII_INVOICE_NUMBER 請求書番号 INV-2024-001234

基本的な使い方

認識器の登録

bash
# ETag取得
ETAG=$(curl -s -I https://api.pii-fi.com/api/policy/active \
  -H "Authorization: Bearer YOUR_API_KEY" | grep -i etag | awk '{print $2}' | tr -d '\r')

# 社員番号認識器を登録
curl -X POST https://api.pii-fi.com/api/policy/recognizers \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "If-Match: $ETAG" \
  -d '{
    "id": "rec.employee_id",
    "name": "社員番号認識器",
    "entity_type": "JPII_EMPLOYEE_ID",
    "pattern": "EMP-\\d{6}",
    "priority": 90
  }'

Pythonでの使用例

python
import requests

class PatternRecognizerManager:
    # base_url: デモ環境(本番環境では専用エンドポイントを提供)
    def __init__(self, api_key, base_url="https://api.pii-fi.com/api"):
        self.api_key = api_key
        self.base_url = base_url
        self.headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {api_key}"
        }

    def _get_etag(self):
        """アクティブポリシーからETagを取得"""
        response = requests.get(
            f"{self.base_url}/policy/active",
            headers=self.headers
        )
        response.raise_for_status()
        return response.headers.get("ETag")

    def add_recognizer(self, recognizer_config):
        """認識器を追加(ETag必須)"""
        etag = self._get_etag()
        headers = {**self.headers, "If-Match": etag}
        response = requests.post(
            f"{self.base_url}/policy/recognizers",
            headers=headers,
            json=recognizer_config
        )
        response.raise_for_status()
        return response.json()

    def list_recognizers(self):
        """認識器一覧を取得"""
        response = requests.get(
            f"{self.base_url}/policy/recognizers",
            headers=self.headers
        )
        response.raise_for_status()
        return response.json()

    def delete_recognizer(self, recognizer_id):
        """認識器を削除(ETag必須)"""
        etag = self._get_etag()
        headers = {**self.headers, "If-Match": etag}
        response = requests.delete(
            f"{self.base_url}/policy/recognizers/{recognizer_id}",
            headers=headers
        )
        response.raise_for_status()
        return response.json()


# === 使用例 ===
manager = PatternRecognizerManager("YOUR_API_KEY")

# 社員番号認識器を追加
manager.add_recognizer({
    "id": "rec.employee_id",
    "name": "社員番号認識器",
    "entity_type": "JPII_EMPLOYEE_ID",
    "pattern": r"EMP-\d{6}",
    "priority": 90
})

# 契約番号認識器を追加
manager.add_recognizer({
    "id": "rec.contract_id",
    "name": "契約番号認識器",
    "entity_type": "JPII_CONTRACT_ID",
    "pattern": r"CNT-\d{4}-[A-Z]\d{3}",
    "priority": 85
})

# 認識器一覧を確認
recognizers = manager.list_recognizers()
for rec in recognizers.get("recognizers", []):
    print(f"- {rec['name']}: {rec['pattern']}")

設定パラメータ

パラメータ 必須 説明
id Required 認識器の一意ID(例: rec.employee_id
name Required 認識器の名前
entity_type Required 検出時に割り当てるエンティティタイプ
pattern Required 正規表現パターン(Python互換)
priority Optional 優先度(default: 80)。高いほど優先
context_words Optional 周辺に存在すべきキーワード(精度向上用)
score Optional 検出時の信頼度スコア(default: 0.85)

高度な設定

コンテキストワードによる精度向上

context_wordsを設定すると、パターンマッチに加えて周辺のキーワードも確認し、 誤検出を減らせます。

json
{
  "id": "rec.employee_id",
  "name": "社員番号認識器",
  "entity_type": "JPII_EMPLOYEE_ID",
  "pattern": "EMP-\\d{6}",
  "context_words": ["社員", "担当者", "連絡先", "従業員"],
  "priority": 90
}

複数パターンの登録

同じエンティティタイプに対して複数の認識器を登録できます。

python
# 同じエンティティタイプで複数パターン
patterns = [
    {"id": "rec.emp_v1", "pattern": r"EMP-\d{6}", "name": "社員番号(新形式)"},
    {"id": "rec.emp_v2", "pattern": r"E\d{5}", "name": "社員番号(旧形式)"},
    {"id": "rec.emp_v3", "pattern": r"社員[##]\d+", "name": "社員番号(日本語形式)"},
]

for p in patterns:
    manager.add_recognizer({
        **p,
        "entity_type": "JPII_EMPLOYEE_ID",
        "priority": 90
    })

ベストプラクティス

💡 推奨事項
  • IDの命名規則: rec.プレフィックスで統一すると管理しやすい
  • 優先度の設計: 禁止ワードは100、業務ID系は80-90、一般パターンは70程度
  • テスト: 本番投入前に検出APIでパターンの動作を確認
  • 正規表現のエスケープ: JSONではバックスラッシュを二重にする必要あり

API Reference

パターンマッチ認識器の詳細なAPI仕様は以下を参照してください。