java - 去除语料库中出现次数少的词的算法

标签 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算法(或者伪代码,这样我就可以自己写了)

最佳答案

我认为您使用评论中建议的方法过于复杂了。

您可以对数据进行 2 次传递:

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

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

关于java - 去除语料库中出现次数少的词的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941948/

相关文章:

c++ - 线段相交平面扫描算法中状态结构的使用

r - 将网络分解为具有相同顶点数的组件

algorithm - 给定一个随机顺序的整数数组,你必须找到最小交换次数才能将其转换为循环排序数组

java - java中如何统计以大写字母开头的单词?

java - 如何使用Java中的YouTube API v3获得用户的(视频) Activity

java - 如何帮助 Java 解析 RxJava 组合方法中的类型?

mysql - 使用 MySQL 查询计算文本列中具有许多 ID 的确定词

单词边界结束和边缘之间的正则表达式差异

java - Eclipse:如何检测项目是工作区的一部分

java - Java 的类依赖工具