一种字形识别方法及装置
技术领域
本发明涉及文字识别领域,具体涉及一种字形识别方法及装置。
背景技术
随着信息技术的发展,越来越多的书籍、报纸逐渐电子化,由原来的纸质图书转变成各种PC、手持设备的电子阅读器。在报社、出版社等行业,电子文档也成为了一种主流的阅读资源,便于打印和印刷。但是这些文档在生成过程中因为字体嵌入等原因可能导致没有字符编码或者字符编码并非标准编码(如UNICODE编码、GBK等),这类没有编码或非标准编码的文档在版式呈现时能正常显示,但文档在进行复制、搜索等功能时出现乱码,效果不佳。
为了解决上述问题,需要通过字形识别来获取正确的字符编码,提高用户体验。目前,一般是通过对这类文件进行转换优化来还原字符编码。还原字符编码的通用做法是:对文档进行逐页绘制,采用OCR技术对页面上的文字进行识别,把识别的文字结果放回到页面对应位置并隐藏,形成“双层PDF”或类似文档,从而提供文字复制、搜索功能。
上述字符编码还原办法的不足之处在于:需对文档进行逐页绘制并识别,同一页或不同页上的相同字符需要重复识别,从而导致效率低下,使得字形识别的时间成本过高。
发明内容
因此,本发明要解决的技术问题在于克服现有技术中的字形识别方法中识别效率低、时间成本高的缺陷。
本发明提供一种字形识别方法,包括如下步骤:
获取目标文档,提取目标文档中的字体信息及其对应的内嵌字体的字体数据;
按照字体名称对所述字体数据进行聚类,得到多个分类;
针对每个类别内的字体数据进行合并;
对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码;
根据所述编码还原目标文档中每个文字对应的编码。
优选地,所述按照字体名称对所述字体数据进行聚类的步骤,包括
将字体名称相同的字体数据聚合为一个类别。
优选地,所述针对每个类别内的字体数据进行合并的步骤包括:
删除重复的字形,生成合并的字体数据和字形索引;
建立所删除的字形对应的别名和字形索引与合并后的字形索引的对应关系,存入内嵌字体表。
优选地,对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码的步骤,包括:
对各个字形分别进行识别,记录下识别得到的字符编码作为该字形的标砖编码,形成字形编码对应表,加入内嵌字体表。
优选地,所述根据所述编码还原目标文档中每个文字对应的编码的步骤,包括:
对于目标文档中的各个文字,根据其对应的字体信息及内嵌字体表查找字体信息,根据所述字体信息查找标准编码,将查找到的标准编码加入文档中。
本发明提供一种字形识别装置,包括:
信息提取单元,用于获取目标文档,提取目标文档中的字体信息及其对应的内嵌字体的字体数据;
聚类单元,用于按照字体名称对所述字体数据进行聚类,得到多个分类;
合并单元,针对每个类别内的字体数据进行合并;
字形识别单元,对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码;
编码更新单元,根据所述编码还原目标文档中每个文字对应的编码。
优选地,所述聚类单元包括
将字体名称相同的字体数据聚合为一个类别。
优选地,所述合并单元包括
删除子单元,删除重复的字形,生成合并的字体数据和字形索引;
内嵌子单元,建立所删除的字形对应的别名和字形索引与合并后的字形索引的对应关系,存入内嵌字体表。
优选地,所述字形识别单元包括:对各个字形分别进行识别,记录下识别得到的字符编码作为该字形的标砖编码,形成字形编码对应表,加入内嵌字体表。
优选地,所述编码更新单元包括:对于目标文档中的各个文字,根据其对应的字体信息及内嵌字体表查找字体信息,根据所述字体信息查找标准编码,将查找到的标准编码加入文档中。
本发明技术方案,具有如下优点:
本发明提供的一种字形识别方法,获取目标文档,提取目标文档中的字体信息及其对应的内嵌字体的字体数据;按照字体名称对所述字体数据进行聚类,得到多个分类;针对每个类别内的字体数据进行合并;对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码;根据所述编码还原目标文档中每个文字对应的编码。该方案在现有技术的基础上,通过字体合并的方式,减少字形识别的时间,大幅提升字形识别的效率,以减少字形识别的时间成本,使其能更广泛的被应用。所有拥有内嵌字体数据的文档均可应用此方法进行处理,包括PDF、CEBX、OFD等。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中字形识别方法的流程图;
图2为本发明实施例2中字形识别装置的结构框图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
实施例1
本实施例中提供一种字形识别方法,用于对具有内嵌字体数据的版式文档进行处理,如PDF、CEBX、OFD等,该方法流程图如图1所示,包括如下步骤:
S1、获取目标文档,提取目标文档中的字体信息及其对应的内嵌字体的字体数据。
该步骤中,导入含字体信息与内嵌字体数据的文档,遍历所有页面,提取文档中各页面所有的字体信息(如字符对应的字宽、高等信息)与内嵌字体的字体数据(即内嵌字体文件),例如根据页面中字体信息对应的内嵌字体文件中的信息,可以获得字体的名称。此外,在字体信息也可以获取字体名称以及字体ps名称,此处获取的方式可以根据需要合理选择。记录字体名称与内嵌字体数据的对应关系,形成内嵌字体表,表中每项包括字体PS名称、字体名称、字形数据、字形索引等内容,具体格式形如表1所示。
表1:原始内嵌字体表
字体PS名称 |
字体名称 |
字体数据 |
字形索引表 |
PS_1 |
Font1 |
Data1 |
Map1 |
PS_2 |
Font1 |
Data2 |
Map2 |
PS_3 |
Font2 |
Data3 |
Map3 |
如对应某本PDF书籍,该步骤包括导入该PDF书籍文档,遍历所有页面,提取文档中各页面所有的字体信息与内嵌字体的字体数据,记录字体名称与内嵌字体数据的对应关系,形成内嵌字体表。即如附表1所示,整个PDF中所有页面共含有三个字体信息。
S2、按照字体名称对所述字体数据进行聚类,得到多个分类。其中,将字体名称相同的字体数据聚合为一个类别。
对内嵌字体表按字体名称进行聚类,每个类别中可能包括一个或多个具有相同字体名称但不同字体PS名称(PS名称为字体名称的一个别名)的内嵌字体数据,形如表2。
表2:聚类后的内嵌字体表
如将字体名称同为“Font1”的字体信息聚合在一起,将字体名称为“Font2”的字体信息聚合在一起,形成一张聚合后的内嵌字体表。
S3、针对每个类别内的字体数据进行合并。合并的过程包括:首先,删除重复的字形,生成合并的字体数据和字形索引;然后建立所删除的字形对应的别名和字形索引与合并后的字形索引的对应关系,存入内嵌字体表。
合并时,需要遍历聚类后形成的所有类别,对每个类别的多项内嵌字体数据进行合并。合并时,需要删除重复字形,生成合并后的内嵌字体数据及字形索引表,并记录合并前字体PS名称及其字形索引与合并后的字形索引的对应关系,即每个字体PS名称对应的新旧字形索引表,继而修改相应的内嵌字体表,如表3。对于只包含一项数据的类别,不进行合并操作。
表3:修改后的内嵌字体表
如将同为“Font1”的字体数据“Data1”和“Data2”进行合并,删除其中的重复字形,形成新的字体数据“MergeData1”以及新的字形索引表“MergeMap1”,并且记录下对应每个旧字体的新旧字形索引表“OldToNewMap1”与“OldToNewMap2”,例如,在“PS_1”对应的“Data1”字体数据中,文字“一”对应的字形索引为“1”,而在合并生成了子徒数据“MergeData1”后,文字“一”对应的字形索引为“5”,则在新旧字形索引表“OldToNewMap1”中,有一项即为“1→5”。对于只包含一项数据的类别,不进行合并操作。整个操作的结果如表2所示。
S4、对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码。该过程包括:对各个字形分别进行识别,记录下识别得到的字符编码作为该字形的标砖编码,形成字形编码对应表,加入内嵌字体表。
该步骤中,通过再次遍历所有类别,对每个类别合并生成的内嵌字体数据中各个字形逐个进行识别(即OCR),并记录下识别得到的字符编码,作为该字形的标准编码,形成字形编码对应表,并将其加入内嵌字体表中,形成最终的内嵌字体表,如表4所示。
表4:最终的内嵌字体表
例如对于字体“Font1”,我们对于“MergeData1”中的所有字形逐一进行识别,并记录下识别得到的字符编码,以形成字形编码对应表。如对于“MergeData1”中字形索引为“5”的字,我们字形识别的结果为其标准编码为“\u4e00”,则“OCRMap1”中有一项为“5→\u4e00”。最终形成的内嵌字体表如表4所示。
S5、根据所述编码还原目标文档中每个文字对应的编码。过程为,首先对于目标文档中的各个文字,根据其对应的字体信息及内嵌字体表查找字体信息,然后根据所述字体信息查找标准编码,将查找到的标准编码加入文档中。
具体为,遍历文档中所有页面,对于页面中的各个文字,根据其对应的字体信息及最终的的内嵌字体表找到相应的合并后的字体信息,进而根据其字体编码或字形索引,结合字体信息中的字形索引表、新旧字形索引表与字形编码对应表,查找其标准编码,把查找到的编码替换或追加到文档中的文字中。
如对于某页中的某个文字,其对应字体信息中字体PS名称为“PS_1”,其字形索引为1,则找到内嵌字体表中字体PS名称为“PS_1”的项,通过新旧字形索引表的到其新的字形索引为“5”,再到字形编码对应表中查到字形索引“5”对应的标准编码为“\u4e00”,便得到该文字对应的标准编码为“\u4e00”,最后将文档中该文字的字符编码修正或追加为“\u4e00”,完成该文字的字符编码纠正和更新。
本方案中,首先需要导入含字体信息的文档,遍历所有页面,并记录其中所有的字体信息(包括字体名称、字体PS名称等字体相关数据)与对应内嵌字体数据;接着,将拥有相同字体名称的字体信息聚类;接下来,将聚类的字体信息对应的内嵌字体数据进行合并,删除重复字形并记录合并前后字体数据对应关系;然后,对合并完成的字体数据中各个字形逐个进行识别(即OCR),并记录下识别后的编码(可以是Unicode或GBK等标准编码);最后,通过OCR结果还原文档中各个文字对应的字符编码。
该方案在现有技术的基础上,通过字体合并的方式,减少字形识别的时间,大幅提升字形识别的效率,以减少字形识别的时间成本,使其能更广泛的被应用。所有拥有内嵌字体数据的文档均可应用此方法进行处理,包括PDF、CEBX、OFD等。
实施例2:
本实施例中提供一种字形识别装置,结构框图如图2所示,包括:
信息提取单元01,用于获取目标文档,提取目标文档中的字体信息及其对应的内嵌字体的字体数据;
聚类单元02,用于按照字体名称对所述字体数据进行聚类,得到多个分类;
合并单元03,针对每个类别内的字体数据进行合并;
字形识别单元04,对每个类别中合并后的字体数据对应的各个字形进行分别识别,获得每个字形的编码;
编码更新单元05,根据所述编码还原目标文档中每个文字对应的编码。
其中,所述聚类单元包括将字体名称相同的字体数据聚合为一个类别。
所述合并单元包括删除子单元,删除重复的字形,生成合并的字体数据和字形索引;
内嵌子单元,建立所删除的字形对应的别名和字形索引与合并后的字形索引的对应关系,存入内嵌字体表。
所述字形识别单元包括:对各个字形分别进行识别,记录下识别得到的字符编码作为该字形的标砖编码,形成字形编码对应表,加入内嵌字体表。
所述编码更新单元包括:对于目标文档中的各个文字,根据其对应的字体信息及内嵌字体表查找字体信息,根据所述字体信息查找标准编码,将查找到的标准编码加入文档中。
该方案中,采用字体聚类的方式,通过字体合并,消减文本中的重复字形,减少进行字形识别的字形的数量,大幅提升字形识别的效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。