2010-05-12 32 views
3

你如何喜歡有頭腦的人解決過濾褻瀆的基本挑戰,顯然,人們不可能解決每一種情況,但是最好有一個最基本的人作爲第一個人防線。目標C中的基本褻瀆濾鏡iPhone

在對象 - 我有

NSString *tokens = [text componentsSeparatedByString:@" "]; 

然後我遍歷每個標記,看看是否有關鍵字(我已經在列表中了約400),每個令牌內被發現。

認識到誤報也是一個問題,如果這個詞是一個完美匹配,它被標記爲褻瀆,否則如果超過3個褻瀆詞被發現沒有完美的匹配,它也被標記爲褻瀆。

後來我會用一個更精確解決問題的web服務,但我真的只需要一些基本的東西。所以,如果你寫了陰莖這個詞,它會變得淘氣調皮,壞字寫。

+2

...最好的部分是當你在一個團隊中工作,而其他人在你的黑名單中看到*非常好的東西* – aviraldg 2010-05-12 02:26:23

+8

你還需要確保你不會犯這個錯誤。 – 2010-05-12 02:28:38

回答

3

我只是有一個標記字符串的建議。如果單詞全部用字符串隔開,那麼你的方法運作良好,但在大多數情況下很少出現這種情況,因爲你通常不得不處理換行符,標點符號等。試試這個,如果你有興趣:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet]; 

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators]; 

來源:http://www.tech-recipes.com/rx/3418/cocoa-explode-break-nsstring-into-individual-words/

+0

謝謝你這麼多Sosburn!我現在正在使用你的代碼!我很感謝你的幫助! – 2010-05-12 02:54:30

+0

那麼它不是答案,它是一個方便的提示,以讚揚我試圖達到的目的。 – 2010-05-12 03:23:41

6

淫穢過濾器:不好的想法,或令人難以置信的交際不良想法?

傑夫有一個有趣的文章在開始這樣一段代碼之前,需要考慮:

http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html

+1

同意,淫穢過濾器是一個可怕的想法。 – 2010-05-12 02:34:21

+0

我會在任何正常情況下都是爲了避免褻瀆過濾器,這似乎也浪費時間我也...但客戶又名客戶特別要求它強調不喜歡褻瀆,我意識到100%我的解決方案是'bandaid',但我需要一些東西來發布,至少可以解決最常見的情況。 版本2.0將使用更真實的過濾,並且將涉及社交報告工具,即'報告此用戶'。但在此之前,一個bandaid是我需要的。 – 2010-05-12 02:52:56

+0

@大衛,這聽起來很合理。 – 2010-05-12 05:50:44

2

那麼,在這種方式搜索當然不是尋找最有效的方法褻瀆......更有效的方法是構造一個有限狀態自動機來檢測單詞,並通過FSA運行一次文本。你並不需要拆分字符串來尋找褻瀆,所有的分裂都會增加你不需要的額外分配和複製開銷。另外,在某些黑名單中可能會出現常見的模式,這些模式通過單獨搜索每個單詞不會被利用。

這就是說,我認爲400個字是相當多的。誰,確切地說,是你的觀衆?如果用戶有醫療問題怎麼辦?這樣的問題是否應該被禁止?我只能想到一些在任何情況下都被認爲是褻瀆的詞,所以你可能想重新思考過濾。

+0

你說得對,列表是暫定的,下載了論壇列表,最終列表可能會被刪減,但隨着時間的推移,它的內容會有所改變。我希望將這個列表作爲基礎/起點,然後再將其發送給最終可以決定需要什麼以及哪些不需要的客戶。 我正在研究使用FSA正則表達式而不是線性while循環,我只是不熟悉iPhone SDK,所以一旦我總結出最好的方法是...我會去GREP的方法。 – 2010-05-12 02:58:43

+0

我將繼續使用正則表達式,這應該會更有效一些。 – 2010-05-12 03:43:15

0

幾件事情:

  • FSA不一定會工作,這取決於你想如何智能過濾​​器是
  • 正則表達式通常非常緩慢,具體取決於您想要運行多少個
  • 400字有點低,取決於您的需求和語言
  • 有一些非常棘手的情況下要小心過濾時,特別是嵌入的話,如「假設」

我公司,Inversoft,建立一個商業過濾解決方案,這是相當聰明。它不使用正則表達式或FSA,但具有定製的快速線性處理技術,使其非常快速和準確(每秒超過4,000條消息)。它還擁有600多個英語單詞,包括俚語,種族Slurs,毒品,幫派,宗教等多種類別。

如果您正在尋找具有支持的智能情景感知解決方案,您應該查看Clean Speak來自Inversoft。連接到Obj-C應該很簡單,使用XML WebService。