9

这更像是一个算法问题,而不是一个特定的语言问题,所以我很高兴收到任何语言的答案——甚至是伪代码,甚至只是一个想法。

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

“垃圾”来自公式、图像、表格等。它只是在运行文本的中间弹出,所以我不能使用正则表达式来清理它,我也想不出任何使用机器学习的方法。我已经花了一个星期的时间,然后我决定继续进行快速修复。我不再关心完全清理它,只要删除大部分文本区域,我就不关心错误的否定和肯定。

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

简单的一:

重复实验,同时抑制首先具有最多扩展的方案的专业化,然后是两个扩展最多的模式。覆盖和加速的措施很重要 1 只要我们对保留分配给句子的 f 结构感兴趣,覆盖的概念就比必要的更严格。事实上,同一个 f 结构可以通过不止一次的解析来分配,因此在某些情况下,即使专门的语法为它分配了正确的 f 结构,一个句子也会被认为超出了覆盖范围。 2'VPv' 和 'VPverb[main]' 涵盖以主要动词为首的 VP。'NPadj' 涵盖带有形容词的 NP。205 原规则: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:从实际法语语法中修剪规则。 “*”和“+”符号具有正则表达式中的通常解释。括号中的子表达式是可选的。替代子表达式用大括号括起来并用“[”符号分隔。后跟标识符的“@”是宏扩展运算符,最终被进一步的功能描述所取代。 Corpus --.. ,, 0.1[ Disambiguated Treebank treebank 人类专家 语法专业化 专业化语法 图 2:我们的语法专业化实验设置。通过这种形式的语法修剪可以实现的指标。 但是,它们可能具有误导性,因为未发现句子的失败时间可能远低于其句子时间,

硬一:

表 4 总结了英语和罗马尼亚语共指的精度结果。结果表明,英语的共指比罗马尼亚语的共指更具有指示性,但 SNIZZLE 提高了两种语言的共指分辨率。有 64% 的情况下,英语共指由比罗马尼亚对应的相应启发式具有更高优先级的启发式解决。这个结果解释了为什么英语罗马尼亚语 SWIZZLE 对罗马尼亚语名词代词有更好的精度提高 73% 89% 66% 78% 76% 93% 71°/o 82% 表 4:共指精度 84% 72% 87% 76% 英语罗马尼亚语 SWIZZLE 英语 罗马尼亚语 SWIZZLE 名词 69% 63% 66% 61% 代名词 总计 89% 78% 83% 72% 87% 77% 80% 70% 表 5:共指回忆英语共指。表 5 还说明了召回结果。与其他方法相比,数据驱动的共指分辨率的优势在于其更好的召回性能。这可以通过该方法捕获更多种类的共指模式这一事实来解释。尽管其他共指解析系统对某些特定形式的系统表现更好,但它们的召回结果却被系统方法所超越。与单语数据驱动的共指系统的召回相比,多语言共指反过来提高了精度。此外,表 5 显示英语的共指比罗马尼亚语的共指具有更好的召回率。然而,召回显示 SNIZZLE 的两种语言都有所减少,因为删除了不精确的共指链接。通常情况下,删除数据会降低召回率。所有结果都是通过使用为 MUC 评估开发的自动评分程序获得的。

请注意该表如何不包含奇怪的字符并位于句子的中间:“这个结果解释了为什么 -TABLE HERE- 英语共指有更好的精度增强。” 关于正在运行的文本,我不知道表格在哪里。它可能出现在句子之前,之后或在它内部,就像在这种情况下一样。另请注意,表格狗屎不会以句号结尾(论文中的大多数标题都没有......)所以我不能依靠标点符号来发现它。当然,我对不准确的边界感到满意,但我仍然需要对这些表做一些事情。其中一些包含单词而不是数字,在这些情况下我没有足够的信息:没有垃圾字符,什么都没有。只有人类很明显:S

4

1 回答 1

2

(我讨厌蹩脚的复制和粘贴。)

一些你可能会觉得有帮助的想法(我自己在那一点上都使用了每一个)

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

  2. 给定一组干净的文档(假设是 2K),为它们构建一个 tf/idf 索引,并将其用作字典 - 其他文档中未出现在索引中的每个术语(或以非常低的值出现) tf/idf) - 删除它。这应该给你一个相当干净的文件。

  3. 使用亚马逊的机械土耳其人机制:设置一个任务,阅读文档的人需要标记没有意义的段落。对于机械土耳其人平台来说应该相当容易(16.5K 并不多) - 这可能会花费你几百美元,但你可能会得到相当不错的文本清理(所以如果它是公司的钱,这可能是你的出路——他们需要为自己的错误付出代价:))。

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

于 2012-05-14T15:47:34.057 回答