首页 > 编程知识 正文

终极算法 豆瓣

时间:2023-11-19 22:13:31 阅读:292002 作者:BGQP

终极算法 豆瓣是一款Python工具包,通过爬取豆瓣图书数据和深度学习算法推荐系统,帮助用户更好地发现、筛选、推荐符合自己喜好的图书。下面将分别从数据爬取、算法模型和推荐系统三个方面进行详细阐述。

一、数据爬取

1、使用requests和BeautifulSoup库进行页面解析。


import requests
from bs4 import BeautifulSoup

url = 'https://book.douban.com/top250'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')

2、使用正则表达式获取图书信息。


pattern = re.compile(r'([0-9]+).(.*?).*?author">(.*?).*?year">(.*?).*?star">(.*?).*?span> ((.*?))', re.S)
items = re.findall(pattern, r.text)

3、将获取的数据写入CSV文件。


import csv

with open('books.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['排名', '书名', '作者', '出版日期', '评分', '评价人数', '书籍链接'])
    for item in items:
        writer.writerow([item[0], item[2], item[3], item[4], item[5], item[6], item[1]])

二、算法模型

1、使用Keras库构建神经网络模型。


from keras.models import Sequential
from keras.layers import Embedding, Dense, Flatten

model = Sequential()
model.add(Embedding(input_dim=num_words, output_dim=32))
model.add(Flatten())
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])

2、训练模型并保存。


model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))
model.save('recommendation_model.h5')

3、在应用程序中加载模型并做出预测。


from keras.models import load_model

model = load_model('recommendation_model.h5')
prediction = model.predict(X_test)

三、推荐系统

1、使用Pandas库对图书数据进行处理。


import pandas as pd

df = pd.read_csv('books.csv')
df['评分'] = df['评分'].apply(lambda x: float(x))
df['评价人数'] = df['评价人数'].apply(lambda x: int(re.sub('D', '', x)))

2、将用户对图书的评分转换为二进制向量。


import numpy as np

def get_binary_vector(user_rating):
    binary_vector = np.zeros(len(df), dtype=int)
    for i, isbn in enumerate(df.ISBN):
        if isbn in user_rating:
            binary_vector[i] = user_rating[isbn]
    return binary_vector

user_rating = {'0394800133': 5, '1416909427': 4, '059035342X': 3}
user_vector = get_binary_vector(user_rating)

3、计算用户向量与所有图书向量的相似度,并选出最相似的n本图书。


from sklearn.metrics.pairwise import cosine_similarity

cosine_similarities = cosine_similarity(df_matrix, user_vector.reshape(1,-1)).flatten()
related_indexes = cosine_similarities.argsort()[:-n-1:-1]

4、输出推荐结果。


for i in range(n):
    related_index = related_indexes[i]
    print(f"推荐图书{i+1}:{df.iloc[related_index]['书名']},作者:{df.iloc[related_index]['作者']},评分:{df.iloc[related_index]['评分']},评价人数:{df.iloc[related_index]['评价人数']}")

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。