跳到主要内容

Standard 分词器

Zilliz Cloud 中的 standard 分词器将连续的 Unicode 字母和数字字符组成词项,并在其他字符处切分。

分词规则

standard 分词器将属于以下字符集合的连续字符保留在同一个词项中:

  • ASCII 字符:字母 A-Za-z 和数字 0-9

  • 非 ASCII 字符:具有 Unicode Alphabetic 属性,或属于数字通用类别 NdNlNo 的字符。

Unicode 属性或类别含义保留在词项中的字符示例
Alphabetic各种书写系统中的字母(包括汉字和日文假名),以及部分组合标记中文测试, カタカナ
Nd (Decimal_Number)十进制数字٣
Nl (Letter_Number)形似字母的数字字符
No (Other_Number)其他数字字符,例如带圈数字、上标数字和分数①²¾

不属于上述集合的字符用作分隔符,并在切分时丢弃,包括空白字符、标点符号、下划线(_)、连字符(-)、撇号('),以及 +$😀 等符号。连续的分隔符不会产生空词项。

字符分类遵循 Rust 的 char::is_alphanumeric()。属性定义请参阅 Unicode 标准附录 #44。Unicode 17.0 的完整字符列表可分别在 DerivedCoreProperties.txt 中查看 Alphabetic 属性,在 DerivedGeneralCategory.txt 中查看 NdNlNo 类别。具体哪些字符属于这些集合,取决于所部署版本使用的 Unicode 数据。

以下示例使用 {"tokenizer": "standard"},不添加任何过滤器。该分词器保留字母大小写,不会将连续的中文文本切分成单独的词语。

输入输出词项
foo_bar-can't😀123["foo", "bar", "can", "t", "123"]
中文测试["中文测试"]
version①.¾["version①", "¾"]
Hello,World!["Hello", "World"]

配置

要使用标准分词器配置分析器,请在 analyzer_params 中将 tokenizer 设置为 standard

python
analyzer_params = {
"tokenizer": "standard",
}

标准分词器可以与一个或多个过滤器结合使用。例如,以下代码定义了一个使用 Standard 分词器和 Lowercase 过滤器的分析器:

python
analyzer_params = {
"tokenizer": "standard",
"filter": ["lowercase"]
}
说明

更简单的设置,可以直接使用 Standard Analyzer。该 Analayzer 使用了 Standard 分词器和 Lowercase 过滤器

定义 analyzer_params 后,您可以在定义 Collection Schema 时将其应用于 VARCHAR 字段。这使得 Zilliz Cloud 能够使用指定的分析器处理该字段中的文本,以实现高效的分词和过滤。更多信息,请参阅使用示例

使用示例

在完成 Analyzer 配置后,您可以使用 run_analyzer 方法来验证分词效果是否符合预期。

Analyzer 配置

python
analyzer_params = {
"tokenizer": "standard",
"filter": ["lowercase"]
}

使用 run_analyzer 验证效果

python
from pymilvus import (
MilvusClient,
)

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run the standard analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Standard analyzer output:", result)

预期输出

sql
['the', 'milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']