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, '李四热爱计算机科学')
"""
相关推荐
不会敲代码115 小时前
手写一个「迷你 Cursor」:从零构建 AI 编程助手(LangChain + Tool Calling 实战)
langchain·node.js·cursor
kyle-fang1 天前
langchain各类文档加载
windows·python·langchain
donglianyou1 天前
Agent技术详解与实战
python·langchain·agent·langgraph
凌奕1 天前
LangChain 接外部工具:MCP 和 CLI 到底该选哪个?
langchain
liu****1 天前
LangGraph-AI应用开发框架(五)
python·langchain·大模型·langgraph
花千树-0101 天前
三个 Agent 并行调研:用 concurrent 节点构建并发-汇聚式旅游规划助手
java·langchain·agent·function call·multi agent·mcp·harness
是小蟹呀^1 天前
【整理】Agent中的ReAct架构
langchain·agent·react
舒一笑1 天前
大模型根本不是“学会了”,它只是会“看例子”:一文讲透 In-context Learning(ICL)
langchain·llm·openai
Java后端的Ai之路2 天前
LangChain ReAct Agent 核心技术问答
前端·react.js·langchain
Java后端的Ai之路2 天前
LangChain 面试问答指南2
面试·职场和发展·langchain