| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package utils
- import (
- "fmt"
- )
- // TestFileMatching 测试文件匹配功能
- func TestFileMatching() {
- fmt.Println("=== 文件匹配测试 ===")
- // 模拟数据库中的文件列表
- mockFiles := []struct {
- fileName string
- filePath string
- }{
- {"安全生产管理制度.pdf", "/files/safety/安全生产管理制度.pdf"},
- {"消防安全管理规定.docx", "/files/fire/消防安全管理规定.docx"},
- {"职业健康安全管理手册.pdf", "/files/health/职业健康安全管理手册.pdf"},
- {"环境保护管理制度.doc", "/files/env/环境保护管理制度.doc"},
- {"生产安全操作规程.pdf", "/files/production/生产安全操作规程.pdf"},
- {"安全培训教材.pptx", "/files/training/安全培训教材.pptx"},
- {"应急预案模板.docx", "/files/emergency/应急预案模板.docx"},
- {"安全检查表.xlsx", "/files/inspection/安全检查表.xlsx"},
- {"事故调查报告.pdf", "/files/incident/事故调查报告.pdf"},
- {"安全技术规范.pdf", "/files/tech/安全技术规范.pdf"},
- }
- // 测试用例
- testCases := []struct {
- query string
- expected string
- }{
- {"安全生产管理", "安全生产管理制度.pdf"},
- {"消防安全", "消防安全管理规定.docx"},
- {"职业健康", "职业健康安全管理手册.pdf"},
- {"环境保护", "环境保护管理制度.doc"},
- {"生产安全", "生产安全操作规程.pdf"},
- {"安全培训", "安全培训教材.pptx"},
- {"应急预案", "应急预案模板.docx"},
- {"安全检查", "安全检查表.xlsx"},
- {"事故调查", "事故调查报告.pdf"},
- {"安全技术", "安全技术规范.pdf"},
- {"完全不匹配的文件", ""}, // 应该返回相似度最低的
- }
- for i, tc := range testCases {
- fmt.Printf("\n测试用例 %d:\n", i+1)
- fmt.Printf("查询: %s\n", tc.query)
- // 提取文件名作为候选列表
- var candidates []string
- for _, file := range mockFiles {
- candidates = append(candidates, file.fileName)
- }
- // 使用编辑距离算法找到最相似的文件名
- bestMatch, bestScore := FindBestMatch(tc.query, candidates)
- // 找到对应的文件路径
- var matchedPath string
- for _, file := range mockFiles {
- if file.fileName == bestMatch {
- matchedPath = file.filePath
- break
- }
- }
- fmt.Printf("最佳匹配: %s (相似度: %.3f)\n", bestMatch, bestScore)
- fmt.Printf("文件路径: %s\n", matchedPath)
- // 显示所有匹配结果(按相似度排序)
- allMatches := FindBestMatches(tc.query, candidates)
- fmt.Println("所有匹配结果(前5个):")
- for j, match := range allMatches {
- if j >= 5 { // 只显示前5个
- break
- }
- fmt.Printf(" %d. %s (相似度: %.3f)\n", j+1, match.Text, match.Score)
- }
- // 设置阈值测试
- threshold := 0.3
- if bestScore >= threshold {
- fmt.Printf("✅ 相似度 %.3f >= %.1f,匹配成功\n", bestScore, threshold)
- } else {
- fmt.Printf("❌ 相似度 %.3f < %.1f,匹配失败\n", bestScore, threshold)
- }
- }
- }
- // TestSimilarityThresholds 测试不同相似度阈值的效果
- func TestSimilarityThresholds() {
- fmt.Println("\n=== 相似度阈值测试 ===")
- query := "安全生产管理"
- candidates := []string{
- "安全生产管理制度.pdf",
- "消防安全管理规定.docx",
- "职业健康安全管理手册.pdf",
- "环境保护管理制度.doc",
- "生产安全操作规程.pdf",
- "安全培训教材.pptx",
- "应急预案模板.docx",
- "安全检查表.xlsx",
- "事故调查报告.pdf",
- "安全技术规范.pdf",
- }
- thresholds := []float64{0.1, 0.3, 0.5, 0.7, 0.9}
- for _, threshold := range thresholds {
- fmt.Printf("\n阈值 %.1f 的匹配结果:\n", threshold)
- allMatches := FindBestMatches(query, candidates)
- count := 0
- for _, match := range allMatches {
- if match.Score >= threshold {
- fmt.Printf(" %s (相似度: %.3f)\n", match.Text, match.Score)
- count++
- }
- }
- if count == 0 {
- fmt.Printf(" 没有找到相似度 >= %.1f 的匹配\n", threshold)
- }
- }
- }
- // RunAllFileTests 运行所有文件匹配测试
- func RunAllFileTests() {
- TestFileMatching()
- TestSimilarityThresholds()
- }
|