【发布时间】:2019-09-10 15:05:36
【问题描述】:
我想检测 PDF 中的公司名称,我也有 XML 格式的所有 PDF。
手动检测它们相对容易,因为这些名称几乎总是出现在其地址、电话/传真、地址等旁边。它们可能位于 PDF 中的不同位置,它们可能包含略有不同的信息,但肯定有一个模式。
我无法将此逻辑转换为算法。这是 XML 的示例:
<?xml version="1.0" encoding="UTF-8"?>
<Document file="filename.pdf">
<Page number="1" box="0, 0, 1653, 2338" rotated="false" resolution="200">
<Block page="1" block_id="B_1">
<!-- random text on the top part of the pdf -->
<Environment>
<Bottom>B_2</Bottom>
</Environment>
</Block>
<Block page="1" block_id="B_2">
<Properties num_lines="1" box="268, 303, 529, 323">
</Properties>
<Line nr="0">
<Word box="268, 303, 366, 323">company</Word>
<Word box="373, 303, 451, 323">name</Word>
<Word box="459, 303, 529, 323">SA</Word>
</Line>
<Plain_Text>Company Name SA
</Plain_Text>
<Environment>
<Right>B_3</Right>
<Bottom>B_5</Bottom>
</Environment>
</Block>
<Block page="1" block_id="B_3">
<!-- same structure as before but with the address -->
</Block>
<Block page="1" block_id="B_5">
<!-- same structure as before but with the phone number -->
</Block>
</Page>
</Document>
我目前的想法是把算法拆分成2:
- 查找模式,
Blocks 包含地址、电话号码、传真或它们的任意组合。检测电话/传真很容易,如何检测地址完全是另一个问题。 - 在这些块的顶部找到文本。
另一个复杂因素是这些模式差异很大,有时没有电话,或者地址分两行(和两个Blocks),有时还有更多不是公司名称的文本。
这就是为什么我喜欢使用 LSTM 架构(因为 XML 的顺序性)来检测Block,但我对实现不知所措。
我不知道如何输入数据,我是否将每个块分成一个新行?这不是分类问题,因为每个 XML 都有不同的#blocks,我也不认为这是回归,我不能使用嵌入,因为我丢失了 block_id 上的信息。我也不知道如何为架构提供有关地址、电话模式的信息/启发式方法。
我有编程和 NLP 方面的经验,但对 XML 和 XML 解析了解不多。我的两个想法都有我不知道如何解决的问题,我不知道我应该追求哪个(或如果有的话)想法,或者它们是否有充分的根据。感谢您的帮助,谢谢!
【问题讨论】:
标签: xml xml-parsing named-entity-recognition