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向量化和余弦相似度計算的完整流程,是構建文本檢索系統的核心組件。