Skip to content

Limitations

jev-pii-checker is effective for finding PII but cannot handle every scenario. Know what it cannot do.

Cannot Distinguish Public Figures

jev-pii-checker treats all person names as PII. It cannot distinguish between:

  • Natsume Soseki (historical novelist — in most contexts, not PII)
  • Albert Einstein (famous scientist)
  • A deceased person mentioned in a Wikipedia article or historical text
  • The person discussing them in a private document

Historical and public figures can still score low sensitivity instead of none if the text lacks context tying them to the person reading the document.

Workaround: Review findings and filter manually. The --no-spans flag disables name extraction entirely.

No Checksum Verification

Digit strings are extracted and classified by Jev, but checksums are not validated:

  • Credit card Luhn checksums: not validated
  • Passport format: not validated
  • Government ID format: not checked

This means synthetic or invalid numbers may be flagged as PII. Use the probability score to judge confidence.

Borderline HR and Disciplinary Records

Confidential performance reviews and disciplinary documents can produce inconsistent sensitivity scores across runs. When the model's probabilities sit near the 0.5 boundary (e.g., 0.47/0.53 low/high split), a document can flip between low and high sensitivity depending on the exact phrasing and context window.

Example: A termination recommendation with personal mitigating factors may hover at the boundary. Run evaluation multiple times or inspect sensitivity.probabilities in the JSON to assess confidence.

Workaround: For high-stakes decisions, inspect the full JSON output and the probabilities field; do not rely on a single run's sensitivity level.

Cannot Detect PII in Code

Structured data like JSON, YAML, SQL, regex patterns are treated as plain text:

json
{
  "user_id": "12345",
  "email": "john@example.com",
  "phone": "555-0123"
}

The tool will find the email and phone, but not in the context of a data structure. If someone stores PII as SQL comments or regex, those are unlikely to be detected.

Cannot Identify Company/Organization Names

Scope: Individual PII only. Company names, brand names, institution names are not detected:

  • "Acme Corp", "Google", "Harvard University"
  • "Amazon S3 bucket"
  • "Federal Reserve Bank"

These are out of scope.

Limited Context for Ambiguous Cases

Some PII is context-dependent:

  • "Blood type O" alone has low sensitivity; "John's blood type is O" with a named person has higher sensitivity
  • "123 Main Street" alone could be a business address; "John lives at 123 Main Street" is personal

jev-pii-checker relies on Jev's judgment of the full text chunk. Accuracy is good but not perfect.

Cannot Verify Data Leaks or Aggregation

The tool detects PII in isolation. It does not:

  • Check if a name + phone combination uniquely identifies someone in a public database
  • Detect when a list of multiple attributes (e.g., "all users with depression diagnosis") reveals sensitive facts about a group
  • Warn if combining this data with other sources enables re-identification

No Verification of Employment or Affiliation

"John Smith works at Acme" is flagged as employment info, but:

  • No check if John actually works there
  • No distinction between official and casual mention
  • No verification against a company roster

Candidate Rules Are List-Based

Political/military/legal/clerical titles (Governor, Senator, Mayor, Judge, etc.) and capitalized form labels (Name, Email, Phone, Subject, etc.) are never candidates during name extraction. These are hard-coded lists, so unknown or regional titles may not be recognized:

  • "Comandante José" may still merge "Comandante" with "José" if the title is not in the list
  • Informal or organizational titles (Team Lead, Chapter Director) may be treated as name words

Workaround: Use --show-values and review the detected names; report false positives if you find a pattern.

Text Sent to TypeSafe API

Important: All text is sent to TypeSafe's Jev API for judgment. Do not scan:

  • Highly confidential documents
  • Trade secrets
  • Personal medical records (unless you trust TypeSafe)
  • Government classified material

See security guide for data handling details.

Performance Notes

  • Concurrency flag: Currently reserved; all requests are sequential
  • Token costs: Scale linearly with file size
  • Chunking: May fragment PII across chunk boundaries (e.g., name in one chunk, number in another)

Accuracy Expectations

Measured Results (on IBM and internal corpora):

  • Gate: 100% categorical accuracy on person_name, email_or_phone, phone presence
  • Sensitivity levels: 22/24 correct (seminar/clinic context distinction works well)
  • Digit disambiguation: Correctly classifies credit cards, My Numbers, order numbers, product serials

Real-world accuracy will vary with document type and language.


What NOT to Expect

  • Complete PII detection: This tool finds common patterns. It is not a security audit.
  • GDPR/HIPAA compliance guarantee: Use professional data loss prevention (DLP) tools for regulatory compliance.
  • Real-time scanning: Designed for batch jobs, not high-frequency API integration.
  • Public figure filtering: See first limitation.

For edge cases or missing features, open an issue on GitHub.

Released under the MIT License.