2010-10-11 63 views
4

我正在過濾聊天系統中的聊天消息,其中需要將字符串限制爲Latin-1英語。用戶傾向於使用創意打字,例如如何通過標準化信函形式來過濾聊天信息?

ßòógīě§ 

,而不是

Boogies 

在Java中,有Unicode的歸一化方法可以刪除變音符號,但我更感興趣的是朝着正常化的英文字母的形狀的方法,和拉丁語-1字符集。

是否有任何表格,庫或方法可以將拉丁語-1之外的常用Unicode字符映射到最近的窗體?例如。

ß -> B 
§ -> S 
¥ -> Y 
¤ -> o 

我懷疑,答案是「不,這將是太大,只是過濾大家都出去了,而不是」但我希望......

+2

我懷疑是相同的,如果字符集很小,那麼你可以通過維護一個散列圖來手動映射它們 – 2010-10-11 09:16:56

+0

你打算用'strabe'替換'straße'嗎?德國人會不同意。 – axtavt 2010-10-11 10:01:07

+0

刪除分隔符後,您肯定必須編寫自己的附加映射表。對於「像其他基本ASCII字符看起來有點像但實際上與它們無關」的字符,沒有可能的標準,就像示例中的那些標準。但是,我同意邁克爾的觀點:過濾基本上是徒勞的。你將永遠無法屏蔽所有掩飾「壞」字眼的方法,而越多嘗試越多,你就會失火併阻止「好」字眼。 – bobince 2010-10-11 10:08:29

回答

1

我認爲最好的方法是使用OCR (光學字符識別)引擎。畢竟,這正是你所追求的:盡力將字母解析爲可讀的A-Z字符。 (記住要打印聊天消息在使用相同的字體圖像在您的聊天客戶端使用。)

兩個Java-OCR庫:

0

正確的解決方案不是安裝白癡「褻瀆過濾器」(我認爲這是背後的要求)。如果社區在這方面根本無法自我警惕,那就手動調節並禁止違法者,或者關閉它。不得不與Scunthorpe problem摔跤得罪你的用戶,而不是一些髒話的孩子。

+0

可能,但可以通過過濾來冒犯用戶,並且通過不過濾可以冒犯用戶的父母。在任何情況下,過濾都已經完成,這並不是真正解決問題的答案。瞭解信函形式的形狀將導致對信息背後的意圖的理解,並最終阻止較少的信息。 – izb 2010-10-11 10:21:26