2012-11-05 157 views
-1

我正在处理数十万个文件。潜在的数百万之后的道路上。坏文件将包含Excel电子表格的文本版本或其他不是二进制文件的文本,但也不是句子。这样的文件会导致CoreNLP崩溃(从技术上讲,这些文件需要很长时间才能处理,例如每千字文本15秒)。我很想检测这些文件并在次秒内丢弃它们。有没有一种方法来确定一个文档是否是一个文本句子文件?

我正在考虑的是随机抽取几千个文件,检查第一个200个字符并查找字符分布以确定什么是合法的以及什么是异常值。例如,如果没有标点符号或太多标点符号。这似乎是一个好方法吗?有更好的证明吗?我认为,当然,这将工作得很好,可能会抛出潜在的好文件,但很少。

另一个想法是简单地运行注释器tokenize和ssplit,并做单词和句子计数。这似乎也做得很好,并很快返回。我可以想到可能会失败的情况。

+0

我少担心比约不抛出潜在的不良档案投出潜在的好文件。你应该也可以检查行和字的长度。为了好奇,为什么系统中存在“坏”文件? (我认为你的方法应该可行,但实际上你应该实施它并试图让它失败)。虽然我不太确定这是否是一个好问题。 – Cubic

+1

刚刚读取文件的最后几个字节呢?我认为有一些特殊的格式是特定于excel文件的,这些格式与编码有关。 – calderonmluis

+0

也许更容易找到“Excel电子表格的文本版本”的签名?那里一定有一些文件头或页脚数据? – whiskeyspider

回答

1

这种处理流水线总是处于持续改进的状态。为了启动这个过程,我要创建的第一件事是围绕CoreNLP时间行为的一个工具。如果CoreNLP耗时过长,请将违规文件踢出一个单独的队列。如果这还不够好,您可以在take-too-long队列中为最常见的事情编写识别器,并在它们碰到CoreNLP之前将它们转移。这种方法的主要优点是它可以处理预先不期望的输入。

+0

即使我坚持我的计划,这是一个好主意。通过我的过滤器的文件仍然可能会尝试冲击堆和处理时间。 –

+1

噢,我同意您在原文中的假设,您需要在处理管道中识别“坏文本”。我不愿意做的是在实际看到它之前提出识别不良文本的方法。因此,我建议创建一条管道,为您提供明显不好的文本集合。然后,当你编写一个识别器时,你有两个文本集合,一个好的和一个坏的,并且你可以测试候选识别器匹配坏文本的_some_和好文本的_none_(或者至少小数量)。 – eh9

+0

事实证明,在过去的几个月中,使用贝叶斯分类器使用字节分布的高斯特征效果非常好。通过查看所有字节的可能分布情况,在训练集中增加特征出现次数的百分比,正负分类器可以产生出色的结果。它可以很容易地区分差异。虽然它有助于删除像图像文件那样明显的非文本文件,但真正的问题在于非语义结构化的文本文件,而这些文件从我想处理的文件中脱颖而出。 –

1

这种问题有两种主要方法。

第一种方法是采用您正在考虑的方法,您可以在其中检查文件的内容,并根据文件中数据的统计分析来决定文本是否可接受。

第二种方法是使用某种类型的元标记,例如文件扩展名,以至少消除那些肯定会成为问题的文件(.pdf,.jpg等)。

我会建议这两种方法的混合,以减少处理量。

您可能会考虑一种管道方法,其中您有一系列测试。第一个测试根据元数据(如文件扩展名)筛选出文件,第二步然后对文件的前几个字节进行初步统计检查,以筛选出明显的问题文件,第三步进行更为复杂的统计分析文本,第四个处理CoreNLP拒绝步骤。

您不会说文件来自哪里,也不知道是否有任何语言因素(英文与法文与简体中文文本)。例如,对文本使用UTF-8,UTF-16或其他编码的可接受文本文件?

CoreNLP应用程序还有可能在检测和拒绝不兼容的文本文件时更加优雅吗?

+0

我不知道输入源的来源在哪里。 95%将从非结构化文本中过滤文本。 “问题儿童”将成为人们将不应该放入各种不同事物的结果。就像在现实生活中一样。所以,原始文本可能来自电子邮件,PDF等,这已经尽可能地被过滤了。其中一些可能是由于处理不当的文件附件(如电子表格)造成的。有些只是像PDF产品表一样的东西 - 大量的文本,但没有一个真正用CoreNLP进行正确分析。我喜欢你的过滤器序列的想法! –

1

难道你不只是训练朴素贝叶斯分类器来识别坏文件吗?对于特征使用诸如(分档)标点百分比,数字字符百分比和平均句子长度之类的东西。

+0

我发现的另一件事是一些消息具有良好的文本和不好的文本。例如,一封电子邮件包含一段文字,然后是几行列出附件的行。从文档中提取了6000多个概念。这是最具病态的情况。它可能是最好的预处理和寻找特定模式解决。如果有更聪明的东西会很好,而NaïveBayes分类器就是这样。 –

-1

Peter,

您明确地处理ediscovery的文件。任何事情都是可能的,正如你所知道的,任何踢出来的东西都必须记录为例外。我遇到过这种情况,并且从其他分析处理器听到过相同的声音。

以上所述的解决方案,预处理和在线帮助。在某些ediscovery解决方案中,将文本转储到SQL中的字段并截断或以其他方式截断并仍然可以获得所需的内容可能是可行的。在其他应用程序中,与语义聚类或预测编码有关的任何内容,使用元数据(如文件类型),文档类型分类库和基于先前示例的实体提取的前置过滤器,当前采样或最佳选择可能会更好猜测“坏档案”内容的性质。

祝你好运。

+0

我发现分类器可以轻松检测到目标文本文件中缺少语义结构。在我尝试过的所有解决方案中,成功率最高。分类器的培训非常简单,可以使系统自动化,但我认为策划方法会产生更好的结果,因为您可以根据对文件内容的视觉检查来创建多个分类器。它不需要很多文件来生成另一个好处的工作分类器。 –

相关问题