GithubHelp home page GithubHelp logo

garywill / cc-visualize Goto Github PK

View Code? Open in Web Editor NEW
300.0 6.0 9.0 3.29 MB

既适合程序员,也适合中文电子文字整编人员(in beta)。汉字繁、简、异、兼、笔、变等关联关系可视化。非寻常汉字字符、同形字符攻击、不可打印字符等检视工具。结合OpenCC、Unicode等数据 | Chinese characters relations or vatiants (simplified, traditional etc) visualization. Potential Unihan/UCD homograph/punycode attack/phishing, non-printable invisible characters inspector

Home Page: https://garywill.github.io/cc-visualize/

License: MIT License

JavaScript 89.30% HTML 4.19% Shell 3.83% CSS 2.68%
opencc chinese-characters chinese-conversion unicode punycode-attack cjk ideographs character-variants homograph-attack duplicate-unicode

cc-visualize's Introduction

全文每個(个)漢(汉)字關(关)聯(联)字可視(视)化 及 非尋(寻)常字符檢(检)視(视)工具

使用(in beta):

作用

  • 对汉字文化、汉语文献:

    • 充当小说阅读器。学习汉字繁简关系、异体字。一眼看清一对多或多对多组合

    • 分辨网上泛滥的,机器简转繁造成的,大量“文献”所含有的大量错字

  • 对程序员:

    • 在全文中查看字符信息,如Unicode码、所属区块、收录的Unicode版本

    • 找出大段文本(Unicode的)中的非寻常字符,如

      • 零宽字符、控制字符、不可打印字符、奇怪空格、组合字符等

        注意:若经复制粘贴、转换、浏览器控件,可能会丢掉或改变一些字符

      • 兼容区汉字符、少用汉字、笔划偏旁字符、仅日本用的简化版汉字 等

        计算机汉字字符编码的坑,除西文字符外,汉字也有“同形字符攻击”问题。已经发现有输入法码表中含有可能混淆人的字符。这也是做这个功能起因之一(见下相关背景资料)

        兀

      • 私用码段字符(PUA)
      • 非汉、又非ASCII的不常用字符(对中文&编程用户)

截图预览

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

UI对字符类型的示意:

  • 淡绿色:繁简合字
  • 淡蓝色:繁体
  • 淡黄色:简体 (不保证百分百准确)
  • 可能为非寻常字符:
    • 红紫色: 是兼容汉字符(可以时应当用对应的同形统一汉字符替代)
    • 蓝紫色: 属于汉字笔划偏旁部首区(若作为句中完整的字,应该用对应的统一字符)
    • 红色: 控制字符(包括不常用空白、零宽、排版控制等)
    • 暗红色: 非合法编码的“字符”
    • 橙色虚线边框: 可能只在汉字库较全或新的设备才显示的汉字
    • 橙色虚线边框: 可能只在较新的设备才显示的非汉字字符
    • (无颜色): 不属于中文文献(及编程)常用到的区块
    • 灰色: 属于私用码段(正式收录前暂用码,已收录后应弃用)
    • 浅红色: 是日本新字体(即,仅日文使用的简化字)
    • 蓝色: 是组合字符(无宽度无间距,用于给前一字符加声调、装饰等)

用字和编码问题的背景知识链接

关于同形字符:
关于汉字同形字符:
关于中文私用码段:
关于中文繁简对应问题:

进阶用户

web支持GET参数:https://garywill.github.io/cc-visualize/?s=%s

CLI用法为node cli.js(不需要再安装其他npm包)。可自行简单编辑入口文件cli.js以定制

在web中,每次检查完成后,在web控制台也会输出与cli类似的检查结果统计

字符编码数据来源及处理说明

展开详细数据来源及处理说明

数据来源 之 Unicode Character Database (UCD)

当前UCD版本:15.1

UCD提供txt(文件数量多)和xml(单个大文件)两种数据格式。

含有任意字符所属语言区块、每个区块的码的范围。含有正常汉字字符(CJK统一表意字符区)与康熙部首区、兼容表意字符区、汉字笔划偏旁字符区。还有繁简、Z变体、语义变体、特殊主义变体之间的关系、笔划偏旁字符对应的独立汉字。还有每个字的提交者是来自哪个国家或地区的研究组

下载了xml并进行缩小,删除不需要的信息。然后生成JSON格式的汉字关联表

UCD参数中的汉字变体、关联

采用的Unihan变体参数

  • kSimplifiedVariant 这个字对应的简体字
  • kTraditionalVariant 这个字对应的繁体字
  • kCompatibilityVariant 这个兼容区字对应的统一区字
  • kZVariant 相同字多次编码(因为错误,或来源不同)形成的“变体”
  • EqUIdeo 这个笔划字符对应的统一字
"壮":{"rel":["","𡉟"],"isSimp":true,"isTrad":true},
"壯":{"rel":["","𡉟"],"isTrad":true},
"壮":{"rel":["","","𡉟"],"isComp":true},  // 兼容区字符 
"𡉟":{"rel":["",""]},  //扩展区字,少见字

