如何使用算法对未知文本消息进行分组?

时间:2012-05-03 14:11:14

标签: java algorithm machine-learning

以下是我需要组合在一起的示例数据集,如果仔细观察,它们大多数是类似的文本行,但是具有人员ID或ID的差异很小。

Unexpected error:java.lang.RuntimeException:Data not found for person 1X99999123 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 2X99999123 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 31X9393912 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 36X9393912 . Clear set not defined . Dump
Exception in thread "main" javax.crypto.BadPaddingException: ID 1 Given final block not properly padded
Exception in thread "main" javax.crypto.BadPaddingException: ID 2 Given final block not properly padded
Unexpected error:java.lang.RuntimeException:Data not found for person 5 . Clear set not defined . Dump
Unexpected error:java.lang.RuntimeException:Data not found for person 6 . Clear set not defined . Dump
Exception in thread "main" java.lang.NullPointerException at TripleDESTest.encrypt(TripleDESTest.java:18)

我想将它们分组,以便最终结果就像

Unexpected error:java.lang.RuntimeException:Data not found - 6
Exception in thread "main" javax.crypto.BadPaddingException - 2
Exception in thread "main" java.lang.NullPointerException at - 1

是否有现有的API或算法可用于处理此类情况?

先谢谢。 干杯 沙克蒂

3 个答案:

答案 0 :(得分:2)

这个问题被标记为机器学习,因此我将建议分类方法。

您可以对每个字符串进行标记,并使用训练集中的所有标记作为可能的布尔特征 - 如果实例包含此标记,则该实例具有该功能。

现在,使用此数据,您可以从数据中构建(例如)C4.5 - decision tree。确保树在构建后使用修剪,并且每个叶子的最小示例数> 1。

树构建完成后,“群集”由树本身完成!每片叶子都包含被认为彼此相似的例子。

现在,您可以通过遍历分类树并将存储在每个叶子中的样本提取到相关群集中来提取此数据。

备注:

  • 对于您提供的示例数据,此算法将失败,因为如果一个msg是唯一的(在您的示例中为NPE),它将无法很好地处理 - 它可能与BadPaddingException处于同一页。
  • 无需重新发明轮子 - 您可以使用weka - java中的开源机器学习库,或其他现有的算法库
  • 不是使用令牌作为二进制功能,它们也可以是数字功能,你可以使用字符串中的令牌,它是第1或第10个令牌?

答案 1 :(得分:0)

我认为您应该创建一个方法来解析文本并过滤掉您想要删除的模式......但是我并不完全确定您想要做什么....

我认为你想要做的事情可能是通过StringTokenizer类实现的......

答案 2 :(得分:0)

如果您知道消息的格式,最简单的方法是使用正则表达式并计算匹配。

Java完全支持正则表达式,它们的使用肯定比聚类算法快。