# Багатомовний спам-фільтр

Багато спам-фільтрів створювали для англійської. Спам іншими мовами проходить повз них, а звичайні листи іншими мовами позначаються через свою писемність. Spam Scanner створено, щоб уникнути обох проблем.


## Читання слів

Слова виділяються за допомогою `Intl.Segmenter`, тобто правил меж слів Unicode зі словниками для китайської, японської, тайської, лаоської, кхмерської та бірманської. Китайське речення розпадається на слова, як-от 恭喜, 获得 і 大奖, а не на один довгий рядок, що ніколи не повторюється.

Маскування знімається до підрахунку: невидимі символи всередині слів, кириличні або грецькі літери в латинських словах (`pаypal`), цифри замість літер (`v1agra`) і математичні або обведені літери (𝐅𝐑𝐄𝐄). Кожне маскування саме по собі теж є ознакою.


## Не позначати те, чого не знає

Відкриті набори даних спаму містять набагато більше іншомовного спаму, ніж іншомовного ham (бажаних листів), тож наївний класифікатор вивчає, що сам арабський чи корейський текст є спамом. Spam Scanner ніколи не використовує мову як ознаку, зважує кожне слово відносно кількості спаму й ham його власної мови і залишається «невизначеним» тим більше, чим менше ham він бачив цією мовою.

У тесті на SMS-повідомленнях 21 мовою, яких вбудована модель ніколи не бачила, це звело до нуля хибні спрацювання для китайської, арабської, корейської, японської, гінді, бенгальської, урду, турецької, української та шведської.


## Виявлення спаму будь-якою мовою

* **Перевірки, які не читають слів:** схожі домени, оманливі посилання, виконувані файли, макроси, SPF, DKIM, DMARC і чорні списки.
* **Мовна модель** для невизначених листів. Відкриті моделі, як-от Qwen 3.5 і Gemma 4, читають від 140 до 200 мов; наскрізні тести перевіряють спам і ham китайською, арабською, корейською, гінді та тайською на справжній моделі.
* **Ваша власна пошта.** Кількох сотень листів кожного типу певною мовою достатньо, щоб модель, навчена на вашій пошті, була в цій мові повністю впевненою.

```sh
spamscanner scan message.eml --llm ollama --llm-model qwen3.5:4b
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out my-model.json
```

Щоб приймати лише деякі мови, `--allow-language en,de` додає бали пошті, яку впевнено визначено як написану будь-якою іншою мовою.

[Докладніше про мови](https://spamscanner.net/uk/docs/languages/)
