如此难以找到,容易错过且不可能发行

我们的生活规则:以字母“ T”开头的文章标题,并快速,准确且最重要的是精美地寻找文本借用。 一年多来,我们已经成功地找到了可转移的借贷,并借助神经网络进行了重写 。 但有时您需要有意地“脚踩自己”,然后行,走另一条路,即 不要检查释义或窃,而只留一段文字即可。 矛盾的是,它很痛,但这是必要的。 让我们马上说:我们不会触及参考书目。 如何在文字中找到它? 为什么说起来容易,但是比看起来难得多? 所有这一切都是反pla窃企业博客的延续 ,这是唯一一个他们不喜欢删除线文本的博客。



图片来源: Fandom.com


为什么要花这么长时间找到那个?


首先,一点理论。 什么是文件,我们应该如何处理? M. Foucault在“知识考古学”中指出:“历史记录现在可以组织文档,对其进行拆分,组织,重新分配级别,设置等级,根据重要性程度对其进行限定,隔离元素,定义单位,描述关系。” 我们当然不是思想的历史学家,但是我们根据自己的经验知道,文档是由各种元素拼凑而成的拼凑而成的被子。 这些元素是什么以及如何相互联系取决于特定的文档。 例如,如果这是学生的作品,则很可能将包括:标题页,正文章节,图形,表格,公式,参考文献和应用。 在科学文章中,很可能会有注释,但是标题页可能会完全丢失。 文章或会议资料的集合包括大量文章,每个文章都有自己的结构。 简而言之,文档的每个元素都是有趣且自给自足的,可以充分说明文档本身属于哪种类型。


理想情况下,每个人(包括我们和老师在内)都希望拥有理想的文档结构,并以满足特定任务的方式处理每个元素。 成功的第一步是确定项目的名称。 Stack_more_layers决定从最后但并非最不重要的地方开始 ,也就是从诸如“参考书目”的文本元素开始。 这是文本借用对用户最不感兴趣的部分。 因此,有必要在报告中表明我们“抓住”了参考书目,并且没有开始寻找任何参考书目。


生活是奇观。 不管持续多久。 最主要的是,最后应该有一个书目。


在一个完美的世界中,一切都是美丽的,文档的外观也是如此。 理想文档的文本结构合理,阅读起来很愉快,并且通过将滑块快速拉到最末端来查找书目将一点也不困难。 如实践所示,现实具有完全不同的结构。


首先,通过“参考书目”,许多人同样意味着以下概念:“参考文献列表”,“二手文献”,“参考文献列表”,甚至还有一百多个(原文如此)标题。 通常,对于此类情况,存在书目参考和记录设计的规则,根据这些规则,您可以从文本层中提取参考列表。 可以说更多- 这些记录的设计甚至还有一个GOST 。 例如,这里是一本著名书籍的书目记录的正确设计:



没错,值得考虑的事实是“根据GOST”设计记录的手册大约需要150页。 对于非印刷出版物中书目参考文献的注册,有单独的GOST ,可覆盖 20页以上。 但是,出现了一个合理的问题:有多少人将时间花在这种有趣的阅读上,以正确地撰写一些文学参考书? 如实践所示,很少。 当然,有一些自动文本布局系统(例如LaTeX ),但是在学生环境中(这是我们大多数的“客户”),它们并不是很常见。 结果,在输入处,我们有一个包含(或可能不包含)至少某些结构化文学来源列表的文本。


我们还要澄清一点。 事实是,我们不直接使用下载的作品(pdf,docx,doc等),而是首先将它们带到统一的外观,即提取文本层 。 这意味着将从文本中删除任何类型的格式,例如字体的类型或大小。 结果,我们只有“原始”文本可供使用,由于各种提取伪像,这些文本通常看起来非常糟糕。


请注意,我们的算法必须快速且精确。 在整个检查文档的过程中,书目块的选择只是一个附加的“功能”,因此它不应花费很多资源。 这意味着该算法不应过于复杂。


为此,我们首先确定质量指标,通过该指标可以评估算法的操作。 我们将把我们的任务视为分类问题。 每行文本将涉及两个类别之一-书目或非书目。 为了不使生活因质量指标解释不当而复杂化(而且这些指标足够多!),我们将考虑正确分类和错误分类的线的比例。 我们假设传入的文本层分为几行。 甚至更重要的是,这样的分类才有意义,我们只需要一行就不会将书目与多余的文字结合在一起。 这是一个很强的假设,但是几乎所有通过DocParser传递的文本都使他满意。 在对象的两类分类中,这是我们的任务,最受欢迎的质量指标是PrecisionRecall 。 外观-参见下图:



上方图片来源: 维基百科
下图来源: 系列:傻瓜


图片显示了算法正确(或不正确)对字符串进行分类的次数,即:


  • TP是算法正确确定的书目字符串;
  • TN是算法正确确定的一行纯文本;
  • FP-纯文本行,算法定义为书目;
  • FN是一个书目字符串,算法将其定义为纯文本字符串。

另一个要求是我们的算法必须足够准确(即具有足够高的Precision得分)。 这可以解释为“相反,我们没有选择必要的东西而不是选择了不必要的东西”。


所有可能的梦想Cam Tru


您认为解决研究问题所需的时间最多? 算法开发? 将解决方案嵌入现有系统或测试中? 无论如何!


