跳到主要内容
版本:Cloud 开发指南

Lindera
公测版

lindera 分词器执行基于词典的形态素分析,专为日语和韩语设计——这两种语言的词汇之间没有空格分隔,且语法标记(助词)直接附着在词汇上。

📘说明

中文用户:虽然 lindera 通过 cc-cedict 词典支持中文,但我们推荐使用 jieba 分词器。Jieba 专为中文分词设计,能提供更好的效果。

概述

日语和韩语都是黏着语:语法标记(助词)直接附着在名词上,形成大量组合。例如:

语言

词根

  • 助词

= 组合形式

含义

Korean

서울 (Seoul)

에서

서울에서

在首尔

Japanese

東京 (Tokyo)

東京に

向东京

lindera 分词器的处理流程:

  1. 分词:将文本拆分为独立的词素(词汇和助词)

  2. 词性标注:为每个 token 标注词典中的词性(POS)信息

  3. 过滤:移除不需要的 token(如助词、标点)

这种"先分词,再按词性过滤"的两阶段处理流程,使用户能够精确控制哪些 token 被索引用于搜索。

配置

要配置使用 lindera 分词器的分析器,将 tokenizer.type 设置为 lindera,通过 dict_kind 选择词典,并可选地应用过滤器。

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ko-dic",
"filter": [
{
"kind": "korean_stop_tags",
"tags": ["SP", "SSC", "SSO", "SC", "SE", "SF", "JKS", "JKC", "JKG", "JKO", "JKB", "JKV", "JKQ", "JX", "JC", "UNK", "EP", "ETM"]
}
]
}
}

参数名称

参数描述

type

分词器类型,在使用 Lindera 分词器时,该值为 lindera

dict_kind

作为参考词表的字典。取值范围如下:

filter

分词后应用的分词器级别过滤器列表。每个过滤器是一个包含以下字段的对象:

  • kind:过滤器类型。支持的值:

    • korean_stop_tags:移除匹配指定韩语词性标签的 token。

    • japanese_stop_tags:移除匹配指定日语词性标签的 token。

  • tags:要过滤的词性标签列表。可用的标签取决于 kind 的值:

    • 对于 korean_stop_tags:使用准确的标签代码(如 JKSJKOSF)。韩语标签需要精确匹配。基于世宗标注体系的完整标签列表请参见 Lindera 韩语 stop tags 源码

    • 对于 japanese_stop_tags:对于 japanese_stop_tags:使用准确的标签代码(如 助詞,格助詞助詞,係助詞助動詞)。日语标签需要精确匹配。完整的标签列表(IPADIC)请参见日语词性标签参考

在定义了 analyzer_params 后,您可以在定义 Collection Schema 时将其应用到 VARCHAR 类型的字段上。Zilliz Cloud 将会根据 Analyzer 的设置对该字段的内容进行分词和过滤。更多详情,可参考使用示例

使用示例

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

韩语示例

from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ko-dic",
"filter": [
{
"kind": "korean_stop_tags",
"tags": ["SP", "SSC", "SSO", "SC", "SE", "SF", "JKS", "JKC", "JKG", "JKO", "JKB", "JKV", "JKQ", "JX", "JC", "UNK", "EP", "ETM"]
}
]
}
}

# Sample Korean text: "서울에서 맛있는 음식을 먹었습니다" (I ate delicious food in Seoul)
sample_text = "서울에서 맛있는 음식을 먹었습니다"

result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

预期输出

['서울', '맛있', '음식', '먹', '습니다']

如果不使用 korean_stop_tags,输出将包含助词,如 에서(在)、(主题标记)和 (宾语标记),这些通常对搜索没有帮助。

日语示例

from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ipadic",
"filter": [
{
"kind": "japanese_stop_tags",
"tags": ["接続詞", "助詞,格助詞", "助詞,格助詞,一般", "助詞,格助詞,引用", "助詞,格助詞,連語", "助詞,係助詞", "助詞,終助詞", "助詞,接続助詞", "助詞,特殊", "助詞,副助詞", "助詞,副助詞/並立助詞/終助詞", "助詞,連体化", "助詞,副詞化", "助詞,並立助詞", "助動詞", "記号,一般", "記号,読点", "記号,句点", "記号,空白", "記号,括弧閉", "記号,括弧開", "その他,間投", "フィラー", "非言語音"]
}
]
}
}

# Sample Japanese text: "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です"
sample_text = "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です"

result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

预期输出

['東京', 'スカイ', 'ツリー', '最寄り駅', 'とう', 'きょう', 'スカイ', 'ツリー', '駅']