---
title: "Privacy Filter: виявлення персональних даних у тексті з Laravel"
url: https://laravelukraine.com/blog/privacy-filter-viiavlennia-personalnix-danix-u-teksti-z-laravel
date: 2026-06-23
source: https://laravel-news.com/privacy-filter-detect-pii-in-text-from-laravel?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+laravelnews
---

# Privacy Filter: виявлення персональних даних у тексті з Laravel

Privacy Filter - це Laravel-пакет, який виявляє приватні сутності: імена, електронні адреси та іншу персональну інформацію у довільному тексті. Він обгортає бінарний файл командного рядка [privacy-filter.cpp](https://github.com/localai-org/privacy-filter.cpp) - GGML-движок інференсу для моделей класифікації токенів privacy-filter від OpenAI - і надає результати через PHP API.

## Класифікація тексту на сутності

Основна точка входу - метод `entities()`, який прогоняє модель через рядок і повертає екземпляри `Entity`. Кожна сутність містить свій тип, знайдений текст, початкове та кінцеве байтове зміщення, а також оцінку впевненості:

```php
use DirectoryTree\PrivacyFilter\Facades\PrivacyFilter;

$entities = PrivacyFilter::entities('Contact John Doe at jdoe@example.com.');

foreach ($entities as $entity) {
    echo $entity->type; // private_email
    echo $entity->text; // jdoe@example.com
}
```

Оскільки зміщення є точними UTF-8 байтовими позиціями, ви можете прив'язати кожну виявлену сутність до її розташування в оригінальному тексті, замість того щоб покладатися лише на збіг рядків.

## Пороги впевненості

Класифікації за замовчуванням використовують поріг впевненості 0.5. Ви можете підвищити або знизити його для кожного виклику, щоб збалансувати повноту охоплення та точність - вищий поріг повертає менше, але більш певних сутностей:

```php
$entities = PrivacyFilter::entities(
    text: 'Contact John Doe at jdoe@example.com.',
    threshold: 0.75,
);
```

## Редагування виявленого тексту

Пакет виявляє сутності, а те, що ви з ними робите - ваша справа. Процес редагування є операцією reduce над поверненими сутностями:

```php
$redacted = collect($entities)->reduce(function (string $text, $entity) {
    return str_replace($entity->text, '[redacted]', $text);
}, $text);
```

## Фейкові класифікації в тестах

Запуск бінарного файлу та завантаження моделі в тестовому середовищі відбувається повільно, тому Privacy Filter постачається з методом `fake()`, який повертає заздалегідь визначені сутності без виклику бінарного файлу:

```php
use DirectoryTree\PrivacyFilter\Entity;
use DirectoryTree\PrivacyFilter\Facades\PrivacyFilter;

PrivacyFilter::fake([
    new Entity(type: 'private_email', start: 20, end: 36, score: 0.98),
]);
```

Ваш код під тестом отримає ці сутності так, ніби їх згенерувала модель.

## Встановлення та налаштування

Встановіть пакет через Composer, потім запустіть інсталятор, щоб завантажити скомпільований бінарний файл для вашої операційної системи та необхідну GGUF-модель:

```bash
composer require directorytree/privacy-filter
php artisan privacy-filter:install
```

Попередньо зібрані бінарні файли для Linux, macOS (включно з ARM64) та Windows розповсюджуються через [PrivacyFilterBinaries](https://github.com/DirectoryTree/PrivacyFilterBinaries). Передайте параметр `--force`, щоб перезаписати існуючі файли.

Щоб налаштувати шлях до бінарного файлу, шлях до моделі, таймаут процесу, URL моделі або джерело релізу, опублікуйте конфігураційний файл:

```bash
php artisan vendor:publish --tag=privacy-filter-config
```

## Рекомендації щодо продакшену

Кожна класифікація завантажує модель у пам'ять, тому пакет рекомендує запускати класифікації на виділених queue workers у продакшені, щоб зберігати передбачуване споживання пам'яті.

Вихідний код та документацію можна знайти на [GitHub](https://github.com/DirectoryTree/PrivacyFilter).
