前言
測試工程師在管理測試資產時,需要面對多種文檔格式、大量文件分類及知識庫的構建任務。為了解決這些問題,我們升級了 DeepSeek智能測試知識庫助手,不僅支持更多文檔格式,還加入了 多線程并發處理 和 可擴展格式支持,大幅提升處理性能和靈活性。
主要功能亮點:
- 多格式支持:擴展支持
.md
、.csv
文件,兼容docx
、pdf
、txt
、xlsx
等常見類型。 - 多線程并發處理:利用多線程加速文件處理,以應對大文件或批量文件的高效分類和存儲。
- 智能清洗與分詞:清理無用內容、提取高價值文本并分詞,為 DeepSeek 提供更優質的輸入。
- DeepSeek分類接口:結合 AI 模型精準分類,自動歸檔到知識庫。
- 結構化存儲:處理后的內容以 JSON 格式存儲,便于后續擴展和檢索。
知識庫層級設計
與之前版本一致,知識庫結構繼續按 類型 和 項目模塊 分類,支持擴展到更多類別:
知識庫/
├── 測試策略和計劃/
│ ├── 測試策略.json
│ ├── 測試計劃.json
├── 測試用例和腳本/
│ ├── 登錄模塊用例.json
│ ├── 自動化腳本.json
├── 測試工具和框架/
│ ├── 工具指南.json
│ ├── 框架文檔.json
├── 缺陷管理/
│ ├── 缺陷報告模板.json
│ ├── 缺陷跟蹤.json
├── 測試方法和技術/
├── 版本控制和發布管理/
├── 學習資源和培訓材料/
├── 常見問題和解答/
└── 參考文檔/
升級實現方案
1. 支持更多文檔格式
擴展文檔內容提取支持
擴展支持 .md
(Markdown)和 .csv
(表格文件)格式,統一處理接口,增加靈活性。
import pandas as pd
from PyPDF2 import PdfReader
from docx import Documentdef extract_text(file_path):"""根據文件類型提取內容:param file_path: 文件路徑:return: 文本內容"""ext = file_path.split(".")[-1].lower()if ext == "txt":with open(file_path, "r", encoding="utf-8") as f:return f.read()elif ext == "docx":return "\n".join([paragraph.text for paragraph in Document(file_path).paragraphs])elif ext == "pdf":reader = PdfReader(file_path)return "\n".join([page.extract_text() for page in reader.pages])elif ext == "xlsx":df = pd.read_excel(file_path)return df.to_csv(index=False) # 轉換為 CSV 格式文本elif ext == "md":with open(file_path, "r", encoding="utf-8") as f:return f.read()elif ext == "csv":df = pd.read_csv(file_path)return df.to_csv(index=False)else:return "Unsupported file format."
2. 文檔清洗和分詞
智能清洗代碼實現
使用正則表達式去除無關內容(如頁眉頁腳、空行、多余標點等),并對文本內容進行分詞處理。此處需將NLTK對應的包放置在指定位置。
獲取位置:
import nltk
nltk.find('.')
文件下載路徑:
https://github.com/nltk/nltk_data/tree/gh-pages/packages/tokenizers
已上傳云盤,也可聯系獲取云盤資源~
import re
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import nltk# 下載 NLTK 數據(首次運行時需要)
nltk.download("punkt")
nltk.download("stopwords")def clean_and_tokenize(text):"""清洗文本并進行分詞:param text: 原始文本:return: 清洗后的文本和分詞結果"""# 清洗文本cleaned_text = re.sub(r"\s+", " ", text) # 去除多余空格cleaned_text = re.sub(r"[^\w\s,。!?:;、]", "", cleaned_text) # 保留常見標點和文字cleaned_text = cleaned_text.strip()# 分詞處理stop_words = set(stopwords.words("english") + stopwords.words("chinese")) # 停用詞tokens = [word for word in word_tokenize(cleaned_text) if word not in stop_words]return cleaned_text, tokens
3. 并發處理優化
多線程實現
利用 Python 的 concurrent.futures
模塊,實現文件的并發處理,提升性能。
from concurrent.futures import ThreadPoolExecutordef process_single_file(file_path, knowledge_base_dir="知識庫/"):"""處理單個文件:清洗、分類、存儲:param file_path: 文件路徑:param knowledge_base_dir: 知識庫根目錄"""try:# 提取內容content