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

Java 如何使用算法对未知文本消息进行分组?,java,algorithm,machine-learning,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 .

下面是我需要组合在一起的示例数据集,如果仔细观察,它们大多是相似的文本行,但有一个个人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或算法可用于处理此类情况

提前谢谢。 干杯
Shakti

我认为您应该创建一个解析文本并过滤掉您希望删除的模式的方法。。。然而,我不完全确定你想做什么


我认为您想要做的事情可能可以通过StringTokenizer类来实现…

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

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

现在,使用这些数据,您可以(例如)从这些数据构建-a。确保树在构建后使用修剪,并且每个叶子的最小示例数>1

一旦构建了树,“集群”就由树本身完成了!每一页都包含被认为彼此相似的示例

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

注意事项:

  • 对于您提供的示例数据,此算法将失败,因为如果一个消息是唯一的(示例中的NPE),它将无法很好地处理-它可能与
    BadPaddingException
    位于同一个叶中
  • 无需重新发明轮子——您可以使用——java中的开源机器学习库或其他现有的算法库
  • 不要将令牌用作二进制特征,它们也可以是数字特征,您可以使用字符串中的令牌,它是第一个还是第十个令牌

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


Java完全支持正则表达式,它们的使用速度肯定比集群算法快。

我想你不知道消息的格式?你在寻找分类算法吗?你有培训资料吗?谢谢。虽然我对Weka不太了解,但这正是我想要的。@Shakti:Weka只是我喜欢使用的一个建议,你可以选择你最喜欢的C4.5实现,或者自己实现一个(虽然下载和理解如何在Weka中使用它可能会更容易,然后从头开始实现它)