具体实施方式
在本发明实施例中,所述的有效时间是指:一对收发消息中,收消息时刻至发出应答消息时刻的间隔时间,即用户在收到消息后至发出应答消息所花费的时间。本发明实例中的即时通讯有效时间,即是在一段即时通讯时间内,多个收发消息过程中有效时间(不包括重复时间)的累加。如果消息是在内部局域网的网关获取的,那么消息从网关到客户端的时间也包括在有效时间内了,同样,消息从客户端到网关的时间也包括在有效时间内了,这样就导致收发消息时间间隔比用户实际所花费的时间大,然而,实际中内网的传输时间是可以忽略的,因此认为,在网关捕获的一对收发消息所用的时间和用户在收到消息后至发出应答消息所花费的时间相等。在应用中,可以用来计算即时通讯有效时间。
本发明实施例首先根据获得的即时通讯记录取得某一时间段内的即时通讯收、发消息时刻列表,然后对收、发消息时刻列表进行初步匹配,剔除收发时刻间隔超过固定值的时刻,得到对应的收发时刻,再对收发时刻进行比较,找出重合的时刻,以避免重复计算时间,然后计算重合的时刻所用的有效时间,累加结果值,并依次用对应的收发时刻中除重合的时刻以外的发消息时刻值减去对应的收消息时刻值,将其累加至所述结果值,得到即时通讯的有效时间;考虑到记录数据的误差以及个别即时通讯收发时刻间隔超过固定值而被误舍弃的情况,对有效时间进行校正,即比较收消息时刻列表和发消息时刻列表剔除的时刻个数,取多者的个数,将该个数值与上述固定值相乘,并将所得乘积值累加至即时通讯有效时间值,得到最终的即时通讯有效时间结果值。
本发明实施例可以用于对多个不同即时通讯工具的即时通讯有效时间进行计算。即时通讯记录包括:一个或多个不同即时通讯工具的收发消息的状态标识及对应的时刻、使用者IP地址或MAC地址,还包括对多种通讯工具进行统计时需要的相应的即时通讯工具信息;可以根据即时通讯工具信息从即时通讯记录中取得相应即时通讯工具的某一时间段内的收消息时刻列表、发消息时刻列表。
本发明实施例对收、发消息时刻列表进行初步匹配的方法如下:收、发消息时刻列表中的各时刻均按时间顺序排列,包括按时间顺序升序排列或按时间顺序降序排列。(本发明实施例中按升序排列)然后判断收消息时刻列表的第一个收消息时刻是否早于发消息时刻列表的第一个发消息时刻;若收消息时刻列表的第一个收消息时刻早于发消息时刻列表的第一个发消息时刻,则判断所述发消息时刻列表的第一个发消息时刻与所述收消息时刻列表的第一个收消息时刻的时间间隔是否小于或等于所述固定值,若小于或等于所述固定值,则所述收消息时刻列表的第一个收消息时刻与发消息时刻列表的第一个发消息时刻匹配为相互对应的收发时刻,若大于所述固定值,则剔除所述收消息时刻列表中第一个收消息时刻;若收消息时刻列表的第一个收消息时刻晚于发消息时刻列表的第一个发消息时刻,则剔除所述发消息时刻列表的第一个发消息时刻。以此类推,逐一对收消息时刻列表、发消息时刻列表中的收、发消息时刻进行匹配。
下面结合图1对本发明实施例进行详细描述。图1是本发明实施例对即时通讯收发时刻进行匹配的方法流程图。步骤如下:
步骤101:通过查询数据库得到即时通讯收消息时刻列表和发消息时刻列表,收、发消息时刻列表中各时刻按升序排列,得到的收消息时刻列表长度为La,发消息时刻列表长度为Lb。
步骤102:开始依次对收消息时刻列表listA的各时刻进行匹配,从第一个收消息时刻开始,即初始条件是令循环下标i=1,匹配标记k=1,然后执行步骤103。
步骤103:判断i是否小于收消息时刻列表listA的长度La,若i小于La,则说明此时i标记的时刻不是listA的最后一个时刻,然后执行步骤104;若i不小于La,则说明此时i标记的时刻是listA的最后一个时刻,结束匹配流程。
步骤104:开始依次对发消息时刻列表listB的各时刻进行匹配,从第一个发消息时刻开始,即初始条件是令循环下标j=k,然后执行步骤105。
步骤105:判断j是否小于发消息时刻列表listB的长度Lb,若j小于Lb,则说明此时j标记的时刻不是listB的最后一个时刻,然后执行步骤106;若j不小于Lb,则说明此时j标记的时刻是listB的最后一个时刻,结束匹配流程。
步骤106:判断listA的第i个时刻是否小于listB的第j个时刻,即判断收消息时刻列表的第i个时刻是否早于发时刻列表的第j个时刻,若是,则说明listB的第j个时刻可能是与listA的第i个时刻对应的发消息时刻,然后执行步骤108;若否,则说明不存在与listB的第j个时刻对应的收消息时刻,可以剔除该listB的第j个时刻,然后执行步骤107。
步骤107:令j=j+1,使计数器加1,然后执行步骤105。
步骤108:判断listB的第j个时刻和listA的第i个时刻的间隔是否小于或等于固定值,设该固定值为40秒,即判断listB的第j个发消息时刻是否晚于listA的第i个时刻40秒以内,若是,则说明可能存在与listA的第i个时刻对应的发消息时刻,然后执行步骤110;若否,则说明不存在与listA的第i个时刻对应的发消息时刻,剔除该listA的第i个时刻,然后执行步骤109。
步骤109:令i=i+1,使计数器加1,然后执行步骤103。
步骤110:将listA的第i个时刻放入经过匹配的收消息时刻列表listR中,将listB的第j个时刻放入经过匹配的发消息时刻列表listS中,并令k=j+1,使得下次匹配从listS的第j+1个开始,然后执行步骤109、步骤103。
通过上述循环,依次对listA中的各收时刻和listB中的各发消息时刻进行匹配,剔除收发时刻间隔超过40秒的时刻,得到对应的收消息时刻列表listR和发消息时刻列表listS。
得到相互对应的收发时刻列表后,根据该列表对即时通讯有效时间进行计算。本发明实施例中,计算即时通讯有效时间的方法如下:
依次用发消息时刻值减去对应的收信息时刻值,并累加结果值,得到即时通讯有效时间。但在实际即时通讯过程中,对应的收发时刻列表中会出现重合的时刻,即一对匹配的收发时刻的发消息时刻晚于随后一对匹配的收发时刻的收消息时刻,则所述一对匹配的收发时刻的发消息时刻与随后一对匹配的收发时刻的收消息时刻为重合的时刻。为了避免对即时通讯时间的重复计算,实现对有效时间的计算,本发明实施例实现了在相互对应的收发时刻中找出有重合时间段的时刻,确认为重合的时刻(即找出重合的时刻),并计算重合的时刻所用的有效时间,累加结果值,依次用相互对应的收发时刻中除重合的时刻以外的发消息时刻值减去对应的收消息时刻值,并将其累加至所述结果值,得到即时通讯有效时间。
本发明实施例中,找出重合的时刻的方法为:判断发消息时刻列表的第一个发消息时刻是否晚于收消息时刻列表的第二个收消息时刻,若所述第一个发消息时刻晚于第二个收消息时刻,则继续判断所述第一个发消息时刻是否晚于所述收消息时刻列表的第三个收消息时刻,依此类推,直至找到第一个晚于所述第一个发消息时刻的收消息时刻,则所述第一个发消息时刻至找到的该第一个晚于所述第一个发消息时刻的收消息时刻的前一个发消息时刻的时间间隔内包含的多个时刻均重合;若所述第一个发消息时刻早于第二个收消息时刻,则所述第一个发消息时刻与第二个收消息时刻不重合。
计算重合的时刻的有效时间的方法为:将找到的所述第一个晚于所述第一个发消息时刻的收消息时刻对应的发消息时刻值,与其下一个收消息时刻值比较,
若所述第一个晚于所述第一个发消息时刻的收消息时刻对应的发消息时刻值小于其下一个收消息时刻值,那么用所述第一个晚于所述第一个发消息时刻的收消息时刻的前一个发消息时刻值减去与所述第一个发消息时刻对应的收消息时刻值,所得结果值即为重合的时刻所用的有效时间;
若所述第一个晚于所述第一个发消息时刻的收消息时刻对应的发消息时刻值大于其下一个收消息时刻值,那么继续依次比较收消息时刻值,寻找比所述第一个晚于所述第一个发消息时刻的收消息时刻对应的发消息时刻值小的收消息时刻值;
依此类推,逐一计算相互对应的收发时刻中重合的时刻所用的有效时间。并将所述重合的时刻所用的有效时间累加至所述结果值。
图2是本发明实施例的计算即时通讯有效时间的方法流程图,下面结合图2对计算即时通讯有效时间的方法流程进行详细描述。步骤如下:
步骤201:取得初步匹配的收消息时刻列表listR和发消息时刻列表listS,,设其长度均为L,然后执行步骤202。
步骤202:开始对listR和listS进行循环判别,初始条件i=1,k=1,set=0,有效时间t=0,其中i是循环计数器,用来表示listS的第i个,k用来标记listS的初始匹配号,set=0表示没有将i赋给k。然后执行步骤203。
步骤203:判断i是否小于L减1,即判断Si(i是S的下标)是否为listS的最后一个时刻,如果i不小于L减1,说明Si是最后一个,执行步骤214(有效时间为listS的第i个时刻值减去与之匹配的listR的第i个时刻值的累加);如果不是最后一个,则执行步骤204。
步骤204:计数器j=1,j表示listS的第i个时刻和listR的第i+j个时刻相应的位置差,然后执行步骤205。
步骤205:判断i+j是否小于L,即判断Ri+j是否为listR的最后一个,如果i+j小于L,则说明Ri+j不是listR的最后一个,执行步骤206;如果i+j不小于L,则说明Ri+j是listR的最后一个,则执行步骤214(即有效时间为listS的最后一个时刻值减去listR的第k个时刻值的累加)。
步骤206:判断listS的第i个时刻值是否小于等于listR的第i+j个时刻值,即判断listS的第i个时刻是否早于listR的第i+j个时刻,若listS的第i个时刻早于listR的第i+j个时刻,则说明这两个时刻不存在重合的情况,执行步骤208;若listS的第i个时刻晚于listR的第i+j个时刻,则说明这两个时刻存在重合的情况,需要继续寻找比listS的第i个时刻晚(大)的listR的时刻,执行步骤207。
步骤207:继续寻找比listS的第i个时刻晚(大)的listR的时刻,计数器j+1,然后执行步骤205。
步骤208:继续判断listS的第i+j-1个时刻值是否小于等于listR的第i+j个时刻值,即判断listS的第i+j-1个时刻是否早于等于listR的第i+j个时刻,若listS的第i+j-1个时刻早于等于listR的第i+j个时刻,则说明这两个时刻不重合,执行步骤209;若listS的第i+j-1个时刻晚于listR的第i+j个时刻,则说明这两个时刻重合,需要继续寻找比listS的第i+j-1个时刻晚(大)的listR的时刻,执行步骤210。
步骤209:有效时间为listS的第i+j-1个时刻值减去的listR的第k个时刻值的累加,然后执行步骤213。
步骤210:判断set是否为零,如果为零,说明对于Ri的这轮循环,还没有令k=i(即标记重合时刻中的第一个收消息时刻),则执行步骤211;如果不为零,则说明曾经令k=i,也就是说在以前的循环中曾出现listS的第i+j-1个时刻晚于listR的第i+j个时刻的情况,但这时我们需要记住的还是k(即重合时刻中的第一个收消息时刻),因此这里不能再令k为当前的i,执行步骤212。
步骤211:标记i,令k=i,并标记set为1,表示已经令k=i了,也就是说已经把重合时刻中的第一个收消息时刻Ri记下来了。如果循环的下次出现listS的第i+j-1个时刻值大于的listR的第i+j个时刻值的情况,也不需要标记下次的Ri(实际下次的Ri是本次的Ri+j)。
步骤212:此时需要从listS的第i+j-1个时刻开始,继续寻找小于等于listS的第i+j-1个时刻值的收消息时刻,令i=i+j-1,然后执行步骤203。
步骤213:计数器i=i+j,k=i,set=0,继续对listS进行循环,然后执行步骤203。
步骤214:有效时间为listS的第i个时刻(即最后一个时刻)减去listR的第i个时刻值,即与之匹配的时刻(也是最后一个时刻)的累加。至此,整个循环结束。
上述过程描述了找出重合的时刻并计算即时通讯有效时间的方法流程。在实际的计算过程中,考虑到获取数据的误差以及个别即时通讯有效时间长度超过固定值而被误剔除的情况,需要对计算得到的有效时间进行校正,校正的办法是:判断收消息时刻列表长度La是否大于发消息时刻列表长度Lb,在剔除收发时刻间隔时间超过固定值的时刻后,得到相互对应的收发时刻列表的长度均为L;若收消息时刻列表长度La大于发消息时刻列表长度Lb,则用La减去L所得结果值与所述固定值相乘,并将乘积值累加至即时通讯有效时间结果值,完成校正;若收消息时刻列表长度La小于发消息时刻列表长度Lb,则用Lb减去L所得结果值与所述固定值相乘,并将乘积值累加至即时通讯有效时间结果值,完成校正。上述计算过程是在收消息列表和发消息列表中的时刻按升序排列的情况下进行的,当收消息列表和发消息列表中的时刻按降序排列时,计算原理与上述相同。
图3是本发明实施例的校正即时通讯有效时间的方法流程图。下面结合图3对校正有效时间的方法进行详细描述,步骤如下:
步骤31:获取listA、listB和相互对应的收发时刻列表listR、listS的长度,listA的长度为La、listB的长度为Lb,listR、listS的长度均为L,令I=0,然后执行步骤32。
步骤32:比较listA和listB的长度,如果listA的长度大于listB,说明listA剔除的超过固定值的时刻个数比listB的多,执行步骤33;如果listA的长度小于listB,说明listA剔除的超过固定值的时刻个数比listB的少,执行步骤34。若La=Lb,则执行步骤33或34均可。
步骤33:将listA的长度La减去listR的长度L的结果值赋给I,即I=La-L,执行步骤35。
步骤34:将listB的长度Lb减去listR的长度L的结果值赋给I,即I=Lb-L,执行步骤35。
步骤35:将I与40秒(上述固定值)的乘积值累加至上述步骤214得到的有效时间结果值,得到的结果值即为校正后的有效时间值。
上述方法可以用于计算一个用户即时通讯的有效时间,也可以用于计算多个用户即时通讯的有效时间,即只需将多个用户的即时通讯有效时间进行累加。
上述方法还可以用于计算使用通讯工具的有效时间,如果统计多个通讯工具使用的有效时间,同样需要对使用各种通讯工具的有效时间进行累加。
本发明实施例还提供了一种用于计算即时通讯有效时间的装置,包括;获取模块、存储模块、匹配模块、运算模块、校正模块。
获取模块,用于从即时通讯记录中获取某一时间段内的收消息时刻列表、发消息时刻列表,以及收发消息状态标识及对应的时刻、收发端的IP地址或使用者信息(例如员工名称或IP地址)、即时通讯工具信息等相关信息,并将获取的上述信息发送给存储模块;还可以通过通讯工具信息从即时通讯记录中取得相应即时通讯工具的某一时间段内的收消息时刻列表、发消息时刻列表。
存储模块,用于接收获取模块发送的某一时间段内的收消息时刻列表、发消息时刻列表、以及收发消息状态标识及对应的时刻、收发端的IP地址或使用者信息(例如员工名称或IP地址)、即时通讯工具信息等相关信息,存储上述信息;并将存储的上述信息发送给匹配模块。
匹配模块,用于接收存储模块发送的某一时间段内的收消息时刻列表、发消息时刻列表、以及收发消息状态标识及对应的时刻、收发端的IP地址或使用者信息(例如员工名称或IP地址)、即时通讯工具信息等相关信息,并根据上述信息对收消息时刻列表、发消息时刻列表中的时刻进行初步匹配,剔除收发时刻间隔时间超过固定值的时刻,得出相互对应的收发时刻;并将得出的相互对应的收发时刻发送给运算模块。匹配模块的具体工作过程见上述方法实施例中对附图1所示流程的描述,在此不再重复说明。
运算模块,用于接收匹配模块发送的相互对应的收发时刻,找出相互对应的收发时刻中有重合时间段的时刻,确认为重合的时刻,并计算重合的时刻所用的有效时间,将其累加至所述结果值;并用于依次用相互对应的收发时刻中除重合时刻以外的发消息时刻值减去对应的收消息时刻值,并将其累加至上述结果值;并在累加结束后将得到的上述结果值发送出去。运算模块的具体工作过程见上述方法实施例中对附图2所示流程的描述,在此不再重复说明。
校正模块,用于接收运算模块发送的上述结果值,根据上述剔除收发时刻间隔时间超过固定值的时刻的情况,对上述结果值进行校正,得到最终有效时间结果值。校正模块的具体工作过程见上述方法实施例中对附图3所示流程的描述,在此不再重复说明。
综上所述,本发明实施例通过提供的方法和装置对收发时刻进行匹配,得到相互对应的收发时刻;通过找出重复的时刻,防止了重复计算时间,通过剔除收发时间间隔超过固定值的时刻,保证了对通讯有效时间的计算,并通过校正减少了计算误差,从而实现了对即时通讯有效时间计算的目的。当需要对各种通讯工具进行排名时,使用本发明实施例提供的方法计算得到的即时通讯有效时间还可以作为排名的参考依据;当需要掌握员工的网络使用情况时,使用本发明实施例提供的方法可以对员工的即时通讯进行计时,以获得员工的网络使用情况。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,本发明的申请文件的权利要求包括这些变形和变化。