find_similar_docs 函数参数详解及实际示例
函数参数说明
def find_similar_docs(query, vectorizer, doc_matrix, top_n=3):
参数 | 类型 | 说明 |
---|---|---|
query | str | 要查询的文本字符串 |
vectorizer | TfidfVectorizer | 已经训练好的TF-IDF向量化器 |
doc_matrix | scipy.sparse.csr_matrix | 文档集的TF-IDF特征矩阵 |
top_n | int | 返回最相似文档的数量(默认为3) |
实际应用示例
1. 准备数据
from sklearn.feature_extraction.text import TfidfVectorizer# 示例文档集
documents = ["机器学习是人工智能的核心领域","深度学习是机器学习的一个分支","自然语言处理是人工智能的重要应用","计算机视觉使用深度学习技术","数据分析需要统计学知识"
]# 初始化并训练TF-IDF向量化器
vectorizer = TfidfVectorizer()
doc_matrix = vectorizer.fit_transform(documents) # 文档特征矩阵
2. 使用函数查询
# 查询与"人工智能技术"相似的文档
query_text = "人工智能技术"
similar_indices = find_similar_docs(query_text, vectorizer, doc_matrix, top_n=2)print("最相似的文档索引:", similar_indices)
3. 查看结果
print("\n查询内容:", query_text)
print("\n最相似的{}个文档:".format(len(similar_indices)))
for idx in similar_indices:print(f"[文档{idx}] {documents[idx]}")
预期输出结果
最相似的文档索引: [0 2]查询内容: 人工智能技术最相似的2个文档:
[文档0] 机器学习是人工智能的核心领域
[文档2] 自然语言处理是人工智能的重要应用
参数传递示意图
查询流程:
1. query = "人工智能技术" (用户输入)
2. vectorizer (已用documents训练好的)
3. doc_matrix (由vectorizer从documents生成)
4. top_n = 2 (用户指定)处理过程:
query → vectorizer.transform → 查询向量 → cosine_similarity计算 → 排序 → 返回top_n索引
实际应用场景
- 搜索引擎:输入搜索词,返回相关文档
- 问答系统:找到与问题最相似的已知答案
- 推荐系统:根据当前内容推荐相似文章
- 论文查重:查找与待查论文相似的已有文献
注意事项
- vectorizer必须提前训练:要使用
fit_transform()
而非仅transform()
- 矩阵一致性:
doc_matrix
必须由同一个vectorizer生成 - 稀疏矩阵:
doc_matrix
通常是scipy的稀疏矩阵格式 - 中文处理:需要先分词,建议在TfidfVectorizer中使用中文分词器
这个函数封装了TF-IDF向量化和余弦相似度计算的完整流程,是构建文本检索系统的核心组件。