`

聊天群成员记录统计

阅读更多
    昨天大家在k群聊天,群主谈到清理长期潜水、不冒泡的成员,于是琢磨了一个成员聊天记录统计的小程序。
    从kk聊天主面板下面的喇叭 ,打开“消息管理器”页面,选中要导出的群,导出时指定聊天信息保存文件的格式为txt;在聊天窗口左上角第一个图标,点击下拉后点击‘查看通讯录’。将成员全选后,复制到一个txt文档中。
   以下是程序代码,仅是简单地实现了统计的功能,未考虑性能问题。
package cn.com.ld.study.io;

/**   
 * @filename: QGroupUser   
 * @description: 群主成员 
 * @author lida  
 * @date 2013-4-9 下午2:13:55      
 */
public class QGroupUser implements  Comparable<QGroupUser> {
	private long id;
	private String name;
	private int activeNo;
	private boolean isAdmin;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getActiveNo() {
		return activeNo;
	}

	public void setActiveNo(int activeNo) {
		this.activeNo = activeNo;
	}

	public boolean isAdmin() {
		return isAdmin;
	}

	public void setAdmin(boolean isAdmin) {
		this.isAdmin = isAdmin;
	}

	@Override
	public int compareTo(QGroupUser o) {
		int result = this.activeNo - o.activeNo ; 
		return result < 0  ? 1 : result == 0 ? 0 : -1;
	}
	
	@Override
    public String toString(){
    	return String.format("昵称:%s   qq号:%s  聊天次数:%s  管理员:%s", this.name,this.id,this.activeNo,(this.isAdmin?"是":"否"));
    }
}



package cn.com.ld.study.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class QGroupMemberFilter {

	// @Fields userFilePath : 群主成员
	private static final String userFilePath = "d:/users.txt";

	// @Fields chatMessagePath : 群聊天记录
	private static final String chatMessagePath = "d:/北京Java开发.txt";

	private static final String NORMAL_ADMIN = "管理员";
	private static final String SUPER_ADMIN = "群主";

	/**
	 * @Title: getQGroupUserFromFile
	 * @Description: 读取群主成员列表
	 * @return List<QGroupUser>
	 * @throws IOException
	 *             读取群主成员文件时发生io异常或error
	 */
	private static List<QGroupUser> getQGroupUserFromFile() throws IOException {
		List<QGroupUser> qGroupUserList = new ArrayList<QGroupUser>();
		try {
			BufferedReader reader = new BufferedReader(new FileReader(new File(
					userFilePath)));
			String content = "";
			QGroupUser groupUser = null;
			String userName = null;
			String userid = null;
			int i = 1;
			boolean isAdmin = false;
			while ((content = reader.readLine()) != null) {
				if (content.length() == 0) {
					i = 1;
					groupUser = new QGroupUser();
					groupUser.setId(Long.parseLong(userid));
					groupUser.setName(userName);
					groupUser.setAdmin(isAdmin);
					qGroupUserList.add(groupUser);
					isAdmin = false;
					continue;
				}

				if (i == 1) {
					userName = content;
				} else if (i == 2) {
					userid = content.substring(1, content.length() - 1);
				} else {
					// System.out.println(content.equals(ADMIN));
					isAdmin = content.equals(NORMAL_ADMIN)
							|| content.equals(SUPER_ADMIN) ? true : false;
				}
				i++;
			}
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return qGroupUserList;
	}

	/**
	 * @Title: getUserActiveNo
	 * @Description: 获得指定kk号的发言次数
	 * @param userid
	 *            用户kk号
	 * @param chatMsg
	 *            读取的消息内容
	 * @return int 聊天次数
	 */
	private static int getUserActiveNo(long userid, String chatMsg) {
		Pattern pattern = Pattern.compile(String.valueOf(userid));
		Matcher matcher = pattern.matcher(chatMsg);
		int count = 0;
		while (matcher.find()) {
			count++;
		}
		return count;
	}

	/**
	 * @Title: staUserActive
	 * @Description: 给群内成员设置聊天次数
	 * @param 群内成员
	 * @return void
	 */
	private static void staUserActive(List<QGroupUser> groupUsers)
			throws IOException {
		int bufSize = 1024;
		byte[] bs = new byte[bufSize];
		ByteBuffer byteBuf = ByteBuffer.allocate(1024);
		FileChannel channel = new RandomAccessFile(chatMessagePath, "r")
				.getChannel();
		while (channel.read(byteBuf) != -1) {
			int size = byteBuf.position();
			byteBuf.rewind();
			byteBuf.get(bs);
			String chatMsg = new String(bs, 0, size);
			for (QGroupUser user : groupUsers) {
				long userCount = user.getId();
				int count = getUserActiveNo(userCount, chatMsg);
				user.setActiveNo(user.getActiveNo() + count);
			}
			byteBuf.clear();
		}
	}

	public static void main(String[] args) throws IOException,
			InterruptedException {
		// 获得群成员
		List<QGroupUser> groupUsers = getQGroupUserFromFile();
		// 设置成员聊天次数
		staUserActive(groupUsers);
		// 按聊天次数降序排序
		Collections.sort(groupUsers);

		for (QGroupUser user : groupUsers) {
		    System.out.println(user.toString());
		}
	}
}




3
1
分享到:
评论
4 楼 zld406504302 2013-04-10  
zld406504302 写道
fw_lucifer 写道
比如一位的kk号是10000,另一位的是100001,会有问题吗?


如果一个号码包含了另一个号码,肯定有问题的



逻辑中去掉了号码的“()” 将“()”携带着去match ,应该就没问题了。
没有考虑太周全,谢谢提示。
3 楼 zld406504302 2013-04-10  
fw_lucifer 写道
比如一位的kk号是10000,另一位的是100001,会有问题吗?


如果一个号码包含了另一个号码,肯定有问题的
2 楼 fw_lucifer 2013-04-10  
比如一位的kk号是10000,另一位的是100001,会有问题吗?
1 楼 _gougang 2013-04-10  
不错,不错,学习了

相关推荐

    统计qq群聊天记录

    二是情感分析,通过NLP(自然语言处理)技术,对消息内容进行正面、负面或中性情感分类,了解群成员的情绪状态。三是用户活跃度分析,根据消息发送时间分布,识别群内的活跃时段和活跃用户。四是网络分析,构建用户...

    weixin-stat:模拟微信登陆,实现好友信息统计位置分布,聊天记录统计分析,群成员统计分析

    weixin-stat微信模拟登陆器,实现好友信息统计分析,聊天记录统计分析,群成员统计分析,发送消息功能介绍获取好友信息:统计男女比例,地图分布,备注名称,和好友共同的群,导出获取群信息:统计群信息,群友信息...

    [工具查询]QQ群聊天网友发言数排行查询 v1.0_qq_paiming.zip

    - 工具通过读取QQ群的聊天记录,对群成员的发言进行统计,提供数据支持。 - 数据包括但不限于发言次数、平均发言频率、发言时间分布等,为管理者提供全面的用户行为洞察。 2. **发言排行功能**: - 软件能够生成...

    怎么查看QQ群成员活跃度?.docx

    总之,通过观察群成员的最后发言时间、群等级、群空间统计和活动参与情况,可以全面地了解QQ群成员的活跃度,从而更好地管理和优化你的QQ群。对于群管理员来说,定期检查这些指标有助于保持群内的活跃氛围,促进群...

    人工智能-项目实践-情感分析-对QQ群的聊天记录进行分析,得出此群情感,话题演化等

    3. **统计群活跃度**:通过对聊天记录的分析,可以计算出每个成员的发言频率,找出群中最活跃的成员。这有助于了解群内的核心人物和交流热点。 4. **话题范围挖掘**:话题挖掘是通过聚类或主题建模技术来识别群内...

    QQ群发言统计工具源码

    QQ本身提供了聊天记录导出功能,用户可以在群设置中找到这一选项,导出的文件通常包含所有群成员的发言记录。 2. 数据解析:工具读取导入的TXT文件,解析其中的聊天记录数据。这一步可能涉及到字符串处理、正则...

    QQ群活跃度统计软件

    QQ群活跃度统计软件是一款专为监测和分析QQ群成员活动情况而设计的应用。这款软件的核心功能是收集和整理群内的发言数据,帮助群管理员了解群成员的参与度,从而优化管理策略,提升群的活跃度。以下是软件的几个关键...

    基于Python tkiner实现的聊天软件源码+数据库初始化代码,支持群聊功能、私聊,加群、创建群的功能

    *使用数据库存储用户信息、好友关系、群成员、所有聊天记录 *群聊中显示群成员(双击打开聊天窗口/发送好友请求);实时显示群成员在线状态,置顶在线的成员 *联系人列表中的显示最近消息(同QQ,群聊则显示发送...

    QQ群聊天数据分析python实现

    例如,计算群成员的发言频率,找出最活跃的用户;分析聊天时间分布,了解群活跃时段;还可以根据聊天内容进行词频分析,挖掘热点话题。Numpy和Scipy库提供了数学和统计函数,而Matplotlib和Seaborn用于数据可视化,...

    QQ群聊天数据分析python练习实例源码

    2. **活跃度分析**:分析聊天的活跃时间段,以了解群成员的活动规律。 3. **用户参与度分析**:计算每个成员的发言次数,找出最活跃和最沉默的成员。 4. **情感分析**:利用自然语言处理(NLP)技术,评估聊天中的...

    基于Python的微信群聊特点统计与分析.pdf

    具体操作包括按天统计发言总数,通过图表展示群心情走势图,进行聊天情感归类并分析,以及进行词频分析,展示话题排行等。 作者在文中提到的可视化展示部分,使用了Bar(条形图)、Line(线图)、WordCloud(词云图...

    付费社群聊天 小程序源码V1.4.5

    源码中会包含消息发送、接收、存储和展示的逻辑,以及聊天记录的管理。 4. **支付系统**:与微信支付接口对接,处理支付请求,确保交易安全。这里涉及到的源码会处理订单状态、退款、通知等业务逻辑。 5. **权限...

    优优-QQ群化软件4.8.rar

    6. 设置群成员查看历史消息权限:这个功能允许管理员控制群成员能否查看群的历史聊天记录。这有助于保护群内敏感信息,同时也能根据需要调整群的开放程度,增强群的私密性。 综上所述,优优-QQ群化软件4.8致力于...

    QQ群数据在哪.docx

    2. **发言人数**:统计一定时间段内有多少群成员参与了聊天,可以帮助识别群的活跃度和参与度。 3. **发言条数**:记录了总的发言次数,可衡量群内的信息流量。 4. **活跃用户列表**:列出群内最活跃的成员,这些...

    Hello聊天工具服务端

    3. **群消息**:群聊功能涉及到多个用户之间的信息同步,服务端需要管理群组成员关系,跟踪并广播群消息到所有成员。此外,群设置(如禁言、踢人)的处理也需在服务端实现。 4. **消息漫游**:消息漫游是指用户在...

    QQ聊天机器人

    4. 数据统计:记录群聊中的关键数据,如活跃成员、发言频率等,为群管理提供参考。 5. 教育辅助:在教育场景下,机器人可以作为辅导工具,帮助解答学生的问题,推送学习资料。 在实际应用中,开发者还可以根据需求...

    多功能设置1.11.rar

    3. **群活动与任务**:可能支持创建群任务和活动,促进群成员间的互动,比如定时的在线问答、话题讨论等。 4. **群成员管理**:可以提供批量踢人、拉黑、禁言等操作,方便处理违规行为,同时也有助于维护群内的秩序...

    QQ聊天工具

    3. 群聊:QQ群是一个多人在线聊天的平台,适用于工作团队、学习小组等场景,方便成员共享信息、讨论问题。 4. 文件传输:用户可以通过QQ快速发送文件,无论是文本、图片还是大型的文档,都可以轻松传输,极大提高了...

    自定义签到 V1.62

    3. **统计与报告**:该插件可能提供了签到记录的统计功能,可以查看每个群成员的签到情况,帮助管理员了解成员的活跃度。 4. **自动化处理**:酷Q机器人会自动响应并处理签到请求,无需人工干预,大大减轻了管理员...

    智能QQ群管

    6. **签到系统**:签到功能鼓励群成员的日常参与,通过记录成员的签到情况,可以激励活跃度,并且可以作为统计和奖励依据。管理员可以通过签到数据了解群的活跃程度,同时设置奖励机制来激发成员的积极性。 智能QQ...

Global site tag (gtag.js) - Google Analytics