具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
以下将结合附图,对本申请实施例提供的方案进行详细描述。
在很多业务领域都需要对文件中的文本内容进行提取和处理,在对文本进行提取时,由于存在分栏排版的文本,因此在提取后的文本内容可能会产生混乱,导致文本内容不连贯,语意不清,特别是在对pdf格式的文件进行提取时非常容易产生上述问题。如图1所示,图1是本公开实施例的一种文件中原始文本的示意图,图1所示的个人简历中采用了左右分栏排版的方式,在采用现有技术中的工具对该文件中的原始文本进行提取后,提取得到的文本如图2所示,可以看到采用现有工具抽取的文本中,图1中左侧文本栏和右侧文本栏的文本内容相互穿插,失去了原本的语义结构,这样的文本不利于阅读,甚至导致误解,同时对后续文本的使用造成非常大的影响。
本公开的一些实施例中提出一种文本的提取处理方法,能够至少部分解决上述问题,图3是本公开实施例的一种文本的提取处理方法的流程图。如图3所示,本公开实施例的一种文本的提取处理方法包括
S11:对原始文本进行提取得到多个字段;
在一些实施例中,原始文本中的文本行沿第一方向延伸沿第二方向排布,文本行为同一行的文本,可以为横行也可以为纵行。在一些实施例中,第一方向为同一文本行中字符的书写方向,第二方向为不同文本行的排布方向,举例说明,如果原始文本中的书写方式为中国采用的从左到右,从上到下的书写方式,那么第一方向就是对应于从左到右的横向方向,第二方向就是对应于从上到下的纵向方向。在一些实施例中,字段由至少一个字符组成,字符包括文字也包括标点符号。以图1所示的原始文本为例,图1中的“个人简历”、“工作经历”、“个人职责”等语句为字段,在一些实施例中,字段中的所有字符位于原始文本的同一文本行,即字段中的所有字符在第二方向上的位置相同。
S12:从字段中选取标题字段,根据标题字段在第一方向上的位置对标题字段进行分组;
在一些实施例中,字段的类型包括标题字段和非标题字段。在文件中,常常会用标题对接下来的文本区块中的内容进行概括,标题字段作为各个文字区块的区块名称。例如图1中的“教育经历”、“基本信息”和“联系方式”等属于标题字段,而教育经历中的内容“2012.8~2016.7计算机专业xxx大学”、基本信息中的内容“生日:19xx.xx.xx,现居:四川成都,学历:硕士”、联系方式中的内容“电话:13111111111,邮箱:sample@sample.com”则是非标题字段。
在一些实施例中,原始文本为分栏文本,在非分栏文本中,标题字段一般是靠近左侧撰写,各个标题字段在第一方向上的位置部分重叠,而在分栏文本中,不同文本栏在第一方向上的位置往往互不重叠,因此不同文本栏中的标题字段在第一方向上的位置也不重叠。以图1所示的目标文本为例,图1中的第一方向为横向,在横向方向上设置了左右两个分栏,每一个分栏中均有标题字段,不同分栏中的标题字段在横向上的位置不同,例如图1中左侧文本栏中的标题字段“基本信息”与图1中右侧文本栏中的标题字段“工作经历”,这两个标题字段在横向上的位置不同且没有任何重叠。在一些实施例中,通过执行步骤S12可以将各个标题字段分配到不同的文本栏中,在执行S12后得到至少1个分组,每一个分组对应一个文本栏,同一个文本栏中的各个标题字段位于同一分组内。
S13:根据非标题字段在第一方向上的位置,将非标题字段分配到各个分组。
在一些实施例中,除了标题字段以外的字段均为非标题字段。在执行步骤S12后得到分组,步骤S13用于建立非标题字段与分组的联系。在一些实施例中,原始文本为分栏文本,因此各个非标题字段也可能位于不同的文本栏中,例如图1中左侧的“期望职位”位于左侧的文本栏,而图1中右侧的“2012.8~2016.7计算机专业xxx大学”位于右侧的文本栏。在一些实施例中,每一个分组对应于一个文本栏,步骤S13用于将非标题字段分配到其在原始文本中所在的文本栏所对应的分组中,这样每一个分组中就包括了该分组对应的文本栏中的所有字段,从而将不同文本栏中的字段相互区分开,如图1所示,可以将图1中左侧文本栏中的所有内容分配到第一分组,将图1中右侧文本栏中的所有内容分配到第二分组,从而实现分栏文本中不同文本栏内容的相互区分。
S14:对分组内的字段进行排序得到分组的文本,将各个分组的文本组合得到目标文本。
在一些实施例中,通过执行步骤S13得到了对应于不同文本栏的分组,因此已经实现了不同文本栏的内容的区分,再对分组内的字段进行排序就可以得到该分组对应的分栏的内容,通过对分组的文本组合即可得到各个分栏的内容互不影响的目标文本。在一些实施例中,按照各个分组对应的分栏在第一方向的位置顺序对各个分组的文本依次排布组合得到目标文本,例如在目标文本中将图1中左侧分栏的内容显示在右侧分栏的内容的前方。
举例说明,以图1所示的目标文本为例,图1中第一方向为横向,第二方向为纵向,从图1所示的目标文本中提取得到多个字段,字段分为标题字段和非标题字段,根据标题字段在横向上的位置对标题字段进行分组,可以分为第一组和第二组,第一组对应左侧分栏的文本内容,第二组对应右侧分栏的文本内容,将非标题字段根据在横向上的位置分配到上方得到的分组中从而实现了不同分栏中的文本内容区分,再将各个分组中的字段按照在图1中横向和纵向上的顺序排序后即可得到分组的文本,一个分组的文本对应于一个文本栏中的内容,这样每一个分组的文本中不会掺入其他文本栏的内容,再将不同文本栏的内容组合即可得到最后需要得到的目标文本栏,最终结果如图4所示,从图4可以看到图1中左侧文本栏的内容,与图1中右侧文本栏的内容相互区分开,互不干涉,从而解决了现有技术中提取文本后左侧文本栏和右侧文本栏的文本相互穿插,失去了原本的语义结构的问题。
在本公开的一些实施例中,根据标题字段和非标题字段在第一方向上的位置,对各个字段进行分组,从而将位于不同文本栏的内容相互区分,再将区分后的分组的文本组合得到目标文本,解决了现有技术中提取分栏文本后不同文本栏的内容相互干涉导致的文本内容不连贯、语义不完整以及语义混乱的问题。
在本公开的一些实施例中,对原始文本进行提取得到多个字段,包括:提取原始文本中的各个字符,根据字符的位置信息对字符进行拼接得到各个字段;其中,任一字段中具有至少一个字符。具体的,字符可以包括文字和符号,字段中的字符可以是连续的字符,字段中的字符在原始文本中的位置可以反映字符中的字符是否连续,因为不连续的字符在第一方向或第二方向上的位置将产生较大的差别。以图1为例,第一方向为横向,第二方向为纵向,对“教育经历”这一字段,如果采用坐标值表示各个字符在原始文本中的位置,那么该字段中相邻的各个字符在横坐标差值不会太大,而该字段中各个字符的纵坐标将相等。
在本公开的一些实施例中,对原始文本进行提取得到多个字段,提取原始文本中的各个字符,根据字符在原始文本中的位置信息和字符属性对字符进行拼接得到各个字段;其中,任一字段中具有至少一个字符。在一些实施例中,字符属性包括字体、字号、字体颜色、字体粗细或字符所在页中的至少一个。在一些实施例中,字段为原始文本同一行中连续的文段,通常连续的文段内容会采用相同的格式进行撰写,即具有相同的字符属性,例如采用同样的字体、颜色和字号,而不同的字段则可能采用不同的字符属性,例如在文本中标题往往会采用比内容更大的字体且通常会进行加粗,因此,在从原始文本中提取得到多个字段时,除了可以通过位置信息确定各个字符是否属于同一字段外,还可以通过对比字符的字符属性提高判断的准确性。
在本公开的一些实施例中,根据字符的位置信息对字符进行拼接得到各个字段,包括:将在第二方向上位置相同且在第一方向上位置连续的各个字符,按照在第一方向上的位置顺序进行拼接得到字段,其中,不同字段中的字符在第二方向上的位置不同或者在第一方向上的间隔距离不小于距离阈值。具体的,在一些实施例中,字段为原始文本中任一行连续的文段内容,因此需要限定字段中的字符在第二方向上位置相同,即位于同一行,一个字段中的各个字符属于原始文本中的同一文本栏,位于不同文本栏的字符不能位于同一字段中,因此需要限定字段中的字符在第一方向上位置连续,从而避免不同文本栏中的字符分配到同一字段,由于不同文本栏之间往往具有较大的留白,所以位于不同文本栏的字符在第一方向上位置的间隔距离必然大于留白在第一方向上的长度,因此不同字段中的字符在第二方向上的位置不同或者在第一方向上的间隔距离不小于距离阈值,其中,距离阈值可以是原始文本中不同文本栏间的留白在第一方向上的宽度值。
在一些实施例中,根据字符在原始文本中的位置信息和字符属性对字符进行拼接得到各个字段,包括:将在第二方向上位置相同、在第一方向上位置连续且字符属性相同的各个字符,按照在第一方向上的位置顺序进行拼接得到字段,其中,不同字段中的字符在第二方向上的位置不同或者在第一方向上的间隔距离不小于距离阈值,任一字段中的各个字符的字符属性相同。具体的,在本实施例中,结合了字符属性确定各个字符是否属于为同一字段,因为不同字段的内容可能采用不同的字符属性,但相同字段的字符必然采用相同的字符属性。
举例说明,以图1所示的目标文本为例,第一方向为横向,第二方向为纵向,通过提取字符得到“基”、“本”、“信”、“息”、“教”、“育”、“经”、“历”这些字符,在根据字符在原始文本中的位置信息和字符属性对字符进行拼接时,“基”、“本”、“信”、“息”这四个字符在纵向上位置相同,即位于同一行,这四个字符在横向上位置连续,并且采用同样的字体、字号和粗细,即具有相同的字符属性,因此将这四个字符按照在横向的顺序进行拼接得到“基本信息”这一字段,同样可以得到“教育经历”这一字段,“基本信息”与“教育经历”位于不同的行,即在纵向上的位置不同,并且“基本信息”中任一字符与“教育经历”中任一字符在横向上位置的间隔距离不小于图1中部的留白宽度,所以这八个字符不能拼接为同一字段,而需要分为两个字段。,
在本公开的一些实施例中,字段两端的字符在原始文本的第一方向上的位置所限定的区间,为字段对应的在第一方向上的第一位置范围;分组对应有在第一方向上的第二位置范围,第二位置范围为分组内所有字段的第一位置范围的并集;各个分组的第二位置范围互不重叠。
举例说明,如图1所示,图1中横向为第一方向,纵向为第二方向,“基本信息”这一字段的两端的字符分别为“基”和“息”,这两个字在横向上所限定的区间为该字段的第一位置范围,如果采用坐标标识,那么“基”对应的横坐标为x-left,“息”对应的横坐标为x-right,“基本信息”这一字段的第一位置范围就是[x-left,x-right],对于任意一个分组,分组中可能有多个字段,各个字段的第一位置范围的并集为该分组的第二位置信息[x-left,x-right],因此该分组的第二位置信息中的x-left可以是该分组内所有字段的x-left的最小值,该分组的第二位置信息中的x-right可以是该分组内所有字段的x-right的最大值。在本实施例中,各个分组的第二位置范围互不重叠,这是因为不同文本栏在第一方向上间隔有一定的留白,因此位于不同文本栏的标题字段在第一方向上的第一位置范围必然不会重叠,所以不同分组的第二位置范围也就不会产生重叠,同时也保证了位于同一文本栏的各个标题字段被分配到了同一分组内,以图1为例,通过限定各个分组的第二位置范围互不重叠,保证了“基本信息”和“联系方式”必然位于同一分组而不会位于不同的分组。
在本公开的一些实施例中,根据标题字段在第一方向上的位置对标题字段进行分组,包括:
对各个标题字段执行第一分组操作,其中,第一分组操作包括:若不存在分组或各个分组的第二位置范围与当前标题字段的第一位置范围均不重叠,则创建分组并将当前标题字段加入所创建的分组;若存在第二位置范围与当前标题字段的第一位置范围至少部分重叠的目标分组,则将当前标题字段加入目标分组;
若存在第二位置范围至少部分重叠的至少2个分组,则对第二位置范围至少部分重叠的各个分组进行合并,直到各个分组的第二位置范围互不重叠。
具体的,本实施例中的当前标题字段为任一被执行第一分组操作的字段,在本实施例中可以遍历各个标题字段,对每次被遍历到的标题字段执行第一分组操作,此时被遍历到的标题字段就是当前标题字段。在一些实施例中,在当前标题字段被执行第一操作时,先判断是否存在已有的分组,如果没有则创建分组并将当前标题字段加入;如果已经有分组,则判断当前标题字段在第一方向上的第一位置范围与分组的第二位置范围是否存在不为零的交集,如果存在就将当前标题字段加入该分组;否则创建分组并将当前标题字段加入,这样可以保证所有位于不同文本栏的标题字段都被分配到了不同分组内。在对每一个标题字段执行了第一分组操作后,可能存在两个或多个分组的第二位置范围部分重叠的情况,这表明原始文本中同一文本栏的各个标题可能被了两个分组内,因此需要对第二位置范围重叠的各个分组合并为一个分组,直到各个分组的第二位置范围互不重叠,从而保证位于同一文本栏的标题字段被分配到同一分组。
举例而言,请参考图1,假设已经有了第一分组和第二分组,第一分组包括“基本信息”,此时要对“联系方式”这一标题字段进行第一分组操作,“联系方式”作为当前标题字段,判断现在已经有了分组,因此对比“联系方式”的第一位置范围与已有分组的第二位置范围是否重叠,因为“联系方式”与“基本信息”在横向上的位置部分重叠,即标题文本的第一位置范围与分组的第二位置范围的至少部分重叠,因此将“联系方式”加入第一分组。对其他各个标题字段都执行上述第一分组操作后,对于判断各个分组的第二位置范围是否重叠,如果存在第二位置范围至少部分重叠的分组,则进行合并,直到各个分组的第二位置范围互不重叠,从而将图1中左侧文本栏的所有标题字段分配到一个分组,将图1中右侧文本栏的标题字段分到另一分组。
在一些实施例中,根据非标题字段在原始文本的第一方向上的位置,将非标题字段分配到各个分组,包括:对各个非标题字段执行第二分组操作;
其中,第二分组操作包括:
若各个分组的第二位置范围与当前非标题字段的第一位置范围均不重叠,则确定当前非标题字段在第二方向上的位置相比于各个分组内各个字段在第二方向上的位置是否更接近原始文本的起始位置;
若是,则创建分组并将当前非标题字段加入所创建的分组;
若否,则将当前非标题字段加入与当前非标题字段在第一方向和第二方向上最接近的分组。
具体的,在一些实施例中,可以通过循环遍历的方式对各个非标题字段执行第二分组操作。在一些实施例中,执行第二分组操作是为了将原始文本中同一文本栏的字段分配到同一分组中,因此通过比对非标题字段的第一位置范围和分组的第二位置范围。
在一些实施例中,对各个分组内的字段进行排序得到各个分组的文本,包括:根据分组内各个字段在原始文本的第一方向和第二方向上的位置,对分组内各个字段进行排序得到分组的文本。具体的,最终得到的目标文本中展示的内容应当符合语法阅读顺序,同一分组中的各个字段需要按照符合语法阅读顺序的方式进行排布,因此需要基于各个字段在原始文本中的位置进行排序。
在一些实施例中,根据分组内各个字段在原始文本中第一方向和第二方向上的位置,对分组内各个字段进行排序,包括:将当前分组中在第二方向上位置相同的字段按照在第一方向上的位置顺序进行拼接,得到至少一个目标文本行;将各个目标文本行按照在第二方向上的位置顺序进行排布,得到当前分组的文本。
在一些实施例中,当前分组为任一分组,对各个分组都执行上述步骤。举例说明,请参考图1,图1中第一方向为横向,第二方向为纵向,假设图1中左侧文本栏的文本内容位于第一分组,右侧文本栏的文本内容位于第二分组,第一分组中具有“期望职位:”和“算法工程师”这两个字段,这两个字段在第一分组的纵向反向的位置相同,即位于同一行,在横向上“期望职位:”位于“算法工程师”的右侧,遗传你在拼接时也应将“期望职位:”放置在“算法工程师”的右侧,得到“期望职位:算法工程师”这一个目标文本行,通过执行上方步骤得到了多个目标文本行,根据各个目标文本行在原始文本纵向上位置顺序进行排布,例如“期望职位:算法工程师”在原始文本中位于“基本信息”的上方,则对目标文本进行排布后“期望职位:算法工程师”仍然位于“基本信息”的上方,然后得到第一分组的文本。
在一些实施例中,将各个分组的文本组合得到目标文本,包括:根据各个分组的参考位置在第二方向上的位置顺序,对各个分组的文本进行组合,其中,分组中在第二方向上最靠近原始文本起始位置的字段为参考字段,参考字段在第二方向上的位置为分组的参考位置。
具体的,在一些实施例中,一个分组对应于分栏文本中的一个文本栏,此时参考字段就是文本栏中最靠近原始文本起始位置的字段,参考字段在第二方向上的位置也就表示了该文本栏最先出现的位置,根据参考位置对各个分组的文本进行组合相当于按照各个文本栏的出现顺序对各个分组的文本进行组合。在一些实施例中,如果存在参考位置相同的分组,则按照分组中参考字段在第一方向上的位置顺序对分组的文本进行组合。
举例说明,假设图1中左侧文本的内容栏对应第一分组,右侧文本栏的内容对应第二分组,左侧文本栏与右侧文本栏的参考位置相同,因此按照从左到右的顺序先显示左侧文本栏对应的第一分组的文本,再显示右侧文本栏对应的第二分组的文本。
为了更好的说明本公开实施例中提出的文本的提取处理方法,以下提出一个具体的实施例。在本实施例中,以图1所示的内容为原始文本,以原始文本所在的文件是pdf格式为例,以图1中的从左到右的横向为x轴正方向,图1中从上到下的纵向为y轴正方向。
第一步:执行字符检测
可以通过pdfbox等工具提取得到pdf文件中所有字符的相关信息,包括:text(字符内容),x坐标(x)、y坐标(x)、字体(font_name)、字体大小(font_size)、字体颜色(font_color)、是否粗体(bold)、所在页数(page)。pdf文件的部分抽取结果详见表1。
表1
第二步:segment(字段)生成
按第一步抽取出来的顺序,将连续的且<y,font_name,font_size,font_color,bold,page>相同的字符合并为segment(字段),同时y相同的不同字段的字符的x差值部小于距离阈值,将各个连续字符的text值,拼接作为segment的text,segment中首个字符的x值作为segment的x_left,segment中最后一个字符的x值作为segment的x_right,同时segment继承在其内的字符的<y,font_name,font_size,font_color,bold,page>属性。
如上表1中的“教”“育”“经”“历”“”这几个字符是连续的,且<y,font_name,font_size,font_color,bold,page>属性相同,则会合并为一个segment,合并后的segment见表2。
表2
text |
x_left |
x_right |
y |
fontName |
fontSize |
fontColor |
bold |
page |
教育经历 |
83.14733 |
102.90285 |
48.942017 |
MXUIGC+DengXian-Bold |
58 |
0 |
True |
0 |
第三步:具有版面语义的区块segment(标题字段)识别
pdf文件中的文本内容都是具有语义结构的,比如教育经历相关的内容通常会放在以“教育经历”作为标题字段中。通过机器学习模型或规则的方法可以识别带有这种特殊语义的segment,定义为区块segment(标题字段)。
第四步:将区块segment(标题字段)分组
本步骤用于将所有的区块分成互不相交的一个或多个分组,每个分组包括两部分内容:
a)<x_left,x_right>属性,表示这个分组下的segment(字段)中的字符在x轴方向上两端的位置;
b)一个segment集合,即表示关联到这个分组的segment。
具体过程:
1.遍历所有的区块segment,对每一个区块segment执行如下第一分组操作:
a)如果当前存在分组,则遍历各个分组,若区块segment的[x_left,x_right]和分组的[x_left,x_right]有交集,即表示区块segment和分组在x轴上的投影有交集,则将该区块segment添加到分组的segment集合中,同时,如果区块segment的x_left小于分组的x_left,则将分组的x_left更新为segment的x_left,如果区块segment的x_right大于分组的x_right,则将分组的x_right更新为区块segment的x_right。
b)如果当前不存在分组或当前区块segment和任何现有的分组都在x轴方向上都没有交集,则新建一个分组,将该区块segment的x_left、x_right设置为分组的x_left、x_right,并将区块segment添加到分组的segment集合中。
2.对生成的分组进行合并
如果分组只有一个则跳过本步;
当存在大于一个分组时,循环以下步骤对分组进行合并,直到没有合并操作为止:如果两个分组的[x_left,x_right]有交集,则合并这两个分组,并用较小的x_left和较大的x_right更新<x_left,x_right>,合并两个分组的segment集合,同时记录一次合并操作。
第五步将普通segment(非标题字段)关联到分组上
1.循环遍历所有普通segment,执行如下第二分组操作,直到某次遍历时没有segment关联到分组上或者所有segment都关联到分组上:
如果segment的[x_left,x_right]和分组的[x_left,x_right]有交集,即表示区块segment和分组在x轴方向上的投影有交集,则将该segment添加到分组的segment集合中,同时,如果segment的x_left小于分组的x_left,则将分组的x_left更新为segment的x_left,如果segment的x_right大于分组的x_right,则将分组的x_right更新为segment的x_right。
2.对于没有关联到分组上的segment,执行如下操作:
计算各个分组的segment集合中最小的segment的y值,如果有待关联segment的y比所有分组中最小的y值都还要小,则将所有的这类segment放入一个新增的分组中;对于其他的segment,将其关联到在x和y坐标轴方向上距离最近的一个分组。
第六步:目标文本生成
1.计算各个分组的segment集合中最小的y值,并按升序排序;
2.遍历每个分组,将具有相同y值的segment归并到一个目标文本行中,按从小到大的顺序遍历所有的y,对每个y,将目标文本行中的segment按照segment的x_left进行升序排序,并所有segment的text内容拼接起来,得到一行的文本内容。最终每个分组得到排好序的多行文本作为分组的文本。
3.将各个分组的文本各个分组的segment集合中最小的y值的升序顺序,组装得到最终的目标文本。最终得到的目标文本如图4所示。
如图5所示,本公开实施例还提供一种文本的提取处理装置,包括:
提取单元10,用于对原始文本进行提取得到多个字段,其中,所述原始文本中的文本行沿第一方向延伸沿第二方向排布;
分组单元20,用于从所述字段中选取标题字段,根据所述标题字段在所述第一方向上的位置对标题字段进行分组;
分配单元30,用于根据非标题字段在所述第一方向上的位置,将所述非标题字段分配到各个分组;
合成单元40,用于对所述分组内的字段进行排序得到所述分组的文本,将各个所述分组的文本组合得到目标文本。
对于装置的实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离模块说明的模块可以是或者也可以不是分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上,基于实施例和应用例说明了本公开的文本的提取处理方法及装置。此外,本公开还提供一种终端及存储介质,以下说明这些终端和存储介质。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备(例如终端设备或服务器)800的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图中示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备800可以包括处理装置(例如中央处理器、图形处理器等)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储装置808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM803中,还存储有电子设备800操作所需的各种程序和数据。处理装置801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
通常,以下装置可以连接至I/O接口805:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置806;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置807;包括例如磁带、硬盘等的存储装置808;以及通信装置809。通信装置809可以允许电子设备800与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备800,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置809从网络上被下载和安装,或者从存储装置808被安装,或者从ROM 802被安装。在该计算机程序被处理装置801执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述的本公开的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,包括:
对原始文本进行提取得到多个字段,其中,所述原始文本中的文本行沿第一方向延伸沿第二方向排布;
从所述字段中选取标题字段,根据所述标题字段在所述第一方向上的位置对标题字段进行分组;
根据非标题字段在所述第一方向上的位置,将所述非标题字段分配到各个分组;
对所述分组内的字段进行排序得到所述分组的文本,将各个所述分组的文本组合得到目标文本。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,对原始文本进行提取得到多个字段,包括:
提取所述原始文本中的各个字符,根据所述字符的位置信息对所述字符进行拼接得到各个所述字段;
或者,
提取所述原始文本中的各个字符,根据所述字符在原始文本中的位置信息和字符属性对所述字符进行拼接得到各个所述字段;
其中,任一所述字段中具有至少一个字符。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,根据所述字符的位置信息对所述字符进行拼接得到各个所述字段,包括:将在第二方向上位置相同且在第一方向上位置连续的各个字符,按照在第一方向上的位置顺序进行拼接得到所述字段,其中,不同字段中的字符在第二方向上的位置不同或者在第一方向上的间隔距离不小于距离阈值;
或者,
根据所述字符在原始文本中的位置信息和字符属性对所述字符进行拼接得到各个所述字段,包括:将在第二方向上位置相同、在第一方向上位置连续且字符属性相同的各个字符,按照在第一方向上的位置顺序进行拼接得到所述字段,其中,不同字段中的字符在第二方向上的位置不同或者在第一方向上的间隔距离不小于距离阈值,任一字段中的各个字符的字符属性相同。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,所述字符属性包括字体、字号、字体颜色、字体粗细或字符所在页中的至少一个。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,所述字段两端的字符在原始文本的第一方向上的位置所限定的区间,为所述字段对应的在第一方向上的第一位置范围;
所述分组对应有在所述第一方向上的第二位置范围,所述第二位置范围为所述分组内所有字段的第一位置范围的并集;
各个所述分组的第二位置范围互不重叠。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,根据所述标题字段在所述第一方向上的位置对标题字段进行分组,包括:
对各个所述标题字段执行第一分组操作,其中,所述第一分组操作包括:若不存在分组或各个分组的第二位置范围与当前标题字段的第一位置范围均不重叠,则创建分组并将所述当前标题字段加入所创建的分组;若存在第二位置范围与当前标题字段的第一位置范围至少部分重叠的目标分组,则将所述当前标题字段加入所述目标分组;
若存在第二位置范围至少部分重叠的至少2个分组,则对第二位置范围至少部分重叠的各个分组进行合并,直到各个所述分组的第二位置范围互不重叠。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,根据非标题字段在所述原始文本的第一方向上的位置,将所述非标题字段分配到各个分组,包括:
对各个所述非标题字段执行第二分组操作;
所述第二分组操作包括:
若各个分组的第二位置范围与当前非标题字段的第一位置范围均不重叠,则确定所述当前非标题字段在第二方向上的位置相比于各个分组内各个字段在第二方向上的位置是否更接近原始文本的起始位置;
若是,则创建分组并将所述当前非标题字段加入所创建的分组;
若否,则将所述当前非标题字段加入与所述当前非标题字段在第一方向和第二方向上最接近的分组。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,对各个所述分组内的字段进行排序得到各个所述分组的文本,包括:
根据所述分组内各个字段在原始文本的第一方向和第二方向上的位置,对所述分组内各个字段进行排序得到所述分组的文本。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,根据所述分组内各个字段在原始文本中第一方向和第二方向上的位置,对所述分组内各个字段进行排序,包括:
将当前分组中在第二方向上位置相同的字段按照在第一方向上的位置顺序进行拼接,得到至少一个目标文本行;
将各个所述目标文本行按照在第二方向上的位置顺序进行排布,得到所述当前分组的文本。
根据本公开的一个或多个实施例,提供了一种文本的提取处理方法,将各个分组的文本组合得到目标文本,包括:
根据各个所述分组的参考位置在第二方向上的位置顺序,对各个分组的文本进行组合,其中,所述分组中在第二方向上最靠近原始文本起始位置的字段为参考字段,所述参考字段在第二方向上的位置为所述分组的参考位置。
根据本公开的一个或多个实施例,提供了一种一种文本的提取处理装置,包括:
提取单元,用于对原始文本进行提取得到多个字段,其中,所述原始文本中的文本行沿第一方向延伸沿第二方向排布;
分组单元,用于从所述字段中选取标题字段,根据所述标题字段在所述第一方向上的位置对标题字段进行分组;
分配单元,用于根据非标题字段在所述第一方向上的位置,将所述非标题字段分配到各个分组;
合成单元,用于对所述分组内的字段进行排序得到所述分组的文本,将各个所述分组的文本组合得到目标文本。
根据本公开的一个或多个实施例,提供了一种终端,包括:至少一个存储器和至少一个处理器;
其中,所述至少一个存储器用于存储程序代码,所述至少一个处理器用于调用所述至少一个存储器所存储的程序代码执行上述中任一项所述的方法。
根据本公开的一个或多个实施例,提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行上述的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。