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

问题描述

我想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

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

阅读 4.6k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题