如何解析特定数据文件并将其内容集群? Java的

时间:2012-09-11 20:16:49

标签: java string parsing pattern-matching cluster-analysis

我有一个如下文件,

150 event4
160 event4
160 event0
170 event4
175 event4
180 event4
190 event4
192 event3
195 event4
----------
----------

第一列是实际发生相应事件的毫秒时间。所以event4发生在150毫秒。

我有以下任务要做,

  1. 逐个迭代。

  2. 如果连续事件之间的差距小于80 毫秒,它们是一个单一活动的序列。

  3. 例如

    100 event4
    120 event5 
    140 event6
    200 event4
    

    所有这些都有不超过80毫秒的连续差异。 如果存在超过80毫秒的差异,则意味着当前序列结束并且新序列开始。 我的目标是聚类序列。并且在不同的群集中报告特定事件的数量。因此,在以下示例中,在集群1中,事件4发生了4次,事件5发生了1次,事件6发生了1次。在第二次集群事件中4次,事件5次1次。

    100 event4
    120 event5 
    140 event6
    200 event4
    
    300 event4
    320 event4 
    340 event4
    400 event5
    

    我现在正在做的是,

    1. 我列出了一些字符串。我解析文件,并测量差距 在行之间,如果小于80毫秒,我将它们添加到 名单。
    2. 当我发现一个超过80毫秒间隙的事件时     停止添加并为下一个序列创建新列表。
    3. 将所有序列放入不同的列表后,我会遍历 通过列表来衡量特定事件的数量。
    4. 我不知道这是一种有效的方法。我有一些问题。

      • 我不知道那边有多少个序列簇,所以数量 我想要存储特定群集的列表是不固定的。
      • 事件名称不固定。它可以是event1到event100或事件 因此,用于存储事件编号的变量数量不是 固定了。

      那么,你们有没有更好的想法?

1 个答案:

答案 0 :(得分:1)

这不是科学中所谓的“聚类”,而只是分组或聚合。您聚合事件除非它们被太多时间分开。

至于方法,你正在追求规范的方法。除非您的数据已经存在于复杂的数据库索引中,否则您无法做到比线性更好。只要它是一个文本文件,除了线性读取之外别无他法。

对于数据结构,将其组织为ArrayList<ArrayList<String>>ArrayList<HashMap<String, Integer>>没有任何问题,因为事件ID是字符串。内存要求应该适中,并且可以扩展到千兆字节。如果遇到内存问题,请尝试维护HashSet<String>以仅保留每个事件字符串的一个副本,并将时间转换为数字数据类型。然后,当您没有足够的事件时,您应该能够加载几GB。

实际上我在这里看不到任何重大挑战。