从静态表单中提取填充数据的最佳方法是什么?

时间:2017-03-20 17:34:44

标签: scala parsing text-processing text-parsing

我有一些带有填充数据init的联邦pdf表单。让我们举个例子i765,我可以用文本格式提供这种表格的数据,并详细填写。如何通过最少的解析从此表单中提取数据。让我们说如何编写一个标识“差异”的脚本,这本身只不过是填充的信息。

例如:如果一行包含..

SSN :(空白)和实际填写的表格有SSN:ABC!@#456

所以填写的信息只不过是ABC!@#456这只是字符串之间的区别。我可以遵循一种已知的方法吗?任何指针都非常感激。

1 个答案:

答案 0 :(得分:0)

如果我们谈论的是Linux Tools,那么您可以尝试各种解决方案,例如:

$ join -t"=" -a1 -o 0,2.2 <(sort emptyform) <(sort filledform)  # "=" is used as delimiter

甚至没有排序要求的awk:

$ awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \
END{print "\n Missing fields:";for (i in a) print i,a[i]}' empty filled

测试:

cat <<EOF >empty
Name=""
Surname=""
Age=""
Address=""
Kids=""
Married=""
EOF

cat <<EOF >filled
Name="George"
Surname="Vasiliou"
Age="42"
Address="Europe"
EOF
join -t"=" -a1 -o 0,2.2 <(sort empty) <(sort filled)
#Output:
Address="Europe"
Age="42"
Kids=
Married=
Name="George"
Surname="Vasiliou"

awk输出

awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \
END{print "\nnot completed fields:";for (i in a) print i,a[i]}' empty filled

Name="George"
Surname="Vasiliou"
Age="42"
Address="Europe"

not completed fields:
Married=""
Kids="" 

特别是在awk中,如果您从{if ($1 in a) {print;delete a[$1]}}删除打印件,则END部分将仅打印缺少的字段。

另一个具有良好可视化界面的替代方案是使用diff实用程序:

$ diff -y <(sort empty) <(sort filled)

Address=""                            | Address="Europe" 
Age=""                                | Age="42"  
Kids=""                               | Name="George" 
Married=""                            | Surname="Vasiliou"                                              
Name=""                               <  
Surname=""                            <