处理文本
ABBYY FineReader Engine 处理的文本是纯文本,即不包含框架、表格等等。所有字符均为 Unicode。纯文本可以包含以下特殊字符:
- 0x2028 — 断行符号
- 0x2029 — 分段符号
- 0xFFFC — 对象替代字符(表示文本内的嵌入图片)
- 0x0009 — 制表
- 0x005E — 抑扬音符号 (^),被 ABBYY FineReader Engine 用来替代未识别字符
- 0x00AC — 软连字符
文本的属性和格式可以通过相应的对象和属性提供。您可以通过页面布局来访问文档的已识别文本(IFRPage::Layout 属性)。
布局中的已识别文本
识别后只有文本、表格和条形码块包含文本。其它块没有文本。Text 对象可提供对文本和表格块中已识别文本的访问,而 BarcodeText 对象可提供对条形码块中文本的访问。
若要访问块的已识别文本,请执行以下操作:
- 文本块
使用 ITextBlock::Text 属性。
- 表格块
- 使用 ITableBlock::Cells 属性接收表格单元格的集合。
- 选择所需的单元格。使用 TableCells 对象的方法。
- 接收单元格的块对象 (ITableCell::Block 属性)。
- 检查块属于类型 BT_Text (IBlock::Type 属性)并使用 IBlock::GetAsTextBlock 方法接收 TextBlock 对象。
- 使用 ITextBlock::Text 属性。
- 条形码块
使用 IBarcodeBlock::BarcodeText 或 IBarcodeBlock::Text 属性接收条形码块。第一个会返回 BarcodeText 对象,这是已识别条形码的字符集合(BarcodeSymbol 对象)。第二个会将条形码的文本作为一个字符串返回。
文本和段落
Text 对象包含一个段落集合。该集合是一个 Paragraphs 对象,可通过 Text 对象的 Paragraphs 属性进行访问。Paragraphs 对象是一个 Paragraph 对象的集合。已识别文本可通过 IParagraph::Text 属性进行访问。属性中的文本是一个 Unicode 字符串。
还存在一个 ParagraphParams 对象,它包含具体针对整个段落的属性,例如对齐和缩进信息。该对象可通过 IParagraph::ExtendedParams 属性进行访问。
IParagraph::Lines 属性提供对段落行集合的访问,这些行由 ParagraphLines 对象代表,后者反过来是 ParagraphLine 对象的集合。后者提供单个段落行的几何位置信息,所以代表将文本分为行。
IParagraph::Words 属性提供对段落词汇集合的访问,这些词汇由 Words 对象代表,后者是 Word 对象的集合。Word 对象提供对段落单个词汇的访问。
字符属性
文本的每个字符有自己的参数。可通过 CharParams 对象进行访问。CharParams 对象有一个大的字符属性集,例如几何参数、字体和语言。CharParams 对象包含 SelectedCharacterRecognitionVariant 属性中的字符本身。也请参见下面的 纯文本 了解如何获取文档中所有字符信息的推荐方式。
字符在文本中的位置由段落索引及其自己在该段落中的索引定义。文本中还存在一个所谓的“特殊位置”:段落索引是段落总数,字符索引为0。这是在文本末尾的插入点。Text 对象的一些方法用特殊位置执行操作,即插入另一个文本片段或者其中的图片。
CharParams 对象的 SelectedCharacterRecognitionVariant 属性提供具体针对单个字符的扩展属性集的访问,字符由 CharacterRecognitionVariant 对象代表。这些属性在识别过程中设置,提供具体针对字符的内部识别信息。具体而言,该对象提供更精确的字符识别确定性信息、字符为宋体字体的概率等等。
文字编辑
您可以尝试更改 Text 对象的属性,但是如果要将文本导出为外部格式,应谨慎操作。ABBYY FineReader Engine 导出方法假设已识别文本是识别结果,用户只纠正了识别错误,没有做其它更改。Text 组的对象有许多相互依赖的属性,通常情况下更改这些属性中的一个也需要更改其它属性。因此,对已识别文本的属性进行更改有时可能导致不可预测的导出结果。
纯文本
您也可以特殊“纯文本”格式访问文档或者页面的完整已识别文本,后者由 PlainText 对象表示。该方法仅提供有关已识别文本符号、其识别置信度和相对源图像的位置的信息。不过,如需访问大型文档中所有字符的这些属性,该方法可能适用。使用它的 GetCharacterData 方法,这可让您一次接受所有字符的数据并在您的一端对它进行循环访问。循环访问所有文本块将花费大量时间,特别是如果您的应用程序通过 DCOM
另请参阅
9/17/2024 3:14:41 PM