2012-05-02 48 views
8

这不仅仅是一个算法问题,而是一个特定的语言问题,所以我很乐意接受任何语言的答案 - 甚至是伪代码,甚至只是一个想法。来自PDF的干净文本

这是我的问题:我需要处理来自PDF中文章的大量数据集,并将其粗暴地复制/粘贴到.txt中。我只有这种可憎的结果,大约是16k论文,3.5GB或文本(我使用的语料库是ACL Antology Network,http://clair.si.umich.edu/clair/aan/DatasetContents.html)。

“垃圾”来自公式,图像,表格等等。它只是在正在运行的文本中间弹出,所以我不能使用正则表达式来清除它,而且我也无法想出任何使用机器学习的方法。我已经花了一个星期的时间,然后我决定继续进行一个快速的修补程序&。我不在乎完全清理它,只要大部分文本区域被删除,我都不在乎假的否定和积极的方面。

该文本的一些例子:请注意,公式包含垃圾字符,但表和标题不(但他们仍然使我的句子很长,因此无法解析)。粗体垃圾。

轻松一:同时抑制第一方案的专业化与大多数扩展,然后两个最扩大图式重复

的实验。覆盖率和加速度的度量是重要的1只要我们有兴趣保留分配给句子的f结构,这种覆盖率的概念就比必要的更严格。 实际上,可以通过多个解析来分配相同的f结构,以便在某些情况下,即使专业语法为其分配了正确的f结构,也会将其视为超出覆盖范围。 2'VPv'和'VPverb [main]'包含以主动词为首的副词。 'NPadj'包含附有形容词的NP。原始规则:l/Pperfp - + ADVP * SE(t ADJUNCT)($ ADV_TYPE)= t,padv〜/ r {@M_Head_Perfp I @ M_Head_Passp} @(Anaph_Ctrl $){AD VP + SE('〜ADJUNCT )($ ADV_TYPE)= vpadv由以下替换:ADVP,[。E(〜ADJUNCT)(.l。 ADV_TYPE)= vpadv l /'Pperfp - + @PPadjunct @PPcase_obl {@M.Head_Pevfp [@M ..Head_Passp @(Anaph_Ctrl〜)V {@M_Head_Perfp I @ M_Head_Passp} @(Anaph_Ctrl〜)图1:从实际的法语语法中修剪规则。 “*”和“+”符号具有正则表达式中的常见解释。 圆括号内的子表达式是可选的。 可选子表达式用大括号括起来并用“[”号分隔。 后跟一个标识符的“@”是一个宏扩展操作符,并最终被进一步的功能描述所取代。 语料库 - .. ,, 0.1 [消歧树库树库人类专家语法专业化专业语法图2:我们在语法专业化实验的设置。 用这种形式的语法修剪可以实现什么指标。 但是,它们可能会产生误导,因为未覆盖句子的失败时间可能会比句子时间低得多,如果它们未超出覆盖范围。

硬盘之一:

表4中总结了英语和罗马尼亚的共参照的精度的结果。 结果表明,英语的共同参照比罗马尼亚的共同参照更具有说服力,但SNIZZLE提高了两种语言的共同参与的决议。 有64%的情况下,英国的协同问题通过启发式解决,优先级高于罗马尼亚相应的启发式。 这个结果解释了为什么有更好的精度提高 英语罗马尼亚SWIZZLE英语SWIZZLE罗马尼亚名词性名词73%89%66%78%76%93%71%82%表4:相关精度总计84%72表5:联合召回英文联系。英语罗马尼亚语SWIZZLE英语罗马尼亚语SWIZZLE名词69%63%66%61%名词性总数89%78%83%72%87%77%80%70%表5还说明了召回结果。 数据驱动的共享解决方案优于其他方法的优点是基于其更好的召回性能。 这是由这个方法捕获更大的各种联合模式的事实解释的。尽管其他共同决议系统对某些特定形式的系统表现更好,但其召回结果却被系统方法所超越。 反过来,多语言核心参数比单语言数据驱动的核心参考系统的召回提高了精度。 此外,表5显示,英语核心结果比罗马尼亚核心的回忆更好。 但是,由于不精确的共同性链接被删除,所以召回对于SNIZZLE两种语言都显示出降低。 与往常一样,删除数据会降低召回率。所有结果均使用针对MUC评估开发的自动记分器程序获得。

请注意表中不包含奇怪字符并且在句子中间:“这个结果解释了为什么在这里有更好的精度增强 - 英式联合。”我无法知道表格在运行文本方面的位置。它可能出现在句子之前,之后或之内,就像在这种情况下一样。还要注意,桌子上的狗屎不会以句号结尾(文章中的大多数字幕不会......),所以我不能依靠标点符号来发现它。当然,我很高兴与非精确的边界,但我仍然需要对这些表做些什么。其中一些包含单词而不是数字,在这些情况下我没有足够的信息:没有垃圾字符,什么也没有。很明显,对于只有人类:S

+1

而不是特定的语言标记,请使用'language-agnostic'标记。 –

+0

噢,好的。对不起,不知道它=) – Tex

+1

所以,只是要清楚,你想要拿出“垃圾”,对吧? –

回答

1

(我讨厌蹩脚的副本&膏)

一些想法,你可能会发现有用的(我用他们自己的每一个在这一点上或其他)

  1. (非常暴力):使用标记器和字典(真正的字典,而不是数据结构) - 解析出单词和任何不是字典单词的单词 - 删除它。如果您的文本包含大量公司/产品名称,这可能会出现问题 - 但这也可以使用正确的索引来解决(网上有一些 - 我使用了一些合适的索引,因此我无法分享它们,对不起)

  2. 给定一组干净的文档(可以说是2K),为它们建立一个tf/idf索引,并将其用作字典 - 其他文档中没有出现在索引中的每一项(或者以非常低的tf/idf出现) - 删除它。这应该给你一个相当干净的文件。

  3. 使用亚马逊的机械特克机制:设置一个任务,阅读文档的人需要标记没有意义的段落。机械特克平台应该相当容易(16。5K不是那么多) - 这可能会花费你几百美元,但你可能会得到一个相当不错的文本清理(所以如果是公司资金,这可能是你的出路 - 他们需要支付为他们的错误:))。

  4. 考虑到您的文档来自同一个域(相同的主题,总而言之),并且问题是完全相同的(相同的表头,大致相同的公式):将所有文档分解为句子,并尝试将使用ML的句子。如果表头/公式相对相似,那么它们应该与其他句子很好地相互分离,然后可以逐句清理文档(获取文档,将其分解为句子,如果是每个句子“怪异”群集的一部分,删除它)

+0

谢谢!非常好的建议:-) 不幸的是,我不能使用第一个,因为我正在研究科学文本(所以系统的名字不容易找到),这也是我的硕士论文(所以机械特克是一个不 - 要么D:)。我缺乏计算语言学论文的体面语料库,所以第二种方法也是一个问题。这留下了群集,显然没有选择的负担:D – Tex

+0

很高兴我可以帮助:)如果集群失败,你可以手动清理200个文档,并使用它们来构建一个干净的语料库 - 然后你可能会使用第一个建议 – Yossale