kefu/lib/match.go

62 lines
1.4 KiB
Go
Raw 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 lib
import (
"strings"
)
// 定义一个结构体表示每条数据
type MatchData struct {
ID uint
Text string
Score int
}
// 定义一个结构体表示匹配器
type Matcher struct {
data []MatchData
}
// 定义一个构造函数,用于创建 Matcher 实例
func NewMatcher(data []MatchData) *Matcher {
return &Matcher{data: data}
}
// 定义一个 Match 方法,用于计算最匹配的数据切片
func (m *Matcher) Match(input string, exactMatch bool) (MatchData, bool) {
// 遍历每条数据
var maxScore int
var result MatchData
for _, d := range m.data {
// 将数据切片中的中文逗号替换为英文逗号
text := strings.ReplaceAll(d.Text, "", ",")
// 切分单词
words := strings.Split(text, ",")
// 初始化分值
score := 0
// 遍历每个单词
for _, w := range words {
// 如果是精准命中,判断输入字符串是否等于单词
if exactMatch && input == w {
score++
}
// 如果是包含,判断输入字符串是否包含单词
if !exactMatch && strings.Contains(input, w) {
score++
}
}
// 如果当前分值比最大分值大,则更新最大分值和结果
if score > maxScore {
maxScore = score
result = d
}
}
// 如果最终分值为0则返回 false
if maxScore == 0 {
return MatchData{}, false
}
// 返回最匹配的结果
return result, true
}