()
| 514 | |
| 515 | |
| 516 | def main(): |
| 517 | args = parse_args() |
| 518 | |
| 519 | print("===================================================") |
| 520 | print(" Amazon 2023 Dataset Processing Pipeline Starting ") |
| 521 | print("===================================================") |
| 522 | print(f"Dataset : {args.dataset}") |
| 523 | print(f"Metadata file : {args.metadata_file}") |
| 524 | print(f"Reviews file : {args.reviews_file}") |
| 525 | print(f"K-core threshold: {args.user_k}") |
| 526 | print("---------------------------------------------------") |
| 527 | |
| 528 | # Load metadata and reviews |
| 529 | asin2meta, asin2title = load_metadata_amazon23(args.metadata_file) |
| 530 | reviews = load_reviews_amazon23(args.reviews_file) |
| 531 | |
| 532 | if len(reviews) == 0: |
| 533 | print("[ERROR] No reviews loaded. Abort.") |
| 534 | return |
| 535 | |
| 536 | # Time range filtering is done inside k-core (json2csv style) |
| 537 | start_ts = get_timestamp_start(args.st_year, args.st_month) |
| 538 | end_ts = get_timestamp_start(args.ed_year, args.ed_month) |
| 539 | |
| 540 | print(f"[INFO] Time range filtering inside k-core: {args.st_year}-{args.st_month} → {args.ed_year}-{args.ed_month}") |
| 541 | |
| 542 | |
| 543 | print("Total reviews loaded:", len(reviews)) |
| 544 | print("Total metadata items:", len(asin2title)) |
| 545 | |
| 546 | unique_items = len(set(r["asin"] for r in reviews)) |
| 547 | print("Unique items in reviews:", unique_items) |
| 548 | |
| 549 | items_in_meta = sum(1 for r in reviews if r["asin"] in asin2title) |
| 550 | print("Reviews with metadata title:", items_in_meta) |
| 551 | |
| 552 | print("Min timestamp:", min(r["timestamp"] for r in reviews)) |
| 553 | print("Max timestamp:", max(r["timestamp"] for r in reviews)) |
| 554 | |
| 555 | # K-core filtering |
| 556 | reviews_filtered, user_counts, item_counts = k_core_filter_amazon23( |
| 557 | reviews, asin2title, K=args.user_k, |
| 558 | start_timestamp=start_ts, |
| 559 | end_timestamp=end_ts |
| 560 | ) |
| 561 | |
| 562 | print(f"[K-core Result] Users={len(user_counts)}, Items={len(item_counts)}, Reviews={len(reviews_filtered)}") |
| 563 | |
| 564 | # Convert to index mappings |
| 565 | user2items, user2index, item2index, interactions = convert_interactions_amazon23( |
| 566 | reviews_filtered |
| 567 | ) |
| 568 | |
| 569 | # Build interaction_list for sequences |
| 570 | interaction_list = build_interaction_list_amazon23( |
| 571 | reviews_filtered, user2index, item2index, asin2title |
| 572 | ) |
| 573 |
no test coverage detected