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, '李四热爱计算机科学')
"""
相关推荐
白兰地空瓶21 小时前
别再只会调 API 了!LangChain.js 才是前端 AI 工程化的真正起点
前端·langchain
FreeCode1 天前
一文带你了解LangChain数据容器及其使用
langchain·agent·ai编程
over6971 天前
《闭包、RAG与AI面试官:一个前端程序员的奇幻LangChain之旅》
前端·面试·langchain
樊小肆1 天前
ollmam+langchain.js实现本地大模型简单记忆对话-PostgreSQL版
前端·langchain·aigc
风送雨1 天前
多模态RAG工程开发教程(上)
python·langchain
lusasky1 天前
基于 LangChain 的海量 API 动态检索与调用架构
网络·架构·langchain
kimi-2221 天前
LangChain 中创建 Agent(智能体)方法
langchain
樊小肆1 天前
ollmam+langchain.js实现本地大模型简单记忆对话-内存版
前端·langchain·aigc
飞梦工作室1 天前
Qwen-Agent 与 LangChain、AutoGPT 详细对比:技术架构、能力差异与选型指南
架构·langchain·ocr
北冥有一鲲2 天前
LangChain.js:RAG 深度解析与全栈实践
开发语言·javascript·langchain