字库部件压缩方法及装置
技术领域
本发明涉及计算机文字处理技术领域,尤其涉及一种字库部件压缩方法及装置。
背景技术
随着互联网移动化,智能手机、平板电脑和其他移动互联网终端层出不穷,数字出版、无纸阅读和移动阅读的用户群也逐渐壮大,为了提供友好的显示界面,目前大部分设备都采用字库来存储汉字。
字库中通常存储有成千上万个字符,每个字符都有其对应的编码,每个字符都是由偏旁、部首等组合而成的,这些偏旁、部首等统称为部件,为了实现字符的正常显示,在字库中还需要保存每个字符包含的部件的编码以及每个部件的轮廓信息,从而导致字库的整体数据量较大,需要占用很大的存储空间,使得字库在实际应用、传输等方面受到了局限。
发明内容
本发明提供一种字库部件压缩方法及装置,用以解决现有技术中字库占用的存储空间较大的技术问题。
本发明提供一种字库部件压缩方法,包括:
获取字库中各个字符包含的部件的编码信息;
获取所述字库中各个字符的笔顺信息;
根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息;
根据部件的笔顺信息,对字库中的各个部件进行相似性合并。
如上所述的方法,优选的是,根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息,包括:
根据各个字符中的部件的编码信息,获取部件的轮廓信息;
根据各个部件的所述轮廓信息,确定各个部件的笔画数;
根据所述各个字符的笔顺信息以及字符中各个部件的笔画数,确定字符中包含的各个部件的笔顺信息。
如上所述的方法,优选的是,根据部件的笔顺信息,对字库中的各个部件进行相似性合并,包括:
将笔顺信息相同的部件添加到同一聚类中;
根据部件的轮廓信息,确定每一聚类中各部件之间的相似度;
在同一聚类中,若至少两个部件之间的相似度满足预设条件,则将所述至少两个部件进行合并,并建立部件的原始编码信息和合并后的编码信息之间的对应关系。
如上所述的方法,优选的是,在确定各字符中包含的各个部件的笔顺信息之后,还包括:
根据各个部件的笔顺信息,确定各个部件的序列码,所述序列码包括字形码及序号码,其中,笔顺信息相同的部件对应的字形码相同,对应的序号码不同;
建立部件的序列码与编码信息之间的对应关系;
相应的,将笔顺信息相同的部件添加到同一聚类中,包括:
根据各个部件的序列码,将字形码相同的部件添加到同一聚类中。
如上所述的方法,优选的是,在建立部件的原始编码信息和合并后的编码信息之间的对应关系之后,还包括:
删除原始编码信息对应的部件的轮廓信息;
将字库中存储的原始部件编码信息替换为合并后的部件编码信息。
本发明还提供一种字库部件压缩装置,包括:
第一获取模块,用于获取字库中各个字符包含的部件的编码信息;
第二获取模块,用于获取所述字库中各个字符的笔顺信息;
确定模块,用于根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息;
合并模块,用于根据部件的笔顺信息,对字库中的各个部件进行相似性合并。
如上所述的装置,优选的是,所述确定模块,具体用于:
根据各个字符中的部件的编码信息,获取部件的轮廓信息;
根据各个部件的所述轮廓信息,确定各个部件的笔画数;
根据所述各个字符的笔顺信息以及字符中各个部件的笔画数,确定字符中包含的各个部件的笔顺信息。
如上所述的装置,优选的是,所述合并模块,具体用于:
将笔顺信息相同的部件添加到同一聚类中;
根据部件的轮廓信息,确定每一聚类中各部件之间的相似度;
在同一聚类中,若至少两个部件之间的相似度满足预设条件,则将所述至少两个部件进行合并,并建立部件的原始编码信息和合并后的编码信息之间的对应关系。
如上所述的装置,优选的是,所述确定模块还用于:
在确定各字符中包含的各个部件的笔顺信息之后,根据各个部件的笔顺信息,确定各个部件的序列码,所述序列码包括字形码及序号码,其中,笔顺信息相同的部件对应的字形码相同,对应的序号码不同;建立部件的序列码与编码信息之间的对应关系;
相应的,将笔顺信息相同的部件添加到同一聚类中,包括:根据各个部件的序列码,将字形码相同的部件添加到同一聚类中。
如上所述的装置,优选的是,所述合并模块还用于:
在建立部件的原始编码信息和合并后的编码信息之间的对应关系之后,删除原始编码信息对应的部件的轮廓信息;
将字库中存储的原始部件编码信息替换为合并后的部件编码信息。
本发明提供的字库部件压缩方法及装置,通过获取字库中各个字符包含的部件的编码信息以及所述字库中各个字符的笔顺信息,根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息,并根据部件的笔顺信息,对字库中的各个部件进行聚类并进行相似性合并,能够有效减少字库中的部件的个数,减少了部件占用的存储空间,有效减少了字库的整体数据量,且简单易行、复用性较好,有利于字库的应用和传输。
附图说明
图1为本发明实施例一提供的字库部件压缩方法的流程图;
图2为本发明实施例一提供的字库部件压缩方法中字符“龆”的部件组成示意图;
图3为本发明实施例一提供的字库部件压缩方法中字符“鳋”的部件组成示意图;
图4为本发明实施例一提供的字库部件压缩方法中部件库A中的部分部件的示意图;
图5为本发明实施例一提供的字库部件压缩方法中确定各个部件的笔顺信息的流程图;
图6为本发明实施例一提供的字库部件压缩方法中几组笔顺信息相同的部件的示意图;
图7为本发明实施例二提供的字库部件压缩方法的流程图;
图8为本发明实施例三提供的字库部件压缩装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供一种字库部件压缩方法。图1为本发明实施例一提供的字库部件压缩方法的流程图。如图1所示,本实施例中的方法,可以包括:
步骤101、获取字库中各个字符包含的部件的编码信息。
具体地,本实施例中的方法可以适用于手写风格的字库,所述字库可以为TrueType压缩字库,也可以为非压缩的TrueType字库,当然,也可以是其它类型的字库,本实施例对此不作限制。
字库中可以包括多个字符,每个字符可能由一个或者多个部件组成,在本步骤中,可以获取字库中所有字符包含的部件的编码信息,字库中每个部件的编码信息都是唯一的。
从字库中获取各个字符包含的部件的编码信息之后,可以制作所有字符的组成信息表,组成信息表中包括每一字符的Unicode编码和组成该字符的一个或者多个部件的编码信息。针对一个包括多个部件的字符来说,所述多个部件的编码信息的排列顺序根据部件在字符中的位置来确定,汉字书写原则为从左到右、从上到下,因此,各部件编码信息的排列顺序也为从左到右、从上到下依次排列。表1为本发明实施例一提供的字库部件压缩方法中字符的组成信息表示例。
表1字符的组成信息表
字符编码 |
部件编码 |
部件编码 |
部件编码 |
部件编码 |
4F65 |
8000778C |
— |
— |
— |
4E07 |
800075D2 |
— |
— |
— |
4F2B |
80006F72 |
80006FDA |
80007B0A |
80006F70 |
9F86 |
800072C6 |
800076BA |
— |
— |
9CCB |
8000706A |
800073D9 |
80007721 |
— |
…… |
…… |
…… |
…… |
…… |
如表1所示,每个字符可能包括一个或者多个部件。多个部件的编码信息的排列遵循汉字书写的笔顺原则。下面以两个例子来进行说明。
图2为本发明实施例一提供的字库部件压缩方法中字符“龆”的部件组成示意图。图3为本发明实施例一提供的字库部件压缩方法中字符“鳋”的部件组成示意图。图2和图3中的数字和字母用于表示字符或者部件的编码信息。
如图2所示,字符9F86(龆)包括部件800072C6和部件800076BA,按照汉字从左至右的书写原则,应该先写部件800072C6再写部件800076BA,因此,在表1中,部件800072C6排在800076BA前面。
如图3所示,字符9CCB(鳋)包括部件8000706A、部件800073D9和部件80007721,则按照汉字从左至右、从上至下的书写原则,表1中的部件按照8000706A、800073D9、80007721依次排列。
为了便于描述,可以在获取字库中所有部件的编码信息后,形成部件库A,部件库A中可以包括字库中所有部件的编码信息以及对应的轮廓信息,其中,所述轮廓信息可以是矢量图形数据,也可以是点阵数据。
图4为本发明实施例一提供的字库部件压缩方法中部件库A中的部分部件的示意图。如图4所示,数字代表部件的编码信息,数字下方的图案代表部件的轮廓信息。每个部件都有一个编码信息,同时对应一个轮廓信息,每个部件的编码信息都是唯一的,但是,不同部件的轮廓可能会很相似,甚至可以完全重合。
步骤102、获取所述字库中各个字符的笔顺信息。
具体地,可以首先获取字库中每个字符的编码信息,所述字符的编码信息可以为Unicode编码,然后根据字符的Unicode编码查找所述字符对应的笔顺信息。Unicode编码与笔顺信息的对应关系属于现有技术,此处不再详述。
或者,字符的笔顺信息也可以由人工输入。
本实施例中笔顺信息可以采用汉字笔顺序号式表示,其中,横、竖、撇、点、折五个基本笔画的序号可以分别用数字1、2、3、4、5表示,另外,提归为横,竖钩归为竖,捺归为点,各种折笔归为折,这样,可以用数字序列来表示每个字符的笔顺信息,方便后续处理。
步骤103、根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息。
图5为本发明实施例一提供的字库部件压缩方法中确定各个部件的笔顺信息的流程图。如图5所示,可以通过下述方法来确定字符中包含的各个部件的笔顺信息:
步骤1031、根据各个字符中的部件的编码信息,获取部件的轮廓信息。
步骤1031可以在步骤102之后执行,当然,也可以在步骤102之前执行,例如在步骤101的同时执行,本实施例对此不作限制。
步骤1032、根据各个部件的所述轮廓信息,确定各个部件的笔画数。
具体地,每一个笔画都由一个闭合的回路组成,通过确定部件中的闭合回路的个数,就可以确定部件的笔画数。
除了步骤1031和步骤1032给出的方法以外,还可以通过其它方式确定各个部件的笔画数,例如,可以通过人工输入的方式等。
步骤1033、根据所述各个字符的笔顺信息以及字符中各个部件的笔画数,确定字符中包含的各个部件的笔顺信息。
具体地,假设一个字符由i个部件组成,每个部件的笔画数分别为N1、N2……Ni,则该字符中前N1个笔画的信息为第一个部件的笔顺信息,第N1+1至第N2个笔画的信息为第二个部件的笔顺信息,依次类推。
图2中显示的字符“龆”的笔顺信息为2121345253251,而第一个部件800072C6的笔画数是8,则部件800072C6的笔顺信息为21213452,第二个部件800076BA的笔画数为5,则部件800076BA的笔顺信息为53251。
类似的,图3中显示的字符的“鳋”的笔顺信息为35251211544251214,其所包含的三个部件的笔画数分别为:8、3、6,则三个部件的笔顺信息分别为:35251211、544和251214。
在获取各个部件的笔顺信息后,可以将部件的编码信息与部件的笔顺信息对应存储起来。表2为图2和图3所示字符中的部件的笔顺信息表。
表2图2和图3中部件的笔顺信息表
部件的编码信息 |
部件的笔顺信息 |
800072C6 |
21213452 |
800076BA |
53251 |
8000706A |
35251211 |
800073D9 |
544 |
80007721 |
251214 |
步骤104、根据部件的笔顺信息,对字库中的各个部件进行相似性合并。
具体地,在某些对字符精度要求不高的情况下,笔顺信息相同的多个部件可以合并为一个部件,即从所有笔顺信息相同的部件中挑选一个,其余的部件均替换为被挑选出的部件;在某些对字符精度要求较高的情况下,可以在笔顺信息相同的多个部件中,选择相似度较高的部分部件进行合并。
图6为本发明实施例一提供的字库部件压缩方法中几组笔顺信息相同的部件的示意图。如图6所示,编码为5DF100、5DF101、5DF102、5DF103的部件的笔顺信息相同,这四个部件可以合并为一个,例如,仅保留部件5DF103的编码信息和轮廓信息,将部件5DF100、5DF101、5DF102的编码信息替换为5DF103。
将5DF100、5DF101、5DF102、5DF103合并为一个部件之后,只需要占用一个部件的存储空间即可,相对于现有技术来说,有效节省了字库的整体数据量。
表3为图6中部分部件的编码替换表。
表3部分部件的编码替换表
部件的原始编码信息 |
合并后的编码信息 |
2EA101 |
2EA100 |
53C802 |
53C801 |
53C803 |
53C801 |
53C800 |
53C801 |
592700 |
592701 |
本实施例提供的字库部件压缩方法,通过获取字库中各个字符包含的部件的编码信息以及所述字库中各个字符的笔顺信息,根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息,并根据部件的笔顺信息,对字库中的各个部件进行相似性合并,能够有效减少字库中的部件的个数,减少了部件占用的存储空间,有效减少了字库的整体数据量,且简单易行、复用性较好,有利于字库的应用和传输。
实施例二
本发明实施例二提供一种字库部件压缩方法。本实施例是在实施例一提供的技术方案的基础上,通过聚类来实现部件的合并。图7为本发明实施例二提供的字库部件压缩方法的流程图。如图2所示,本实施例中的方法,可以包括:
步骤201、获取字库中各个字符包含的部件的编码信息。
步骤202、获取所述字库中各个字符的笔顺信息。
步骤203、根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息。
步骤201至步骤203与实施例一中的步骤101至步骤103类似,此处不再赘述。
本实施例中,优选的是,在步骤203中确定各字符中包含的各个部件的笔顺信息之后,还可以根据各个部件的笔顺信息,确定各个部件的序列码,所述序列码可以包括字形码及序号码,其中,笔顺信息相同的部件对应的字形码相同,对应的序号码不同,序号码用于区分同一笔顺信息的不同部件,每一个部件具有唯一的序列码,这样可以形成部件库B。
步骤204、将笔顺信息相同的部件添加到同一聚类中。
具体地,不同的部件可能具有相同的笔顺信息,可以将这些笔顺信息相同的部件添加到同一聚类中。以图6为例,可以将部件5DF100、5DF101、5DF102、5DF103添加到一个聚类中,将部件2EA100、2EA101、2EA102、2EA103添加到另一个聚类中。
相应的,如果在步骤203之后,形成了部件库B,则在本步骤中,可以根据部件库B中的各个部件的序列码,将字形码相同的部件添加到同一聚类中,从而快速、准确地实现相同笔顺信息的部件的聚类。
步骤205、根据部件的轮廓信息,确定每一聚类中各部件之间的相似度。
按照两部件的轮廓信息对应图像像素点的匹配程度来确定其相似度,匹配程度越高其相似度越高,例如,若两个部件的轮廓信息有90%是重合的,则可以认为相似度为90%。
步骤206、在同一聚类中,若至少两个部件之间的相似度满足预设条件,则将所述至少两个部件进行合并,并建立部件的原始编码信息和合并后的编码信息之间的对应关系。
所述预设条件可以根据实际需要来设置,例如,所述预设条件可以为:所述至少两个部件中,任意两部件之间的相似度均大于90%。当满足预设条件后,所述至少两个部件可以合并为一个部件。若不满足预设条件,则不进行合并。
将至少两个部件合并,具体可以为:在所述至少两个部件中,选取其中一个作为待替换部件,将其余部件的编码信息替换为所述待替换部件的编码信息。此外,还可以建立这些部件的原始编码信息和合并后的编码信息的对应关系,还可以删除原始编码信息对应的轮廓信息,以减少存储空间。
本实施例提供的字库部件压缩方法,通过笔顺信息对部件进行聚类,能够快速、准确地实现部件之间的合并,提高了字库部件压缩的效率,同时也可以减少人工开发的工作量,降低成本,提高开发效率。
实施例三
本发明实施例三提供一种字库部件压缩装置。图8为本发明实施例三提供的字库部件压缩装置的结构框图。如图8所示,本实施例中的装置,可以包括:
第一获取模块301,用于获取字库中各个字符包含的部件的编码信息;
第二获取模块302,用于获取所述字库中各个字符的笔顺信息;
确定模块303,用于根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息;
合并模块304,用于根据部件的笔顺信息,对字库中的各个部件进行相似性合并。
本实施例中的字库部件压缩装置,可以用于执行实施例一所述的字库部件压缩方法,其具体实现原理与实施例一类似,此处不再赘述。
本实施例提供的字库部件压缩装置,通过获取字库中各个字符包含的部件的编码信息以及所述字库中各个字符的笔顺信息,根据各个字符的笔顺信息以及各个字符包含的部件的编码信息,确定各字符中包含的各个部件的笔顺信息,并根据部件的笔顺信息,对字库中的各个部件进行相似性合并,能够有效减少字库中的部件的个数,减少了部件占用的存储空间,有效减少了字库的整体数据量,有利于字库的应用和传输。
进一步的,所述确定模块303,具体可以用于:
根据各个字符中的部件的编码信息,获取部件的轮廓信息;
根据各个部件的所述轮廓信息,确定各个部件的笔画数;
根据所述各个字符的笔顺信息以及字符中各个部件的笔画数,确定字符中包含的各个部件的笔顺信息。
进一步的,所述合并模块304,具体可以用于:
将笔顺信息相同的部件添加到同一聚类中;
根据部件的轮廓信息,确定每一聚类中各部件之间的相似度;
在同一聚类中,若至少两个部件之间的相似度满足预设条件,则将所述至少两个部件进行合并,并建立部件的原始编码信息和合并后的编码信息之间的对应关系。
进一步的,所述确定模块303还可以用于:
在确定各字符中包含的各个部件的笔顺信息之后,根据各个部件的笔顺信息,确定各个部件的序列码,所述序列码包括字形码及序号码,其中,笔顺信息相同的部件对应的字形码相同,对应的序号码不同;建立部件的序列码与编码信息之间的对应关系;
相应的,将笔顺信息相同的部件添加到同一聚类中,包括:根据各个部件的序列码,将字形码相同的部件添加到同一聚类中。
进一步的,所述合并模块304还可以用于:
在建立部件的原始编码信息和合并后的编码信息之间的对应关系之后,删除原始编码信息对应的部件的轮廓信息;
将字库中存储的原始部件编码信息替换为合并后的部件编码信息。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。