2012-02-03 45 views
0

我是一個鐵軌新手。在紅寶石軌道模糊搜索褻瀆過濾器

我使用profanity_filter紅寶石的寶石在我的內容應用過濾犯規的話..

profanity_filter,如果在所有有犯規的話,可以說"foulword"返回"f******d"

如果任何用戶播放聰明和類型"foulwoord""foulwordd""foulllword"等它不檢測爲一個犯規的詞。

有沒有辦法確保它檢測到這些用戶智能犯規詞?

尋求幫助!

謝謝!

+1

一定要考慮到[Scunthorpe問題](http://en.wikipedia.org/wiki/Scunthorpe_problem)。 – Blorgbeard 2012-02-03 23:03:14

回答

3

你需要過濾多少個犯規詞?

一種方法是使用Diff::LCS(來自diff-lcs寶石)來檢查被檢查單詞和每個犯規單詞之間有多少字母不同。如果你有大量的犯規詞來檢查,這可能會非常緩慢。有一件事你可以做得更快一點將包括一個「好」字的字典。在Set中保留「好」字典,並在檢查每個內容詞之前,首先測試它是否在字典中。如果是這樣,你可以繼續前進。 (如果你想檢查字典非常快,保持它在搜索線索。)

此外,如果您檢查一個字,發現它是好的,你可以其添加到字典,以便你不需要再次查看同一個單詞。這裏的危險是字典可能變得太大。如果這是一個問題,你可以使用類似於「最近最少使用」緩存的東西,當字典變得太大時,會丟棄最近沒有看到的「好」字。

另一種方法是針對每個犯規詞生成變體,並將它們存儲在「錯誤」字典中。如果您生成的每個單詞與一個犯規單詞相差1個字母,每個犯規單詞的大小約爲200-500。您也可以通過僅將字母「o」更改爲零等來生成與犯規詞不同的單詞。

無論您做什麼,您都永遠不會捕捉100%的「壞」字錯誤地標出「好」字。如果你能得到一個過濾器,可以接受很高比例的「壞」字,可接受的誤報率很低,那就是「成功」。

如果您正在爲網站做這件事,我建議您不要用「壞」字封鎖內容,而是自動將其標記爲供版主注意。如果允許淫穢內容在網站上出現即使暫時無法接受,您也可以延遲顯示標記的內容,直到主持人查看之後的。這將避免他評論中提到的@Blorgbeard的Scunthorpe問題。