如何更快地建立倒排索引?

发布于 2022-09-11 19:09:43 字数 1378 浏览 14 评论 0

问题描述

我想python实现一个简单的搜索引擎,需要建立倒排索引。但我的方法太耗时了(如图),这个算法应该怎么改比较好?
我的思路是,爬虫获取的网页数据保存在MySQL中,然后从数据库获取到数据后进行分词,暂存在字典中(倒排索引),然后保存至redis数据库,索引中保存的是每个单词对应的网页ID和词频。

相关代码

mydb = mysql.connector.connect(
      host="localhost",
      user="root",
      passwd="121314",
      database="spider"
    )
mycursor = mydb.cursor()

mycursor.execute("SELECT id, data FROM page")
result = mycursor.fetchall()

for row in result:
    lexicon(row[0], row[1])
word_dict = {}
r = redis.Redis(host="127.0.0.1", port=6379, db=0)

def lexicon(id, data):
    print("Lexiconing and building index.") 
    word_list = jieba.cut_for_search(str(data))

    # 标点符号和停用词
    with open('stop_words.txt') as f:
        stop_words = [line.strip() for line in f.readlines()]

    for item in word_list:
        if item not in stop_words:
            if item not in word_dict:
                word_dict[item] = {}
                word_dict[item][id] = 1               
                r.hset(item, id, 1) # 设置词频至redis中
            else:
                if idd not in word_dict[item]:
                    word_dict[item][id] = 1
                    r.hset(item, id, 1) # 设置词频至redis中
                else:
                    word_dict[item][id] += 1
                    r.hincrby(item, id, 1) # redis词频+1

网上这方面的资料太少了,最近比较感兴趣,希望有人能给点建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

掌心的温暖 2022-09-18 19:09:43

这么麻烦,为啥不直接用lucene, es之类的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文