检测并删除噪音文本

时间:2010-05-13 13:22:41

标签: noise java text

为数据库表提供大量数据,删除噪声文本的最佳做法是:

  • fghfghfghfg
  • qsdqsdqsd
  • rtyrtyrty

噪音存储在“名称”字段中。

我正在使用Java标准结构处理数据。

10 个答案:

答案 0 :(得分:8)

删除这样的东西并不像看起来那么容易。

对于我们人类来说,很容易看出“djkhfkjh”没有任何意义。但是计算机如何检测这种噪音呢?怎么会知道“Eyjafjallajökull”只是在过去几年里有人砸他的键盘,或者是最过度覆盖的山峰?

如果没有很多误报,你就无法可靠地做到这一点,所以毕竟,它会再次手动过滤假阳性和真阳性。

答案 1 :(得分:7)

嗯,您可以使用NLP方法构建分类器,并根据噪声和非噪声的示例进行训练。您可以采取的一个案例是Apache Tika的语言检测器。如果语言检测器说'打败我'可能已经足够好了。

答案 2 :(得分:3)

获取一个包含您可以找到的名称的字典,并过滤您的数据以显示不在字典中的数据。然后您必须逐个删除它们以确保不删除有效数据。 按名称对列表进行排序可以帮助您一次删除更多行。

答案 3 :(得分:2)

如果文本的其余部分是英文,您可以使用单词列表。如果文本中超过给定百分比(例如,50%)的单词不在单词列表中,则可能是噪音。

您可能需要设置一个阈值,例如5个字,以防止删除“LOL”等帖子。

在大多数Linux安装中,您可以从拼写检查器aspell中提取单词列表,如下所示:

aspell --lang en dump master

答案 4 :(得分:2)

您需要首先更有效地定义“噪音文本”。定义问题是这里的难点。你不能编写会说“摆脱类似_____的字符串”的代码。看起来你所识别的模式是“连续三个字符的一致集合,并且该集合至少重复一次,但可能不会干净地终止(它可以从集合中间的字符终止)。”

现在编写一个与该模式匹配的正则表达式,并对其进行测试。

但我打赌你还有其他的模式......

答案 5 :(得分:2)

检查每个单词,看看有多少冗余。如果有超过三个连续重复的字母组,则它是噪音的良好候选者。此外,查找通常不属于一起的字母组以及键盘上也连续的连续字母组。如果整个单词都是由键盘邻居这样的字母组成,那么它也会在噪音列表中声明一个位置。

答案 6 :(得分:1)

训练NLP分类器可能是最好的方法。但是,更简单的方法可能是简单地检查每个单词是否存在于所有已知“有效”单词的列表中。大多数Unix系统都有一个名为/ usr / share / dict / words的文件,您可以将其用于此目的。另外,Ubuntu使用/ usr / share / dict / american-english,/ usr / share / dict / american-huge和/ usr / share / dict / american-insane进行扩展,每个列表比最后一个更全面。这些列表还包含许多常见的拼写错误,因此您不会过滤掉技术上不是单词但可以清楚地识别为单词的文本。

如果你真的雄心勃勃,你可以结合这些方法,并使用这些单词列表来训练贝叶斯或最大熵分类器。

答案 7 :(得分:1)

这里有很多好的答案。哪个(哪些)对您有用取决于您问题的具体细节 - 例如,输入应该是英语单词,用户名,人姓等等。

一种方法:编写一个程序来分析你认为“有效”的输入。跟踪合法文本中每个可能的三个字母序列出现的频率。然后,当您要检查输入时,查看输入的每个三字母序列并查找其预期频率。像“xzt”这样的东西可能有一个接近于零的频率。如果您有太多这样的子序列,请将其标记为垃圾。

问题:

  1. 您可能会将拼写错误视为垃圾,例如,如果有人忘记在单词中添加'u'之后会出现'u'。
  2. 你不会像“thethethethe”那样抓住输入。

答案 8 :(得分:1)

将文字片段推入Google,看看你得到了多少结果。

答案 9 :(得分:0)

示例#1和#2可以由试图找出如何发音的解析器删除。无论语言如何,它们都是无法形容的,因而无法言语。