上一篇介绍了整体流程以及利用库读取pdf内容形成字符集合。这篇着重介绍下,过滤规则,毕竟我们是使用规则过滤,最后得到标题的。

首先看归一化处理,什么是归一化呢?就是使结果始终处于0-1之间(包括0,1)。

 private static double GetMark(BlockInfo block, double maxHeight, double maxWidth, double maxYSize, double maxXSize, double maxSpace)
{
double result = ; if (maxYSize > )
result += 0.4 * ((double)block.CharAveYSize / maxYSize); if (maxXSize > )
result += 0.3 * ((double)block.CharAveXSize / maxXSize); if (maxSpace > ) result += (block.CharAveSpace / maxSpace) * 0.1; if (maxHeight > ) result += (block.CharAveHeight / maxHeight) * 0.1; if (maxWidth > )
result += (block.CharAveWidth / maxWidth) * 0.1;
if (block.RepresentativeChar.IsBold) result += 0.1;
return result;
}

这段代码,就是给块打分的一个方法。它包含了投票思想以及归一处理问题的思想。对于一个块,我们从不同的角度,也就是不同方面的特征值给分,每个特征所占的权重是不同的。YSize权重:0.4,XSize权重:0.3,它们的分值是这样计算的:

权重*(块的平均特征值 / 文档中最大特征值),拿YSize来说,假如块的CharAveYSize=40,maxYSize=60,那么结果:0.4*(40/60)= 0.267。

在这里,我想说的是,特征一定要选正确,还有特征的权重也要相对正确,否则会影响到结果的匹配率。记得之前是以Space特征为主选取的,那时候还没有采用评分系统,经测试,提取标题的准确率在30%左右,后来,看了那个同事以前的代码,发现人家的代码写的如此简单,据说准确率在60%,“大道至简”,我就又重新找到核心属性,于是经过摸索,YSize这个属性相当重要,于是准确度到了70%左右。到最后,采用了评分机制,准确度到了85%左右,再经过努力,不断完善代码,准确度提升到了92%左右。有截图为证:

针对完全图片类型的pdf文档,我们现阶段不予处理。那么除了规则外,还有没有其它途径,来筛选标题呢?答案是肯定的,机器学习是当下一个热门领域,好了,我们下一篇就讨论这方面的话题。

c#抽取pdf文档标题(3)的更多相关文章

  1. c#抽取pdf文档标题——前言

    由于工作的需要,研究c#抽取pdf文档标题有3个月了.这项工作是一项"伟大而艰巨"的任务.应该是我目前研究工作中最长的一次.我觉得在长时间忙碌后,应该找些时间,把自己的心路历程归纳 ...

  2. c#抽取pdf文档标题(1)

    首先看看我的项目结构: 从上面的结果图中,我们可以看出,主要用了两个库:itextsharp.dll 和 pdfbox-1.8.9.dll,dll文件夹存放引用的库,handles文件夹存放抽取的处理 ...

  3. c#抽取pdf文档标题(2)

    public class IETitle { public static List<WordInfo> WordsInfo = new List<WordInfo>(); pr ...

  4. c#抽取pdf文档标题(4)——机器学习以及决策树

    我的一位同事告诉我,pdf抽取标题,用机器学习可以完美解决问题,抽取的准确率比较高.于是,我看了一些资料,就动起手来,实践了下. 我主要是根据以往历史块的特征生成一个决策树,然后利用这棵决策树,去判断 ...

  5. Python处理Excel和PDF文档

    一.使用Python操作Excel Python来操作Excel文档以及如何利用Python语言的函数和表达式操纵Excel文档中的数据. 虽然微软公司本身提供了一些函数,我们可以使用这些函数操作Ex ...

  6. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  7. 将w3cplus网站中的文章页面提取并导出为pdf文档

    最近在看一些关于CSS3方面的知识,主要是平时看到网页中有很多用CSS3实现的很炫的效果,所以就打算系统的学习一下.在网上找到很多的文章,但都没有一个好的整理性,比较凌乱.昨天看到w3cplus网站中 ...

  8. PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示解决方法

    问题:PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示! FlexPaper 与 PDF2SWF 结合是解决在线阅读PDF格式文件的问题的,多页的PDF文件转换可以正常显示,只有一页 ...

  9. 【PDF】java使用Itext生成pdf文档--详解

    [API接口]  一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...

随机推荐

  1. [记录]MySQL读写分离(Atlas和MySQL-proxy)

    MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...

  2. vim+makefile入门编辑,编译,差错实例

    vim+makefile入门编辑,编译,差错实例 vim makefile 编译 编写代码,一般在vim中编辑完后,输入:wq,在命令行下输入g++ hello.cc -o hello ,出现问题,打 ...

  3. 《HelloGitHub》第 23 期

    公告 新的一年,不忘初心,从新开始.加油! <HelloGitHub>第 23 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的 ...

  4. UVALive - 4329 Ping pong 树状数组

    这题不是一眼题,值得做. 思路: 假设第个选手作为裁判,定义表示在裁判左边的中的能力值小于他的人数,表示裁判右边的中的能力值小于他的人数,那么可以组织场比赛. 那么现在考虑如何求得和数组.根据的定义知 ...

  5. Kaggle新手入门之路

    学完了Coursera上Andrew Ng的Machine Learning后,迫不及待地想去参加一场Kaggle的比赛,却发现从理论到实践的转变实在是太困难了,在此记录学习过程. 一:安装Anaco ...

  6. String不可变StringBuffer可变

    String是一个类,也可以表示字符串数据类型 String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值 ...

  7. 用Node.JS+MongoDB搭建个人博客(万众期待的router.js)(四)

    万众期待的router.js,是我现在最想写的一个博客.因为他包含了整个个人博客的精髓.在这里,所有的请求配置,返回的参数等等所做的业务逻辑都在这个文件里实现. 我会详细说明这些代码的作用,所以这篇博 ...

  8. ubuntu自动登录tty1(shell,text)配置

    1.写脚本autologin 代码: #!/bin/bash/bin/login -f #你的用户名 移动到/usr/bin/下,并且用chmod +x autologin设置可执行权限 2.修改/e ...

  9. 4.1 PCIe总线的基础知识

    与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端.PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通 ...

  10. Sublime codeIntel 配置支持php自动提示

    Sublime codeIntel 配置支持php自动提示 下载地址:https://github.com/SublimeCodeIntel/SublimeCodeIntel 安装方法:下载后放到su ...