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, '李四热爱计算机科学')
"""
相关推荐
再会呀2 小时前
[Ai Agent] 10 MCP基础:打破孤岛,让MCP连接万物
langchain·mcp
陈鋆2 小时前
Langchain-Chatchat[三、知识库管理的 RAG]
windows·langchain
大白的编程笔记5 小时前
LangChain 系统详解
langchain
龙腾亚太7 小时前
大模型十大高频问题之四:国产大模型(如通义千问、文心一言、GLM)和国外模型(如 GPT-4、Claude)差距有多大?
langchain·文心一言·具身智能·智能体·人工智能大模型
呲溜滑_8 小时前
langchain(node.js)输出解析器
langchain·node.js
沛沛老爹1 天前
AI入门之LangChain Agent工具链组合设计:从理论到产业落地的AI智能体架构指南
人工智能·架构·langchain·agent·ai入门
Dr_哈哈1 天前
LangChain Tools —— 让 AI 拥有「双手」
langchain·node.js·ai编程
Dr_哈哈1 天前
LangChain Chain & Pipe 知识点详解
langchain·node.js·ai编程
赋范大模型技术社区1 天前
LangChain1.0 搭建法务合同审核 Agent(附源码)
langchain·ocr·agent·rag·文档审核·langchain1.0