我创建了一个go package to remove stopwords,我正在尝试优化它。
根据我的研究,许多语言中的停用词的平均列表包含大约300个单词。
在包的当前版本中,我使用简单的地图来存储停用词列表。然后,我打破原始内容中的单词,并通过添加不在地图中的单词(停用词)重新创建过滤后的内容。
我尝试使用bloom filter,但它并没有提高性能。我认为这是由于两个因素:
有更快的方法吗?
答案 0 :(得分:3)
尝试通过将所有候选词与|
粘贴在一起并提前编译来构建正则表达式。 RE2正则表达式引擎将大的替换列表转换为有效的trie数据结构以进行匹配。你可以这样做:
reStr := ""
for i, word := range words {
if i != 0 {
reStr += `|`
}
reStr += `\Q` + word + `\E`
}
re := regexp.MustCompile(reStr)
(\Q
和\E
可防止在列表中的任何单词包含正则表达式元字符的情况下出现任何问题,否则无害。