奇怪的是,大部分时间都花在收集数据和准备数据上。 同样在这种情况下:为了提出一种算法并配置其参数,有必要使用足够数量的标记文档。 即,确切知道包含书目记录的位置的文档。 可能会吸引第三方评估者,但是,对于这样的小任务,您通常可以流血并自行标记数据。 结果,通过共同的努力,我们处理了大约1000份文档。 当然,对于训练,例如神经网络,这还不够。 但是,请记住,该算法应该很简单,这意味着您不需要大量数据即可配置其参数。


但是,在开发算法之前,您需要了解数据的细节。 在查看了大约1000个随机文档(或更确切地说是其文本层)之后,我们可以得出一些关于书目文本与通常文本有何不同的结论。 最重要的模式之一是,书目几乎总是以关键字开头。 除了流行的“参考文献列表”或“二手资源”外,还有一些非常具体的参考文献,例如“教科书,手册,专论”。


另一个同样重要的功能是书目记录的编号。 同样,值得一提的是,参考文献列表中的所有这些“符号”都是非常不准确的,而且在文本中找到所有书目记录并非总是可能的。


但是,即使是这种不准确的功能也足以开发出用于在文本层中查找书目的最简单算法。 让我们更正式地描述它:


  1. 我们在文字中寻找“高音谱号”-参考书目的关键词;
  2. 我们尝试在下面的文本中找到书目记录的编号;
  3. 如果有编号,我们将遍历文本直至结束。

这种简单的算法显示出几乎100%的准确性,但完整性却很低。 这表明我们的算法仅选择书目线,但选择性地选择了书目线,因此它仅找到书目的一小部分。 困难在于书目无法轻松编号,因此我们将使用该算法作为辅助算法。


现在让我们尝试构建另一种算法,该算法可以查找文本中书目记录的其余类型。 为此,突出显示将纯文本行与书目记录行区分开的特征。 应该注意的是,书目文本相当结构化,尽管每个作者都以自己的方式形成了这种结构。 我们确定了所需行的以下鲜明特征:


  1. 在行的开头存在编号-上面在描述第一个算法时已经提到过;
  2. 年数字符串中的存在。 而且,这些数字不仅应该是四位数(否则会有很多巧合),还应该是引用时最常使用的特定年份:从1900年代到现在;从1900年至今。
  3. 以不同格式列出参与出版物出版的作者,编辑和其他人员的全名;
  4. 指示页码,卷和其他类似类型的信息;
  5. 出现在短语行中指示发行号;
  6. 字符串中是否存在网址;
  7. 成瘾的专业词汇。 在大多数情况下,这些都是特殊的缩写,例如“ conf。”,“ Scientific-practical”。 和类似的缩写。

我们将这些符号定义为二进制,并在最简单但又非常有效的分类器上进行训练-Random Forest 。 随机森林算法是一种集成分类方法。 它由许多(通常约100个)简单的决策树组成,每个决策树都会做出自己的决策,相关对象属于哪个类。 整个算法的答案非常简单:创建一个由大多数决策树组成的类:



图片来源: www.researchgate.net


如上所述,我们将选择算法的参数,以使其准确性最大化。 让我们尝试将此算法应用于某些文档并查看工作结果:



在上图中,该算法认为书目的行以红色突出显示。 如您所见,该算法可以很好地完成其任务-全文中几乎没有不必要的突出显示,但是,参考书目本身是由“件”确定的。 这很容易解释:由于算法提高了准确性,因此只选择那些极有可能成为书目的线。 根据算法,未选择的行看起来像纯文本。


让我们尝试“梳理”结果。 我们需要消除两个问题:正文中的随机单选和书目本身的不连续选择。 解决这些问题的快速有效方法是“粘合”和“变薄”操作。 名称不言自明:我们将删除单立的书目线,并在相邻的线之间粘上几条未选择的线。 而且,最有可能的是,有必要进行几次粘稠稀疏的迭代,因为 通过一遍,不是书目的单行可以粘在一起并且不能删除。 我们在单独的子样本(谁不知道什么是“再训练”,我们建议在此处查看 )上配置粘合和稀化操作的参数(通过次数,粘合宽度,删除参数)。


改进后会发生什么? 在查看多个文档时,我们注意到有些书目具有以下“功能”:


幸运的是,我们有一个简单但有效的算法,仅考虑了这种情况。 而且,由于该简单算法除了选择书目的必要行外没有选择任何其他内容,因此我们可以将两种算法的结果结合起来而不会降低质量。



看起来不错。 当然,由于该算法是概率性的,因此有可能根本无法在文本中找到参考书目。 我们专门更改了书目列表,以使算法“没有注意到”它:



但是,从纯粹主观的观点来看,这样的参考书目与普通文本不再有太大的不同。


最后,我们得到了什么? 我们已经实现了一个模块,用于突出显示可下载文档中的书目记录。 该模块由两种算法组成,每种算法都是针对特定的操作特性量身定制的。 一种算法在关键字之后分配编号的书目块。 第二种算法选择极有可能是书目的行,然后执行几次“粘合”和“变细”操作。 模块的结果是所描述算法的并集。


还值得注意的是,即使在大型文档上,该算法的速度也相当高。 这意味着我们的算法完全适合验证过程中“辅助功能”的要求。


结论


所以从火柴和橡子中...

结果,我们能够实现一个简单而有效的过程来提取用户文本中的书目记录。 尽管这只是突出显示文档结构的一小部分,但它仍然是提高反抄袭系统服务质量的重要一步。 顺便说一下,我们的工作结果已经可以在系统的用户报告中看到。 用自己的思想创造!

Source: https://habr.com/ru/post/zh-CN449124/


All Articles