从切片中删除字符串中包含一个单词的所有单词

时间:2019-07-11 07:59:27

标签: string go slice

我正在尝试提取主题,我要做的是从字符串中删除所有辅助词,我的伪代码是:

topic := make(map[string]int)
auxiliaryWord := []string{"hbs", "habis", "dan", "kapan", "bagaimana", "kita", "kamu", "warga", "pada", "paling", "ga", "gak", "enggak", "tidak", "bukan", "usai", "juga", "yg", "yang", "kpd", "kepada", "nya", "adanya", "jd", "jadi", "sih", "lah", "kan", "photo", "from", "by", "ini", "saja", "utk", "untuk", "lebih", "ternyata", "apa", "sok", "tau", "bagi", "eksis", "keluar", "kk", "kakak"}
for chat := range chats {
    arrWord := chat.Split(chat, " ")
    for word := arrWord {
        if word not in auxiliaryWord {
            if topic[word] not exist {
                topic[word] = 1
            } else {
                topic[word]+= 1
            }
        }
    }
}

我的问题是,有没有更快的方法呢?

1 个答案:

答案 0 :(得分:3)

只需预先计算auxilaryWord进行哈希处理,然后进行查找即可。

package main

import (
    "fmt"
    "strings"
)

var auxilaryWords = []string{"hbs", "habis", "dan", "kapan", "bagaimana", "kita", "kamu", "warga", "pada", "paling", "ga", "gak", "enggak", "tidak", "bukan", "usai", "juga", "yg", "yang", "kpd", "kepada", "nya", "adanya", "jd", "jadi", "sih", "lah", "kan", "photo", "from", "by", "ini", "saja", "utk", "untuk", "lebih", "ternyata", "apa", "sok", "tau", "bagi", "eksis", "keluar", "kk", "kakak"}
var auxHash = map[string]bool{}

func CountTopics(chatWords []string) map[string]int {
    result := map[string]int{}
    for _, word := range chatWords {
        if !auxHash[word] {
            result[word] += 1
        }
    }
    return result
}

func init() {
    for _, word := range auxilaryWords {
        auxHash[word] = true
    }
}

func main() {
    arrWord := strings.Split(`hai kakak habis makan apa`, " ")
    fmt.Println(CountTopics(arrWord))   
}

https://play.golang.org/p/Wr2gK_zizL0