這是很解決一個難題,你需要確定是否正則表達式將工作爲你和你如何處理嵌入(當你添加一個字典詞的褻瀆像frackface除了真正的F字)。
正則表達式通常會限制它們可以使用多長時間,這通常會阻止您爲所有單詞使用單個正則表達式。針對字符串執行多個正則表達式非常慢,具體取決於您需要的性能以及黑名單的大小。我們最初實施CleanSpeak作爲正則表達式系統,但它沒有擴展,我們使用不同的機制重寫它。
您還需要考慮詞組,標點符號,空格,leet-speak和其他語言。所有這些使得正則表達式作爲解決方案的吸引力較小。下面是使用這個詞打招呼一些例子(假設這是這項工作的褻瀆):
- 列表項
- 你好
- 你好
- h_e_l_l_o
- | - | ELLO
- h3llo
- 「hello there」(這個短語可能不包含任何褻瀆詞,但結合他們是褻瀆的)
您還需要處理兩個或兩個以上字典(白名單)字詞在彼此相鄰時包含褻瀆的邊緣情況。包含S-詞的一些例子:
這些顯然不是褻瀆,但大部分自產自銷,許多商業解決方案與這些案件的問題。
我們花了3年的時間完善CleanSpeak所使用的過濾器,以確保它可以處理所有這些情況,並且我們會繼續調整並使其更好。我們還花了8個月的時間完善了我們的系統性能,每秒可以處理大約5,000條消息。並不是說你不能建立可用的東西,但要準備好處理很多可能出現的問題,並且要創建一個不使用正則表達式的系統。
檢查此鏈接:http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter –
尋找斯坎索普問題:http://en.wikipedia .ORG /維基/ Scunthorpe_problem – rossum