我有一个大型(+/- 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算法(或者伪代码,这样我就可以自己写了)
最佳答案
我认为您使用评论中建议的方法过于复杂了。
您可以对数据进行 2 次传递:
- 构建直方图:
Map<String,Integer>
计算出现次数 - 对于每个单词,当且仅当
map.get(word) > THRESHOLD
时,将其打印到新的“干净”文件中
作为旁注,如果有的话 - 我认为固定阈值方法不是最佳选择,我个人会过滤出现少于 MEAN-3*STD
的词其中 MEAN
是平均字数,STD
是standard deviation . (3 个标准偏差意味着您正在捕获大约超出预期正态分布的单词,概率约为 99%)。您可以“玩”常数因子并找到最适合您需求的因素。
关于java - 去除语料库中出现次数少的词的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941948/