2010-05-19 106 views
1

我相信,有一個算法,它可以等於兩個字符串類似的字符,但不同的符號(數字,西里爾文,拉丁文或其他字母)。例如:字符串字體比較算法

  • "hello"(拉丁符號)等於"he11o"(數字和拉丁符號)
  • "HELLO"(拉丁符號)等於"НЕLLО"(西里爾和拉丁符號)
  • "really"(拉丁符號)等於"геа11у"(數字和西裏爾字母)

回答

1

您可能正在考慮爲ICANN開發的算法Paul E. Black,該算法確定兩個頂級域名是否「混淆性相似」,儘管它目前不支持混合腳本輸入(例如拉丁語和西里爾語)。參見「Algorithm Helps ICANN Manage Top-level Domains」和ICANN Similarity Assessment Tool。另外,如果您有興趣擴展此算法,那麼您可能需要合併Unicode code charts中的信息,這些信息通常會列出類似的字形和類似渲染的代碼點序列。

+0

感謝您的有用答案。對於第一個示例(數字和拉丁符號),有[The Code and The Algorithm](http://hissa.nist.gov/~black/GTLD/)(Python中的源代碼) – cubanacan 2010-05-20 08:34:38

1

我不完全確定你在問什麼。

如果您想知道兩個字符在給定字體下是否看起來相同,那麼您需要將所選字體中的每個字符呈現爲位圖並比較它們,看看它們是否接近相同。

如果您只是希望小寫latin'l'與數字'1'相同,無論使用何種字體,那麼您都可以簡單地定義一個字符映射表。可能最容易的方法是爲每個看起來相同的字符集選擇一個規範值,並將該集的所有成員映射到該字符。比較字符串時,比較表中每個字符的規範實例。

+0

感謝您的回覆。可以這樣做。但也許這樣的算法已經存在,如音標算法Metaphone,Soundex等。 – cubanacan 2010-05-19 14:57:48