Milvus 分词器学习笔记

文章是关于 学习珠峰架构AI课的学习笔记

1. 分词器是什么?

分词器(Tokenizer)是用来把一段文本拆分成"词语"或"关键词"的工具。

2. ## 常见分词器类型

  • Standard(标准分词) :适合英文、数字、标点分隔的文本。
  • Whitespace(空格分词) :只按空格切分,适合英文、代码等。
  • Chinese(中文分词) :适合中文句子,能智能识别词语边界。
  • Simple(简单分词) :按字母、数字等简单规则切分。

3. 分区键

分区键用来将大量数据分散存储在不同的服务器上。 比如我们班里想把同学们进行分组,分组的依据是同学们的姓氏,那么姓氏就是分区键

手写一个简单的中文分词器

python 复制代码
from collections import defaultdict

# import typing
import jieba

# 定义示例文档数据,每个文档包含"id"、"分区键"、"内容"
documents = [
    {"id": 1, "partition_key": "张", "content": "张三喜欢编程和电脑游戏"},
    {"id": 2, "partition_key": "李", "content": "李四热爱计算机科学"},
    {"id": 3, "partition_key": "王", "content": "王五喜欢阅读技术书籍"},
    {"id": 4, "partition_key": "张", "content": "张杰钟爱笔记本电脑"},
]

# 定义同义词映射,"键"为代表词,"值"为同义词集合(用于扩展匹配)
synonym_map = {
    "电脑": {"电脑", "计算机", "PC"},
    "编程": {"编程", "程序设计"},
}


def simple_tokenize(text: str):
    # 说明: 对文本进行简单分词(空格分隔)
    return [token for token in jieba.lcut_for_search(text) if token.strip()]


# 根据"分区键"对文档进行聚合,返回分区字典
def build_partitions(documents):
    partitions = defaultdict(list)
    for doc in documents:
        partitions[doc["partition_key"]].append(doc)
    return partitions


def match_query(partitions, keyword: str, use_synonym=True):
    results = []
    # 关键词集合
    tokens_to_match = {keyword}
    if use_synonym and keyword in synonym_map:
        tokens_to_match = synonym_map[keyword]

    # 遍历所有分区, 查找返回包含关键词的分区

    for partition_key, docs in partitions.items():
        for doc in docs:
            # 对 content 进行分词
            tokens = simple_tokenize(doc["content"])
            # 判断交集
            if tokens_to_match.intersection(tokens):
                results.append((partition_key, doc["id"], doc["content"]))
    return results


if __name__ == "__main__":
    # 分区存储
    partitions = build_partitions(documents)
    # 严格匹配
    # hits = match_query(partitions, keyword="电脑", use_synonym=False)
    # print("仅匹配"电脑"的结果:")
    # for row in hits:
    #     print(row)
    # 示例2:启用同义词匹配("电脑"≈"计算机")
    hits_with_synonym = match_query(partitions, keyword="电脑", use_synonym=True)
    print("启用同义词匹配("电脑"≈"计算机")的结果:")
    for row in hits_with_synonym:
        print(row)

"""
 启用同义词匹配("电脑"≈"计算机")的结果:
('张', 1, '张三喜欢编程和电脑游戏')
('张', 4, '张杰钟爱笔记本电脑')
('李', 2, '李四热爱计算机科学')
"""
相关推荐
OPEN-Source12 分钟前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
一切尽在,你来2 小时前
1.4 LangChain 1.2.7 核心架构概览
人工智能·langchain·ai编程
一切尽在,你来2 小时前
1.3 环境搭建
人工智能·ai·langchain·ai编程
蛇皮划水怪9 小时前
深入浅出LangChain4J
java·langchain·llm
、BeYourself10 小时前
LangChain4j 流式响应
langchain
、BeYourself10 小时前
LangChain4j之Chat and Language
langchain
qfljg12 小时前
langchain usage
langchain
kjkdd16 小时前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程
渣渣苏21 小时前
Langchain实战快速入门
人工智能·python·langchain
小天呐21 小时前
01—langchain 架构
langchain