# Default charset tables and stopwords files

在本文中，我们将讨论字符集表和停用词的新添加内容，这些内容旨在简化在配置索引时使用这些选项的过程。


当最初分析文档文本时，Manticore Search 需要知道文本中的哪些符号对后续处理（将全文拆分为单独的单词、处理词形变化等）是有意义的，哪些是没有意义的。为了定义有效的文本字符，使用 [charset_table](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#charset-table) 选项。通过此选项，您可以指定想要使用的符号集。

此外，为了提供更好的文本搜索质量，Manticore Search 会执行所谓的字符折叠。例如，当分析您的搜索查询时，大写符号会被映射到小写符号，变音符号（如 **â**、**ê**、**î**、**ô** 等）会被映射到其基本等价物，等等。字符集表是定义所有这些转换的机制。

一个特殊的情况是像中文这样的语言，它们具有未分段的文本，无法轻松地拆分为单独的单词，因为它们没有明确的单词分隔符。（“CJK”是这些语言的广泛使用术语，是中文-日文-韩文的缩写。）为了为这些语言提供有效的搜索，应使用 [ngram_chars](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#ngram-chars) 选项与 [ngram_len](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#ngram-len) 一起。它将文本视为一组单独的 **N-gram**，每个 N-gram 是一个字符序列，其长度等于 `ngram_len` 的值。（目前仅支持 `ngram_len = 1`。）这些字符需要在 ngram_chars 指令中定义，并且不能出现在常规的 charset_table 中。

因此，如果您希望您的搜索支持不同语言，您需要为所有语言定义有效的字符集和折叠规则，这可能是一项相当繁琐的任务。

我们已经为您完成了这项任务，通过准备默认字符集表，分别包含非CJK语言和CJK语言。这些表在大多数情况下应该足够使用。它们基于 ICU 字符折叠数据，可以在 [此处](http://source.icu-project.org/repos/icu/icu/tags/release-58-1/source/data/unidata/norm2) 查看，并定义了以下折叠：


 - ASCII 原生数字折叠

 - 大小写折叠

 - 变音符号折叠

 - 汉字部首折叠

 - 平假名折叠

 - 片假名折叠

 - 字母形式折叠

 - 简化汉字折叠

 - 下标折叠

 - 上标折叠

 - 宽度折叠



您可以在以下链接查看用于默认字符集的源文件：[cjk.txt](https://github.com/manticoresoftware/manticoresearch/blob/master/src/charsets/cjk.txt) ，[non_cjk.txt](https://github.com/manticoresoftware/manticoresearch/blob/master/src/charsets/non_cjk.txt)

 

为了能够同时处理 CJK 和非 CJK 语言，您应在配置文件中设置选项，如下所示：

```bash
charset_table     = non_cjk

...

ngram_len         = 1

ngram_chars     = cjk


```

如果您不需要 CJK 语言的支持，只需省略 `ngram_len` 和 `ngram_chars` 选项即可。

如果您仍然需要为某些语言启用特定规则，可以手动创建适当的字符表，并将它们放入配置文件中，而不是使用默认的字符表。

除了上述选项外，您还可以使用 [stopwords](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#stopwords) 选项来排除一些最常用的单词，这些单词通常与搜索查询的相关性不大，从而从进一步处理和索引中排除。例如，对于英语，这些可能包括 **a**、**the**、**this**、**that** 等。要启用此选项，请创建您的停用词文件，并在配置文件中设置指向它的路径：

```bash
stopwords         = /path/to/your/stopwords/file.txt


```

停用词文件的格式是纯文本，包含您希望被视为停用词的所有单词列表，每行一个单词。要创建停用词文件，要么需要手动构建它，要么可以使用 `indexer` 工具，该工具可以提供索引中最高频率单词的列表。

或者，正如在 `charset_table` 和 `ngram_chars` 选项的情况下一样，现在您可以使用我们的默认停用词文件之一。目前有 50 种语言的停用词文件可用。以下是它们的完整别名列表：

 - af - 阿非利卡语

 - ar - 阿拉伯语

 - bg - 保加利亚语

 - bn - 孟加拉语

 - ca - 加泰罗尼亚语

 - ckb- 库尔德语

 - cz - 捷克语

 - da - 丹麦语

 - de - 德语

 - el - 希腊语

 - en - 英语

 - eo - 世界语

 - es - 西班牙语

 - et - 爱沙尼亚语

 - eu - 巴斯克语

 - fa - 波斯语

 - fi - 芬兰语

 - fr - 法语

 - ga - 爱尔兰语

 - gl - 加利西亚语

 - hi - 印地语

 - he - 希伯来语

 - hr - 克罗地亚语

 - hu - 匈牙利语

 - hy - 亚美尼亚语

 - id - 印度尼西亚语

 - it - 意大利语

 - ja - 日语

 - ko - 韩语

 - la - 拉丁语

 - lt - 立陶宛语

 - lv - 拉脱维亚语

 - mr - 马拉地语

 - nl - 荷兰语

 - no - 挪威语

 - pl - 波兰语

 - pt - 葡萄牙语

 - ro - 罗马尼亚语

 - ru - 俄语

 - sk - 斯洛伐克语

 - sl - 斯洛文尼亚语

 - so - 索马里语

 - st - 索托语

 - sv - 瑞典语

 - sw - 斯瓦希里语

 - th - 泰语

 - tr - 土耳其语

 - yo - 约鲁巴语

 - zh - 中文

 - zu - 祖鲁语



 

例如，要使用意大利语的停用词，只需在配置文件中添加以下行：

```bash
stopwords         = it

```

 

如果您需要使用多种语言的停用词，应列出所有它们的别名，用逗号分隔：

```bash
stopwords         = en,it,ru


```

 

所有默认停用词文件都存储在各自的文件夹中。您可以在 Windows 机器上的 Manticore 安装文件夹内的 `/share/stopwords` 中找到它们，以及在 Linux 机器上的 `/usr/local/share/manticore/stopwords` 中找到它们。所有当前提供默认停用词的语言列表也可以在 `languages_list.txt` 中找到。
