为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查文本是否包含 Golang 列表中的任何单词?

如何检查文本是否包含 Golang 列表中的任何单词?

Go
侃侃尔雅 2022-05-10 16:15:28
我想检查用户提交的文本中是否有垃圾邮件。所以这是我写的函数:func TextHasSpamWords(text string, spamWords []string) bool {    removePunctuation := func(r rune) rune {        if strings.ContainsRune(".,:;", r) {            return -1        } else {            return r        }    }    text = strings.Map(removePunctuation, text)    sort.Strings(spamWords)    for _, word := range text {        for _, sapmWord := range spamWords {            if word == sapmWord {                return true            }        }    }}但我明白mismatched type rune and string了word == sapmWord。我知道这是因为removePunctuation返回无法与字符串(unit8)比较的符文(又名 int32)。但是删除标点符号对于该功能的工作是必不可少的,所以我想知道如何解决这个问题?或者也许有一种更惯用的方式来做到这一点?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

考虑使用地图进行查找


lookupSpam := make(map[string]bool)

for _, v := range spamWords {

    lookupSpam[v] = true

}

然后代替


for _, word := range textArr {

    for _, sapmWord := range spamWords {

        if word == sapmWord {

            return true

        }

    }

}

可以使用这样的东西


for _, word := range textArr {

    _,found:=lookupSpam[word]

    if found {

       return true

    }

}

如果您重复检查同一组单词,则设置一次地图并重复使用它


查看完整回答
反对 回复 2022-05-10
?
HUWWW

TA贡献1874条经验 获得超12个赞

您正在尝试比较一个字母和一个字符串。


当你在做for _, word := range text的时候,它不是词,它是letter。如果你想要单词,你必须将字符串分割成一片单词textArr := strings.Split(text, " ")(由空格分割)


func TextHasSpamWords(text string, spamWords []string) bool {

    removePunctuation := func(r rune) rune {

        if strings.ContainsRune(".,:;", r) {

            return -1

        } else {

            return r

        }

    }

    text = strings.Map(removePunctuation, text)

    textArr := strings.Split(text, ` `)

    sort.Strings(spamWords)

    for _, word := range textArr {

        for _, sapmWord := range spamWords {

            if word == sapmWord {

                return true

            }

        }

    }

    return false

}


查看完整回答
反对 回复 2022-05-10
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信