登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-21 22:09:34 294浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何检查文本是否包含 Golang 列表中的任何单词?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我想检查用户提交的文本中是否有垃圾邮件单词。这是我编写的函数:

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
            }
        }
    }
}

但是我在 word == sapmword 处得到 mismatched type rune 和 string。 我知道这是因为 removepunctuation 返回符文(又名 int32),它无法与字符串(unit8)进行比较。但是删除标点符号对于该函数的工作是必不可少的,所以我想知道如何解决这个问题?或者也许有更惯用的方法来做到这一点?


解决方案


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

当您执行 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
}

考虑使用地图进行查找

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
    }
}

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

到这里,我们也就讲完了《如何检查文本是否包含 Golang 列表中的任何单词?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>