如何更快地建立倒排索引?
问题描述
我想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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这么麻烦,为啥不直接用lucene, es之类的