跳转到主要内容ABBYY FineReader Engine 处理的是纯文本,即不包含文本框、表格等内容。所有字符均为 Unicode。纯文本可能包含以下特殊字符:
- 0x2028 — 换行符
- 0x2029 — 段落分隔符
- 0xFFFC — 对象替换字符 (表示文本中的嵌入图片)
- 0x0009 — 制表符
- 0x005E — 脱字符 (^);ABBYY FineReader Engine 用它来替代无法识别的字符
- 0x00AC — 软连字符
文本的属性和格式信息可通过相应的对象和属性获取。您可以通过文档的页面布局 (IFRPage::Layout 属性) 访问已识别文本。
只有文本块、表格块和条码块在识别后包含文本,其他块不包含文本。Text 对象用于访问文本块和表格块中的已识别文本,而 BarcodeText 对象用于访问条码块中的文本。
要访问块中的已识别文本,请执行以下操作:
使用 ITextBlock::Text 属性。
使用 IBarcodeBlock::BarcodeText 或 IBarcodeBlock::Text 属性获取条码文本。前者返回 BarcodeText 对象,它是已识别条码中各个字符 (BarcodeSymbol 对象) 的集合。后者将条码文本作为单个 string 返回。
Text object 包含一个段落集合。该集合是一个 Paragraphs object,可通过 Text object 的 Paragraphs 属性访问。Paragraphs object 是由多个 Paragraph object 组成的集合。已识别文本可通过 IParagraph::Text 属性获取。该属性中的文本是 Unicode string。
此外,还有一个 ParagraphParams object,其中包含整个段落的特定属性,例如对齐方式和缩进信息。该 object 可通过 IParagraph::ExtendedParams 属性访问。
IParagraph::Lines 属性用于访问段落行的集合,该集合由 ParagraphLines object 表示,而后者又是由多个 ParagraphLine object 组成的集合。后者提供有关单个段落行几何位置的信息,因此表示文本的分行情况。
IParagraph::Words 属性用于访问段落中单词的集合,该集合由 Words object 表示,它是由多个 Word object 组成的集合。Word object 用于访问段落中的单个单词。
文本中的每个字符都有各自的参数。可通过 CharParams 对象访问这些参数。CharParams 对象包含大量字符属性,例如几何参数、字体和语言。CharParams 对象在 SelectedCharacterRecognitionVariant 属性中包含字符本身。另请参阅下文的 纯文本,了解获取文档中所有字符信息的推荐方法。
字符在文本中的位置由其所在段落的索引以及它在该段落中的索引定义。文本中还存在一种所谓的“特殊位置”:段落索引等于段落总数,而字符索引为 0。这表示文本末尾的插入点。Text 对象的某些方法会对此特殊位置执行操作,例如在其中插入另一个文本片段或图片。
CharParams 对象的 SelectedCharacterRecognitionVariant 属性可访问一组特定于单个字符的扩展属性,这些属性由 CharacterRecognitionVariant 对象表示。这些属性在识别过程中设置,提供一些该字符特有的内部识别信息。具体来说,该对象可提供更精确的信息,例如字符识别的置信度、该字符采用衬线字体的概率等。
你可以尝试更改 Text 对象的属性,但如果要将文本导出为外部格式,则必须非常谨慎。ABBYY FineReader Engine 的导出方法默认已识别文本是识别过程的结果,并且用户仅修正了识别错误,未做任何其他更改。Text 组中的对象具有许多相互依赖的属性,而且修改其中某个属性时,往往也需要同时修改其他属性。因此,更改已识别文本的属性有时可能会导致不可预测的导出结果。
您还可以通过一种特殊的“纯文本”格式访问文档或页面的完整已识别文本,该格式由 PlainText 对象表示。它仅提供有关已识别文本字符、其识别置信度以及相对于源图像的位置的信息。不过,如果您需要访问大型文档中所有字符的这些属性,这种格式会很有用。在适用于 Windows 的 FRE 中:使用其 GetCharacterData 方法,该方法允许您一次性获取所有字符的数据,并在本地对其进行迭代。遍历所有文本块会明显更耗时,尤其是在应用程序通过 DCOM 运行时。
处理 Layout 和 Blocks
处理语言
使用投票算法