# 多语言垃圾邮件过滤器

许多垃圾邮件过滤器是为英文设计的。其他语言的垃圾邮件能从它们手中溜过，而其他语言的普通邮件却会因为文字而被标记。Spam Scanner 的设计正是为了避免这两种情况。


## 读取词语

词语由 `Intl.Segmenter` 切分，即 Unicode 词边界规则，并为中文、日文、泰文、老挝文、高棉文和缅甸文配有词典。一句中文会被切分成恭喜、获得、大奖这样的词语，而不是一个永远不会重复的长字符串。

计数前会先还原伪装：词语中的不可见字符，拉丁字母词语中的西里尔字母或希腊字母（`pаypal`），以数字代替字母（`v1agra`），以及数学字母或带圈字母（𝐅𝐑𝐄𝐄）。每一种伪装本身也是一条线索。


## 不标记不了解的内容

公开的垃圾邮件数据集中，外语垃圾邮件远多于外语正常邮件，因此简单的分类器会学到：阿拉伯文或韩文本身就是垃圾邮件。Spam Scanner 从不把语言当作线索，而是用每个词在其所属语言中的垃圾邮件和正常邮件计数来衡量它，并且某种语言的正常邮件见得越少，就越倾向于保持“不确定”。

在一项针对 21 种语言、内置模型从未见过的短信测试中，这使中文、阿拉伯语、韩语、日语、印地语、孟加拉语、乌尔都语、土耳其语、乌克兰语和瑞典语的误报降为零。


## 识别所有语言的垃圾邮件

* **不读取词语的检查**：仿冒域名、欺骗性链接、可执行文件、宏、SPF、DKIM、DMARC 和黑名单。
* **语言模型**处理不确定的邮件。Qwen 3.5 和 Gemma 4 等开放模型能读 140 到 200 种语言；端到端测试用真实模型检查中文、阿拉伯文、韩文、印地文和泰文的垃圾邮件和正常邮件。
* **你自己的邮件**。某种语言的每类邮件只需几百封，用你的邮件训练的模型在该语言上就有十足的把握。

```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/zh/docs/languages/)
