给定一个Web日志,其中包含“用户”“页面网址”字段。我们必须找出用户需要的最频繁的3页序列。
有时间戳记。并且不能保证单个用户访问将被顺序记录,就像user1 Page1 user2 Pagex user1 Page2 User10 Pagex user1 Page 3一样,其User1的页面顺序为page1-> page2-> page 3
假设您的日志按时间戳顺序存储,这里有一个算法可以满足您的需要:
这是 Python 中的一个实现,假设您的字段是用空格分隔的:
fh = open('log.txt', 'r')
user_visits = {}
visit_counts = {}
for row in fh:
user, url = row.split(' ')
prev_visits = user_visits.get(user, ())
if len(prev_vists) == 2:
visit_tuple = prev_vists + (url,)
visit_counts[visit_tuple] = visit_counts.get(visit_tuple, 0) + 1
user_visits[user] = (prev_vists[1], url)
popular_sequences = sorted(visit_counts, key=lambda x:x[1], reverse=True)
Run Code Online (Sandbox Code Playgroud)
又快又脏:
foreach(entry in parsedLog)
{
users[entry.user].urls.add(entry.time, entry.url)
}
foreach(user in users)
{
user.urls.sort()
for(i = 0; i < user.urls.length - 2; i++)
{
key = createKey(user.urls[i], user.urls[i+1], user.urls[i+2]
sequenceCounts.incrementOrCreate(key);
}
}
sequenceCounts.sortDesc()
largestCountKey = sequenceCounts[0]
topUrlSequence = parseKey(largestCountkey)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4673 次 |
| 最近记录: |