前言
测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 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 Document
def 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 ThreadPoolExecutor
def process_single_file(file_path, knowledge_base_dir="知识库/"):
"""
处理单个文件:清洗、分类、存储
:param file_path: 文件路径
:param knowledge_base_dir: 知识库根目录
"""
try:
# 提取内容
content