为数据库表提供大量数据,删除噪声文本的最佳做法是:
噪音存储在“名称”字段中。
我正在使用Java标准结构处理数据。
答案 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”这样的东西可能有一个接近于零的频率。如果您有太多这样的子序列,请将其标记为垃圾。
问题:
答案 8 :(得分:1)
将文字片段推入Google,看看你得到了多少结果。
答案 9 :(得分:0)
示例#1和#2可以由试图找出如何发音的解析器删除。无论语言如何,它们都是无法形容的,因而无法言语。