在golang中,去除停用词最快的方法是什么?

In golang, what is the fastest way to remove stop words?

我创建了一个 go package to remove stopwords,我正在尝试优化它。

根据我的研究,许多语言的停用词列表平均包含大约 300 个词。

在当前版本的包中,我使用了一个简单的地图来存储停用词列表。然后,我打破原始内容中的单词并通过添加不在地图(停用词)中的单词来重新创建过滤后的内容。

我试过使用 bloom filter,但它并没有提高性能。我认为这是由于两个因素:

有没有更快的方法?

尝试通过将所有候选词与 | 粘贴在一起并提前编译来构建正则表达式。 RE2 正则表达式引擎会将大列表转换为高效的 trie 数据结构以进行匹配。你可以这样做:

reStr := ""

for i, word := range words {
    if i != 0 {
        reStr += `|`
    }
    reStr += `\Q` + word + `\E`
}
re := regexp.MustCompile(reStr)

\Q\E 可以防止在列表中的任何单词包含正则表达式元字符这种不太可能发生的情况下出现任何问题,否则是无害的)。