2015-06-23 25 views
2

我目前正在研究一個Web窗體,允許用戶張貼消息在某種媒體中處理。由於我們必須驗證輸入並對照給定的壞詞列表進行解析,因此我開着許多選項供您選擇。但是,當清單到達並保存大約15,000字以匹配我想知道如何處理這些最有效的方式。也許你可以幫助我!高性能badwords過濾器(PHP/MySQL/JS)與大列表

基本上,這可以是一個後端過濾器,但在JavaScript的附加前端批准,將不勝感激(在情況下,也許一個異步AJAX請求到後端?)。該表單將用於高流量環境中,並且提交後的任何異步檢查可以省略,因爲我們需要即時反饋給用戶,並且不希望僅審查他們的輸入。

我們使用PHP 5.4.0,有一個MySQL的InnoDB的5.5連接,做不喜歡使用任何第三方項目,它們大多都設有某種超載恕我直言的。

+0

一些提示https://stackoverflow.com/questions/11948189/how-would-you-recommended-to-filter-comments-which-contains-offensive-words-defi – Marki555

+0

感謝Marki555,這是朝着正確的方向! – RicCount

+1

考慮這是否是您真正想要的,以及它會如何影響用戶體驗。過度熱情的審查可能是一種巨大的痛苦(「爲什麼它不讓我說我的名字是迪克,我住在斯肯索普?」),人們將會前往。無論如何。 – Eborbob

回答

1

正如我在評論中提到,這question對使用​​什麼軟件提出了一些建議。

但事實上15000不算多 - 每字5個字符是在100 KB的數據的魅力。如果要求不使用任何其他軟件,那麼你可以使用一些簡單的方法來減少比較。

首先將你的BADWORDS字典轉爲同一字長的列表(所以不是每一個詞所有可能BADWORDS比較,你就會把它比對具有相同長度的)。

那麼你有2種可能,你必須基準哪一個是速度快:

  • 從用戶後每個單詞,計算它的長度,並比較對同一長度的所有BADWORDS。
  • 或者設法讓所有的字到一個數組並刪除重複 - 只有對BADWORDS

,入住使用此之後,你將消除comparations的數量爲最小,但你仍然需要做很多他們。

注意:這種方法適用於純字的badwords。如果你的badwords字典中還包含短語(多個詞之間有空格),你可以使用專門的軟件或以相反的方式進行比較(對於每個badword短語,嘗試在整個提交的帖子中找到它)。

另一個問題是,如果你真的需要檢查所有15000個BADWORDS,如果在您的文章的potentional頻率是值得的計算工作。另外我猜測對於這樣的高流量網站,你已經有了一些適應所有未被系統捕獲的帖子(也許垃圾帖子比那些有壞字的用戶更常見)。

+0

謝謝,很好的主意,簡單地分割詞表。我會嘗試這個並比較一下。想想str_pos對內存中的列表將會有所斬獲。由於事實上免費的文本字段值將被動態呈現爲可共享的視頻,所以適度就沒有了,而這種異步驗證過程不是概念的一部分! :-P – RicCount

0

對PHP腳本的異步HTTP請求對我來說最有意義,實際上唯一有意義的東西。無需提交或刷新。

+0

問題更多的是關於如何實現快速搜索,而不是如何調用/提交。 – Marki555

+0

好吧,他想要即時反饋 –

+0

只需要在輸入「壞」文本時向用戶提供即時反饋。但這更多的是性能/優化問題! – RicCount