Convert interactions to amazon18-style: - user2index - item2index - user2items[user_index] = [item_index...] - interactions list of (user_id, asin, rating, timestamp)
(reviews)
| 219 | return new_reviews, user_counts, item_counts |
| 220 | |
| 221 | def convert_interactions_amazon23(reviews): |
| 222 | """ |
| 223 | Convert interactions to amazon18-style: |
| 224 | - user2index |
| 225 | - item2index |
| 226 | - user2items[user_index] = [item_index...] |
| 227 | - interactions list of (user_id, asin, rating, timestamp) |
| 228 | """ |
| 229 | |
| 230 | user_reviews = collections.defaultdict(list) |
| 231 | |
| 232 | for r in reviews: |
| 233 | user_reviews[r["user_id"]].append(r) |
| 234 | |
| 235 | # Sort each user's reviews by time |
| 236 | for u in user_reviews: |
| 237 | user_reviews[u].sort(key=lambda x: x["timestamp"]) |
| 238 | |
| 239 | user2index, item2index = {}, {} |
| 240 | user2items = collections.defaultdict(list) |
| 241 | interactions = [] |
| 242 | |
| 243 | for user in user_reviews: |
| 244 | if user not in user2index: |
| 245 | user2index[user] = len(user2index) |
| 246 | |
| 247 | for r in user_reviews[user]: |
| 248 | item = r["asin"] |
| 249 | if item not in item2index: |
| 250 | item2index[item] = len(item2index) |
| 251 | |
| 252 | uid = user2index[user] |
| 253 | iid = item2index[item] |
| 254 | |
| 255 | user2items[uid].append(iid) |
| 256 | interactions.append((user, item, r["rating"], r["timestamp"])) |
| 257 | |
| 258 | print( |
| 259 | f"[Mapping] Users={len(user2index)}, Items={len(item2index)}, " |
| 260 | f"Interactions={len(interactions)}" |
| 261 | ) |
| 262 | return user2items, user2index, item2index, interactions |
| 263 | |
| 264 | |
| 265 | def build_interaction_list_amazon23(reviews, user2index, item2index, asin2title): |