2 回答

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
跟python無關(guān),你需要的是AC自動(dòng)機(jī)算法(多模式串匹配)。
而如果是要實(shí)現(xiàn)搜索,那么實(shí)際上應(yīng)當(dāng)使用倒排索引,才能達(dá)到最優(yōu)的效果。

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
省事點(diǎn)用 sqlite fts4 全文索引好了,這樣可以一條字段存入多條關(guān)鍵字,
查詢時(shí)給句子拆分下加入 OR 語法,select 用下 snippet 函數(shù)得到匹配的關(guān)鍵字。
把數(shù)據(jù)存到 sqlite fts4 全文索引表(sqlite 有在 python 標(biāo)準(zhǔn)庫里不需要其他依賴,可以用內(nèi)存數(shù)據(jù)庫),fts4 默認(rèn)會(huì)按標(biāo)點(diǎn)和空格分詞,所以處理中文時(shí)預(yù)先插入空格就沒問題(插入 \r 之類也行)。
如果要求判斷子字符串而不是按單詞判斷,存入數(shù)據(jù)時(shí)先用空格把字母和字符逐個(gè)隔開,查詢時(shí)也逐個(gè)隔開并加上適當(dāng)引號(hào)和 * 號(hào),
而如果是想分詞卻擔(dān)心有黃詞漏網(wǎng)的話,存入數(shù)據(jù)和查詢句子都用二元分詞就可以了。
添加回答
舉報(bào)