我从Facebook上下载了我的个人数据,我想我可以用它做一些有趣的事情。我正在尝试提取我拥有的特定群聊。
我使用的文件的大小是18 kB,所以它是很多html代码,在标签中没有任何id或任何有助于提取数据的东西。我所有聊天的唯一区别是涉及的人不同,所以这就是我开始检查的原因。
我正在使用Jsoup (http://jsoup.org/)来做这件事。文档的层次结构排序如下:
<div class="thread">
<div class="message">
<div class="message_header">
<span class="user">user_name</span>
<span class="meta"> date_when_said </span>
</div>
</div>
<p>user_said_something</p>
</div> //div class thread ends
<div class="thread"> //new group chat begins 我开始只是计算聊天中的每个人说了多少次。
for(int i = 0; i < doc.select("div[class=thread]").size(); i++){
if (doc.select("div[class=thread]").get(i).ownText().equals(chat_name)) {
int children = doc.select("div[class=thread]").get(i).children()
.size();
int traverse = 0;
while (traverse <= children) {
switch (doc.select("span[class=user]").get(traverse).ownText()) {
case user_one:
wordSaid[0] += 1;
break;
case user_two:
wordSaid[1] += 1;
break;
}
}
}我在这里所做的是,我首先使用for循环检查所有不同的聊天。然后,我检查该线程的文本是否等于我想要提取的聊天内容。如果是,那么我开始向下迭代该线程的所有子线程。
由于一个线程的子线程最多可以包含2000个子线程,这需要很长时间。
我很高兴对我所做的事情有任何建议或评论,这样我就可以改进这一点,使其具有可扩展性,也许还能找到一种聪明的方法来解决我的任务。
发布于 2015-05-19 23:17:13
假设<span class="user">user_name</span>只发生在用户在聊天中说什么之前,你可以:
doc.select("span[class=user]")
这种方法的优点是,您不必计算子文件的数量并遍历整个XML文件。
https://stackoverflow.com/questions/30329253
复制相似问题