"並":{"rel":["","",""],"isTrad":true},
"併":{"rel":["","",""],"isTrad":true},
"倂":{"rel":["","",""]},
"并":{"rel":["","",""],"isSimp":true,"isTrad":true},
"倂":{"rel":["","","",""],"isComp":true},  // 兼容区字 
"並":{"rel":["","","",""],"isComp":true},  // 兼容区字

"⾨":{"rel":["",""],"isRad":true},  // 笔划偏旁字符
"門":{"rel":[""],"isTrad":true},
"门":{"rel":[""],"isSimp":true},

其他未采用的Unihan变体参数: kSemanticVariant, kSpecializedSemanticVariant, kSpoofingVariant

Unicode参数之字符类型

gc (General Catagory) 参数指示一个字符属于 “普通阅读型”字符 或是 控制字符、空白、组合字符 等

Unicode参数之版本

age参数指示一字符被收录进UCD的Unicode版本

1.0.0	1991年10月		1.0.1	1992年6月		1.1	1993年6月		2	1996年7月		
2.1	1998年5月		3	1999年9月		3.1	2001年3月		3.2	2002年3月		
4	2003年4月		4.1	2005年3月		5	2006年7月		5.1	2008年4月		
5.2	2009年10月		6	2010年10月		6.1	2012年1月		6.2	2012年9月		
6.3	2013年9月		7	2014年6月		8	2015年6月		9	2016年6月		
10	2017年6月		11	2018年6月		12	2019年3月		12.1	2019年5月		
13	2020年3月		14	2021年9月		15	2022年9月		15.1	2023年9月

数据来源 之 中华地区官方中文教育制定的常用字表(地区代号:CN+HK+TW)

参看汉字规范#現代規範 - wikipedia

  • 地区代号CN

    《通用规范汉字表》(2013)。分为三级:

    • 一级字表 3500字
    • 二级字表 3000字
    • 三级字表 1605字

    其中一、二级在此认为皆是简体字,三级不视为一定是简体。附件中的繁、异体对照表这里未采用

    本工具数据内容取自UCD的kTGH参数。因官方链接提供的原文件是图片PDF

  • 地区代号HK

    《常用字字形表》 4759字(实际加上同义字后更多)

    本工具数据内容取自UCD的kHKGlyph参数

  • 地区代号TW

    甲表中的字在此视为皆是繁体字,其他表不然

    本工具的甲、乙表数据取自 CNS 11643

下例为总合了以上地区官方中文教育制定的常用字表后的部分数据

"說":{"rel":["",""],"isEdu_HK":true,"isEdu_TW_A":true},
"説":{"rel":["",""],"isEdu_HK":true},
"说":{"rel":["",""],"isEdu_CN_1c":true},

"裏":{"rel":["",""],"isEdu_HK":true},
"裡":{"rel":["",""],"isEdu_HK":true,"isEdu_TW_A":true},
"里":{"rel":["",""],"isEdu_CN_1c":true,"isEdu_HK":true,"isEdu_TW_A":true},

"床":{"rel":[""],"isEdu_CN_1c":true,"isEdu_TW_A":true},
"牀":{"rel":[""],"isEdu_HK":true},

数据来源 之 CNS 11643 的字源数据

来自**的编码「中文標準交換碼」 (CNS 11643) 的官方网站上,可链接到对应的数据下载页面(目前约10万字)。数据中包含有以上甲~丙表、以及其他教育汉字字表的字符编码信息,以及它们由CNS 11643到Unicode的转换表

《國中小教科書常用字》 来自下载数据包内,有500多字(此名称在其他地方找不到说明)。它 + CNS11643数据包内的《次常用國字標準字體表》 ≈ 真正的《次常用國字標準字體表》

数据来源 之 CCCII (尚未)

来自**的编码「中文資訊交換碼」(CCCII,以前又叫EACC)将正、简、异、日几种字形的汉字字符分开区域编排,且收录异体数量多。并且,在这种编码下,只要在编码上平移特定的量,就能找到所关联的汉字,不一定要专门的关联表(也因此同一字有时需要多个编码,因为繁简关系不只有一个对应)

据说1987年版本收录5.3万字符。1989的稿收录7.5万字符(4.4万独立字和3.1万变体),这种编码采用的系统少,资料少

数据来源 之 OpenCC

OpenCC含有中文繁简关系、日本用字与中文汉字关系

下例相当于把openCC的STCharacters.txtTSCharacters.txt合并了

"干": { "rel": [ "", "", "" ], "isSimp": true, "isTrad": true },
"幹": { "rel": [ "", "", "" ], "isTrad": true },
"乾": { "rel": [ "", "", "" ], "isTrad": true, "isSimp": true },
"榦": { "rel": [ "", "", "" ], "isTrad": true },

干幹乾榦既是简体也是繁体,仅是繁体

又,例如,发發髮発髪:中文繁简字皆互相关联,日本变体可关联到中文繁简字,但从中文字不需要关联到日本字。(这里又相当于把openCC的HKVariants.txtTWVariants.txtJPVariants.txt也合并了进来,期间排除了不必要的变体关联)

"发": { "rel": [ "", "" ], "isSimp": true },
"發": { "rel": [ "", "" ], "isTrad": true },
"髮": { "rel": [ "", "" ], "isTrad": true },
"発": { "rel": [ "", "", "" ], "isVari_JP": true },
"髪": { "rel": [ "", "", "" ], "isVari_JP": true },

(openCC数据的预处理应在UCD、CNS之后)

总数据

结合上面提到的数据,生成总数据表使用

结合之前,”修正“一些来自UCD中的繁简“多余”标志(如果你认为这样修正有是错误的请开issue讨论):

  • 已在[港表 ∪ 台表甲]中,且不在[陆表一 ∪ 陆表二]中的字,若有简体属性,取消此属性
  • 已在[陆表一 ∪ 陆表二]中,且不在[港表 ∪ 台表甲 ∪ 台表乙]中的字,若有繁体属性,取消此属性

数据预处理的方法

文件名以pre开头的为预处理脚本(要先cd进入pre_xxxx所在目录再运行)。用于将原始数据生成.js包装的数据文件(文件内容类似xxxx.xxx = { ..很多行... }),以便于web使用。预处理应按以下顺序运行,且只要其中一个更新过,其排序之后的也必须更新:

  1. unicode (陆表、港表数据也是取自于此)(每年需要人工下载跟进更新)
  2. cns (台表数据取自于此)(每年需要人工下载跟进更新)
  3. edu
  4. opencc (需要edu数据)
  5. summary (总数据,最终应使用的)

把整合了汉字关联、汉字属性的数据文件以“xxxx-data-map”命名。具体一点,map仅繁简关联,map2是供正常使用的,map3是把“不必要的关联”也关联进来了的

若要运行预处理,需要类unix环境和bash。unicode和cns原始数据是需要手动下载放入的

这个工具的一些声明、制作方向及局限

  1. 因不同地区、文化圈、系统,不同的历史流行输入法、字体,机构所沿用的信息系统的原因,所谓汉字“规范”、“通行”、“正常”字符到底该依照哪个(统一字、部首字符、兼容字,还是暂用私用码,甚至不用万国码而用另一套编码?),本项目(至少目前)无法收录和处理完整的这类信息。

    因此,忽略那些。我们以 新Unicode版本 的 CJK统一区块 为优先。

    也尝试以所能收集到的中华地区(CN+HK+TW)教育部制定的常用字表作为配合。目标群体为简中、繁中语言用户(日韩越用户经过修改定制也可以使用)。

  2. 只收录文本数据,即以计算机码位形式储存的数据,不收录图片、字形。

  3. 本工具是制作及运行在UTF-8环境。UI中的hex字符编码常为省略U+后的标准表示(即同UTF-16码)

  4. 组合表情符号、组合字母(例如带声调那种)会被拆开

  5. 目前对字的简、繁、合、日标记,以中华地区生活常用的字的覆盖范围(几千~1万)为优先,【并非】考古或严谨的汉语汉字研究。因此若你是古籍研究整编人员想用此项目,可能需要先对预处理数据的代码稍作修改(亦见数据处理方式中的对UCD繁简的“修正”)

相关

其他能够查到汉字Unicode字符变体、关联关系、资料的工具:

其他资源:

有用就赏

收集整理数据不易,感谢支持!

打赏链接

其实,多赏非求,少许亦可。
进者,参观主页,玩物更多。

cc-visualize's People

Contributors

garywill avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

cc-visualize's Issues

对array或object使用for in 或for of循环时,会撞到自定义的方法

由于对Object创建了自定义方法,
for ( .. in ..)
for (.. of .. )
这两种循环总是会遍历到第一个自定义方法

cc-visualize/common.js

Lines 13 to 61 in 83f435f

Object.prototype.q$ = function(selectorStr) {
function handleNonArrayObject(obj)
{
return obj.querySelector(selectorStr);
}
var obj = this;
var result = null;
if ( HTMLElement.prototype.isPrototypeOf(obj) )
result = handleNonArrayObject( obj );
else if ( typeof(obj) != "string" &&
obj.length !== undefined && obj.length > 0
)
{
for( subObj of obj )
{
result = handleNonArrayObject(subObj);
if (result)
break;
}
}
return result;
}
Object.prototype.q$$ = function(selectorStr) {
function handleNonArrayObject(obj)
{
return obj.querySelectorAll(selectorStr);
}
var obj = this;
var result = [];
if ( HTMLElement.prototype.isPrototypeOf(obj) )
result = Array.from( handleNonArrayObject( obj ) );
else if ( typeof(obj) != "string" &&
obj.length !== undefined && obj.length > 0
)
{
for( subObj of obj )
{
result = result.concat ( Array.from (handleNonArrayObject(subObj) ) );
}
result = Array.from ( new Set(result) );
}
return result;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.