Files
2026-08-05 11:32:05 +08:00

52 lines
1.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package common
import (
"strings"
"github.com/go-ego/gse"
)
var seg gse.Segmenter
func init() {
if err := seg.LoadDict(); err != nil {
panic("gse load dict failed: " + err.Error())
}
}
// Tokenize 中文分词,空格连接(FTS5 索引列格式:content_tokens
func Tokenize(text string) string {
tokens := seg.Cut(text, true)
var sb strings.Builder
for _, t := range tokens {
t = strings.TrimSpace(t)
if t == "" {
continue
}
sb.WriteString(t)
sb.WriteString(" ")
}
return strings.TrimSpace(sb.String())
}
// TokenizeQuery FTS5 查询串:过滤 FTS5 特殊字符与单字虚词,OR 语义。
// 中文问题分词后通常只有少数词与文档重合,AND 全命中会空召回,OR + BM25 排序更稳健。
func TokenizeQuery(text string) string {
tokens := seg.Cut(text, true)
var parts []string
for _, t := range tokens {
t = strings.TrimSpace(t)
if t == "" {
continue
}
if strings.ContainsAny(t, "\"*:()") {
continue
}
if len([]rune(t)) < 2 {
continue
}
parts = append(parts, "\""+t+"\"")
}
return strings.Join(parts, " OR ")
}