茉莉花新闻网

中華青年思想與行動的聚合地

有没有哪两个汉字相似到难以区分?

我去年没事干干过这个, 计算字体聚类.

㬺幐(U+3B3A, U+5E50)
墫壿(U+58AB, U+58FF)
鬬鬭(U+9B2C, U+9B2D)
晚晩(U+665A, U+6669)
凉凉(U+51C9, U+F979) 我以后也要用这个词.
v2 78944222b2a8a57ce0fee19dc183269c 720w

先随手创建一个文件夹, 然后新建一个 notebook.

选择 CJK 区 "㐀(U+3400)" 到" 龥(U+9FA5)"共 27558 个字.

有汉字有繁体字, 可能有异体字, 这个范围应该没有日语字...

字号 25 号, 字体使用混合字体 YaHei Consolas Hybrid, 对中文来说就是微软雅黑

all=StringPartition[FromCharacterCode[Range@@ToCharacterCode["㐀龥"]],1];
toImg=Rasterize@Style[#,FontSize->25,FontFamily->"YaHei Consolas Hybrid"]&;

然后用异步渲染把字都渲染出来.

并行策略选择了 Coarsest Grained, 适用于每个单元执行时间相近的情况.

虽然我也不知道并行快还是不并行快......

但是这样写就算内核突然崩溃了下次不用从头跑, 比较安全...

$now=Now
$here=DirectoryName@NotebookFileName[];
Exporter[num_]:=Block[
  {name=$here<>ToString@num<>".png"},
  If[FileExistsQ@name,Return[]];
  Export[name,toImg@FromCharacterCode[num]]
];
ParallelMap[Exporter,Range@@ToCharacterCode["㐀龥"],Method->"CoarsestGrained"];
Now - $now

然后去上课, 上完课回来肯定就好了

v2 ebe34b68c3971f914a5a7b574cd01447 720w
CPU 跑两秒, 硬盘写 15 分钟, 可以, 很赞.......

渲染完洗一下内存, 再全部读进来, 关了重开也行...

然后随手选个聚类算法呗, 参数靠魔法...

瞎算了几次, 发现一个比较稳的方法.

可以分批次训练, 每批 2000 个字,聚类半径设为 10.

一起跑实在太慢了, 然后考虑到制字表的时候也是相似的字放在一起的, 应该不会出现大问题...

或者可以用快速聚类, 大约 1 分钟, 进行一个初步的空白区域大小划分.

然后再细致的对划分二次聚类, 毕竟聚类这个复杂度是超线性的, 划分一下虽然要算多算一次, 但还是有加速效果的...

$now=Now
$here=DirectoryName@NotebookFileName[];
all=Association[#->Import[#]&/@FileNames["*.png",$here]];
pat=Select[FindClusters[all,
 Method->{"NeighborhoodContraction","NeighborhoodRadius"->10}],
Length@#>1&];
try1=Select[FindClusters[Association[#],
 Method->{"NeighborhoodContraction","NeighborhoodRadius"->10}],
Length@#>1&]&/@Map[#->all[#]&,pat,{2}];
DeleteDuplicates/@Map[all,Flatten[try1,1],{2}]
Now-$now

然后去上另一节课, 上完差不多就能出图了, like this!

v2 e562d753557fd9206563fffe8249e663 720w
两次聚类一共 6 分钟, 大约说得过去吧

效果不够好, 基本上都是偏旁不同, 那就三次聚类呗, 现在已经只有 1690 个字了....

try2 = Select[
  FindClusters[Association[Map[# -> all[#] &, Flatten[try1]]],
    Method -> {"NeighborhoodContraction", "NeighborhoodRadius" -> 4}],
  Length@# > 1 &]; Map[all, try2, {2}]
v2 b8b7e43c454d4fa37ca0f81944fb1fcb 720w

缺字会被垒到一起, 很迷, 还有就是异体字太多


我本来是想用机械智障造字....

构造一个 GAN, 生产者生产随机像素, 监督者来判别这个字存不存在...

然而...好像效果不咋的, 都没法通过我这个人的图灵测试, 毕竟.......

有噪点的都是新造的字啊....GG

同类信息

查看全部

茉莉花论坛作为一个开放社区,允许您发表任何符合社区规定的文章和评论。

茉莉花新闻网

        中国茉莉花革命网始创于2011年2月20日,受阿拉伯之春的感召,大家共同组织、发起了中国茉莉花革命。后由数名义工无偿坚持至今,并发展成为广受翻墙网民欢迎的新闻聚合网站并提供论坛服务。

新闻汇总

邮件订阅

输入您的邮件地址:

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram