删除小事件语料库中单词的算法

时间:2014-02-21 18:07:04

标签: java algorithm word

我有一个包含一些嘈杂元素的大型(+/- 300,000行)文本片段数据集。有噪音我的意思是俚语,类型错误等...我希望过滤掉这些嘈杂的元素,以获得更干净的数据集。

我读了一些文件,建议通过跟踪每个单词的出现来过滤掉这些文件。通过设置一个阈值(例如小于20),我们可以假设这些单词是噪声,因此可以安全地从语料库中删除。

也许有一些库或算法可以快速有效地完成这项工作。当然我先是自己尝试过,但这非常慢!

总而言之,我正在寻找一种算法,可以快速有效地过滤出低于特定阈值的单词。也许我添加一个小例子:

This is just an example of whaat I wish to acccomplish.

单词'whaat'和'acccomplish'拼写错误,因此可能不那么经常发生(如果我们假设生活在一个完美的世界,错别字很少......)。我希望最终得到

This is just an example of I wish to.

谢谢!

PS:如果可能的话,我想在Java中使用算法(或伪代码,以便我自己编写)

1 个答案:

答案 0 :(得分:4)

我认为你用评论中建议的方法使你复杂化。

您可以通过2次传递来完成数据:

  1. 构建直方图:计算出现次数的Map<String,Integer>
  2. 对于每个单词,当且仅当map.get(word) > THRESHOLD
  3. 时,将其打印到新的“干净”文件中

    作为旁注,如果有的话 - 我认为固定阈值方法不是最好的选择,我个人会过滤发生少于MEAN-3*STD的单词,其中MEAN是平均单词数, STDstandard deviation。 (3个标准偏差意味着您正在捕捉大约超出预期正态分布的单词,概率为~99%)。您可以使用常数因子“玩”并找到最适合您需求的内容。