Privacy Filter — це пакет для Laravel, який розпізнає конфіденційні дані (імена, email та іншу особисту інформацію — PII) у довільних текстах. Він працює як PHP-обгортка для консольної утиліти privacy-filter.cpp — рушія GGML для моделей класифікації токенів від OpenAI.
# Класифікація тексту
Основним інструментом є метод entities(). Він аналізує текст і повертає об'єкти Entity, кожен з яких містить тип сутності, знайдений фрагмент, байтові зміщення (offsets) та рівень впевненості моделі:
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. Його можна змінювати для кожного виклику: вищий поріг забезпечує точніші результати, але може зменшити кількість знайдених сутностей:
$entities = PrivacyFilter::entities(
text: 'Contact John Doe at jdoe@example.com.',
threshold: 0.75,
);
# Маскування знайдених даних
Пакет лише знаходить конфіденційні дані, а спосіб їх обробки залишається на ваш розсуд. Наприклад, анонімізувати текст можна через reduce:
$redacted = collect($entities)->reduce(function (string $text, $entity) {
return str_replace($entity->text, '[redacted]', $text);
}, $text);
# Тестування через fakes
Оскільки запуск бінарного файлу та завантаження моделі сповільнюють тести, Privacy Filter підтримує метод fake(). Він повертає заздалегідь визначені дані без активації моделі:
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:
composer require directorytree/privacy-filter
php artisan privacy-filter:install
Готові бінарні файли для Linux, macOS (включно з ARM64) та Windows доступні в репозиторії PrivacyFilterBinaries. Щоб налаштувати шляхи до файлів, таймаути або джерела завантаження, опублікуйте конфігурацію:
php artisan vendor:publish --tag=privacy-filter-config
Кожна операція класифікації завантажує модель у пам'ять, тому в продакшні рекомендується використовувати виділені черги (queue workers) для стабільного споживання ресурсів.
Вихідний код та документація доступні на GitHub.