解释实现哈希值作为唯一的ID以及后面的hexdigest是什么意思
# 生成文档内容的哈希值作为唯一的ID
text_hash = hashlib.md5(doc.page_content.encode('utf-8')).hexdigest()
1. 代码含义分解
doc.page_content
表示一个文档的内容(字符串)。
假设
doc.page_content = "Hello World"
。
.encode('utf-8')
把字符串转换为字节序列(bytes),因为哈希函数需要处理的是二进制数据。
"Hello World".encode('utf-8') → b'Hello World'
。
hashlib.md5(...)
调用 Python 内置的
hashlib
库,使用 MD5 哈希函数 计算输入数据的哈希值。得到的是一个 哈希对象(hash object),不是最终的哈希值。
.hexdigest()
把哈希对象的结果取出来,并转换为 十六进制字符串。
例如:
hashlib.md5(b"Hello World").hexdigest() # 结果: "b10a8db164e0754105b7a99be72e3fe5"
最终赋值给
text_hash
这样
text_hash
就是文档内容对应的一个唯一字符串 ID。即便文档内容改动一个字节,生成的哈希值也会完全不同。
2. hexdigest
的意义
digest()
:返回二进制哈希值(不可读,长度固定字节)。hexdigest()
:把二进制结果转成可读的 十六进制字符串。
import hashlibs = "Hello".encode("utf-8")print(hashlib.md5(s).digest()) # 输出原始字节串
print(hashlib.md5(s).hexdigest()) # 输出十六进制字符串
输出:
b'\x8b\x1a\x99S\xc4a\x12\x96\xa8\'\xab\xf8\xc4x\x04\xd7'
8b1a9953c4611296a827abf8c47804d7
所以,.hexdigest()
是把不可读的二进制哈希结果,转成常见的 16 进制字符串表示,方便存储和对比。
总结:
这句代码的作用就是:
对文档内容(doc.page_content
)做 UTF-8 编码 → 用 MD5 算法生成哈希值 → 转成十六进制字符串 → 存到 text_hash
,作为唯一 ID。