分组相关搜索关键词

4 投票
5 回答
2004 浏览
提问于 2025-04-15 19:21

我有一个日志文件,里面记录了用户在我网站搜索引擎中输入的搜索查询。我想把相关的搜索查询“归类”在一起,以便生成报告。我大部分的网页应用都是用Python写的,所以解决方案可以基于Python,或者如果用SQL更简单的话,我也可以把字符串加载到Postgres数据库里。

示例数据:

dog food
good dog trainer
cat food
veterinarian

归类应该包括:

猫:
猫粮

狗:

dog food
good dog trainer

食物:

dog food
cat food

等等...

有什么想法吗?也许可以用某种“索引算法”?

5 个回答

0

这不是一个具体的算法,但你要找的东西基本上就是从你的文本行中提取出的单词所创建的一个索引。

所以你需要某种解析器来识别单词,然后把这些单词放进一个索引结构里,并把每个索引条目链接到它出现的那一行(或多行)。然后,通过查看这些索引条目,你就能得到你的“组”。

1

看起来你只是想找出每个包含特定单词的查询。你可以很简单地用普通的SQL来做到这一点,方法是使用通配符匹配功能,也就是这样:

SELECT * FROM QUERIES WHERE `querystring` LIKE '%dog%'.

不过,上面的查询有一个问题,就是它也会找到像“dogbah”这样的查询字符串。你需要写几个不同的条件,用“或”来处理不同的情况,假设你的单词是用空格分开的。

4
f = open('data.txt', 'r')
raw = f.readlines()

#generate set of all possible groupings
groups = set()
for lines in raw:
    data = lines.strip().split()
    for items in data:
        groups.add(items)

#parse input into groups
for group in groups:
    print "Group \'%s\':" % group
    for line in raw:
        if line.find(group) is not -1:
            print line.strip()
    print

#consider storing into a dictionary instead of just printing

这段代码可以进行很多优化,但如果你把原始数据放在一个外部文本文件里,它会输出以下结果:

Group 'trainer':
good dog trainer

Group 'good':
good dog trainer

Group 'food':
dog food
cat food

Group 'dog':
dog food
good dog trainer

Group 'cat':
cat food

Group 'veterinarian':
veterinarian

撰写回答