我創(chuàng)建了一個(gè) go包來刪除停用詞,我正在嘗試優(yōu)化它。根據(jù)我的研究,許多語言的停用詞列表平均包含大約 300 個(gè)單詞。在包的當(dāng)前版本中,我使用了一個(gè)簡單的映射來存儲(chǔ)停用詞列表。然后,我打破原始內(nèi)容中的單詞并通過添加不在地圖(停用詞)中的單詞重新創(chuàng)建過濾內(nèi)容。我嘗試使用布隆過濾器,但它并沒有提高性能。我認(rèn)為這是由于兩個(gè)因素:布隆過濾器在搜索大型集合時(shí)速度很快,但構(gòu)建成本很高(即使構(gòu)建一次)。因此,當(dāng) m 約為 300 時(shí),整體增益很小。在當(dāng)前版本中,我使用了映射,如果我沒記錯(cuò)的話,go 會(huì)構(gòu)建一個(gè)哈希映射來更快地搜索密鑰。有沒有更快的方法?
1 回答

繁花不似錦
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試通過將所有候選詞粘貼在一起|并提前編譯來構(gòu)建正則表達(dá)式。RE2 正則表達(dá)式引擎會(huì)將大的交替列表轉(zhuǎn)換為高效的特里數(shù)據(jù)結(jié)構(gòu)以進(jìn)行匹配。你可以這樣做:
reStr := ""
for i, word := range words {
if i != 0 {
reStr += `|`
}
reStr += `\Q` + word + `\E`
}
re := regexp.MustCompile(reStr)
(中\(zhòng)Q和\E防止在偶然的情況下,任何在列表中的單詞包含正則表達(dá)式元字符,并且是無害的,否則任何問題)。
- 1 回答
- 0 關(guān)注
- 492 瀏覽
添加回答
舉報(bào)
0/150
提交
取消