文章是关于 学习珠峰架构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, '李四热爱计算机科学')
"""