字符串字体比较算法

Posted

技术标签:

【中文标题】字符串字体比较算法【英文标题】:String typeface comparison algorithm 【发布时间】:2011-02-21 09:21:55 【问题描述】:

我相信,有一种算法,它可以等于两个字符串,它们具有相似的字符字体,但不同的符号(数字、西里尔文、拉丁文或其他字母)。例如:

"hello"(拉丁符号)等于"he11o"(数字和拉丁符号) "HELLO"(拉丁符号)等于"НЕLLО"(西里尔字母和拉丁符号) "really"(拉丁符号)等于"геа11у"(数字和西里尔符号)

【问题讨论】:

【参考方案1】:

您可能会想到 Paul E. Black 为 ICANN 开发的算法,该算法可确定两个 TLD 是否“令人困惑地相似”,尽管它目前不适用于混合文字输入(例如拉丁文和西里尔文)。请参阅“Algorithm Helps ICANN Manage Top-level Domains”和ICANN Similarity Assessment Tool。

此外,如果您有兴趣扩展此算法,那么您可能希望合并来自 Unicode code charts 的信息,这些信息通常会列出相似的字形和呈现相似的代码点序列。

【讨论】:

感谢您的有用回答。对于第一个示例(数字和拉丁符号),有 The Code and The Algorithm(Python 中的源代码)【参考方案2】:

我不太确定你要的是什么。

如果您想知道两个字符在给定字体下看起来是否相同,那么您需要将所选字体中的每个字符渲染为位图并比较它们以查看它们是否接近相同。

如果您只想始终认为小写拉丁文“l”与数字“1”相同,而不管使用哪种字体,那么您可以简单地定义一个字符映射表。可能最简单的方法是为每组看起来相同的字符选择一个规范值,并将该组的所有成员映射到该字符。比较字符串时,请比较表中每个字符的规范实例。

【讨论】:

感谢您的回复。可以这样做。但也许这样的算法已经存在,比如语音算法 Metaphone、Soundex 等。

以上是关于字符串字体比较算法的主要内容,如果未能解决你的问题,请参考以下文章

算法训练 比较字符串

每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换

文本比较算法Ⅱ——Needleman/Wunsch算法

字符串匹配算法

蓝桥 算法训练 比较字符串

KMP算法(通俗易懂的字符串比较算法)