From f671096dbebc88d5fcb4ee7b3034c26fb23f1c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Tue, 21 Apr 2026 09:56:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=AF=E6=8C=81GSE=5FDATA=5FPATH?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E5=8A=A0=E8=BD=BD=E5=A4=96?= =?UTF-8?q?=E9=83=A8=E6=95=B0=E6=8D=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/gse.go | 91 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 24 deletions(-) diff --git a/utils/gse.go b/utils/gse.go index 64539a6..b75c6ff 100644 --- a/utils/gse.go +++ b/utils/gse.go @@ -2,6 +2,8 @@ package utils import ( "context" + "os" + "path/filepath" "sort" "sync" @@ -40,33 +42,74 @@ type gseTool struct { func newGseTool() (tool *gseTool, err error) { // 1. 初始化分词器 var seg gse.Segmenter - // 内置词典(无外部文件) - err = seg.LoadDictEmbed() - if err != nil { - return - } - // 内置停用词(v1.0.2 标准) - err = seg.LoadStopEmbed() - if err != nil { - return - } - // 2. 初始化 TF-IDF 提取器 - tfidf := &extracker.TagExtracter{} - tfidf.WithGse(seg) - err = tfidf.LoadIdf() - if err != nil { - return - } + // 获取GSE数据文件路径 + gseDataPath := os.Getenv("GSE_DATA_PATH") - // 3. 初始化 TextRank 提取器 - tr := &extracker.TextRanker{} - tr.WithGse(seg) + if gseDataPath != "" { + // 使用外部数据文件 + dictPath := filepath.Join(gseDataPath, "dict", "zh") + idfPath := filepath.Join(gseDataPath, "dict", "zh", "idf.txt") + stopPath := filepath.Join(gseDataPath, "dict", "zh", "stop.txt") - tool = &gseTool{ - seg: seg, - tfidf: tfidf, - tr: tr, + // 加载词典 + err = seg.LoadDict(filepath.Join(dictPath, "dict.txt")) + if err != nil { + return + } + + // 加载停用词 + err = seg.LoadStop(stopPath) + if err != nil { + glog.Warning(context.Background(), "加载停用词失败,继续:", err) + } + + // 2. 初始化 TF-IDF 提取器 + tfidf := &extracker.TagExtracter{} + tfidf.WithGse(seg) + err = tfidf.LoadIdf(idfPath) + if err != nil { + return + } + + // 3. 初始化 TextRank 提取器 + tr := &extracker.TextRanker{} + tr.WithGse(seg) + + tool = &gseTool{ + seg: seg, + tfidf: tfidf, + tr: tr, + } + } else { + // 使用内置embed数据 + err = seg.LoadDictEmbed() + if err != nil { + return + } + // 内置停用词(v1.0.2 标准) + err = seg.LoadStopEmbed() + if err != nil { + return + } + + // 2. 初始化 TF-IDF 提取器 + tfidf := &extracker.TagExtracter{} + tfidf.WithGse(seg) + err = tfidf.LoadIdf() + if err != nil { + return + } + + // 3. 初始化 TextRank 提取器 + tr := &extracker.TextRanker{} + tr.WithGse(seg) + + tool = &gseTool{ + seg: seg, + tfidf: tfidf, + tr: tr, + } } return }