Bảng So sánh (Comparison Table)

Mô tả Tổng quan

Tính năng Bảng So sánh cho phép người dùng so sánh các sản phẩm trong một dataset theo dạng đặt cạnh nhau. Chức năng cung cấp cái nhìn có cấu trúc về thuộc tính sản phẩm, chỉ số hiệu năng và thông tin từ đánh giá dưới dạng bảng, làm nổi bật điểm giống và khác nhau. Bảng so sánh giúp ra quyết định tốt hơn bằng cách trực quan hóa cách sản phẩm so sánh qua nhiều khía cạnh quan trọng.

Tính năng đặc biệt hữu ích cho phân tích cạnh tranh, lựa chọn sản phẩm và xác định cơ hội thị trường dựa trên điểm mạnh/điểm yếu. Yêu cầu dataset hợp lệ chứa nhiều sản phẩm có thuộc tính so sánh được.

Swagger Link

API: Comparison Table API

Tài liệu Tình huống

Trường hợp 1: Quan điểm Cụ thể (SPVP)

Mô tả

Tạo bảng so sánh dựa trên Quan điểm Cụ thể. Dữ liệu tổng hợp từ review_sentence_spvp và trả theo từng quan điểm kèm tỉ lệ tích cực/tiêu cực theo sản phẩm.

Sơ đồ Trình tự

sequenceDiagram
    participant User
    participant API as ProductAnalyzerController
    participant Service as SpvpService
    participant Repo as WishlistDatasetHistoryRepository
    participant DB as Database

    Note over User,DB: Bước 1: Yêu cầu bảng so sánh (SPVP)
    User->>API: GET /api/v1/general/analyzer/{wldh_slug}/products/comparison (viewpoint_type=SpecificViewpoint)
    
    Note over API,Repo: Bước 2: Xác thực Dataset
    API->>Repo: findBySlug(wldh_slug)
    Repo-->>API: wishlistDataset
    
    Note over API,Service: Bước 3: Tổng hợp theo Quan điểm Cụ thể
    API->>Service: getComparitionTableBySpecificViewpoint(wishlistDataset, params)
    Service->>DB: Query review_sentence_spvp join review_sentences
    DB-->>Service: SPVP review data
    
    Note over Service,API: Bước 4: Cấu trúc bảng so sánh
    Service-->>API: Bảng so sánh đã định dạng
    
    Note over API,User: Bước 5: Trả về phản hồi
    API-->>User: 200 OK (dữ liệu bảng so sánh)

Các bước

Bước 1: Yêu cầu (SPVP)

  • Mô tả: Tạo bảng so sánh bằng Quan điểm Cụ thể
  • Yêu cầu: GET /api/v1/general/analyzer/{wldh_slug}/products/comparison
  • Tham số:
    • Đường dẫn: wldh_slug
    • Truy vấn:
      • viewpoint_type (bắt buộc): SpecificViewpoint
      • start_date (bắt buộc): YYYY-MM-DD
      • end_date (bắt buộc): YYYY-MM-DD
      • mall_product_ids (tùy chọn): danh sách ID (phân tách bằng dấu phẩy)
      • all_products (tùy chọn, boolean, mặc định false): nếu true, phản hồi bao gồm số lượng tích cực/tiêu cực thô theo sản phẩm ngoài tỉ lệ
      • base_product_id (tùy chọn): sản phẩm nền
      • is_noise (tùy chọn): true | false

Bước 2: Xác thực Dataset

  • Mô tả: Xác thực dataset tồn tại
  • Hành động: Tìm theo slug trong repository
  • Lỗi: Dataset không tồn tại

Bước 3: Tổng hợp (SPVP)

  • Mô tả: Tổng hợp câu đánh giá SPVP theo quan điểm
  • Hành động:
    • Join review_sentence_spvp với review_sentences
    • Group theo sản phẩm và viewpoint_ordinal_number
    • Tính phần trăm tích cực/tiêu cực theo sản phẩm

Bước 4: Cấu trúc (SPVP)

  • Mô tả: Tạo các hàng theo quan điểm với dữ liệu tích cực/tiêu cực cho từng sản phẩm
  • Trường xuất cho mỗi quan điểm:
    • viewpoint_id, viewpoint_name
    • data: map mall_product_id => { positive, negative }

Bước 5: Phản hồi

  • Mô tả: Trả về bảng so sánh đã cấu trúc
  • Ví dụ (SPVP, mặc định không có totals):
    [
      {
        "viewpoint_id": 515,
        "viewpoint_name": "Price",
        "data": {
          "dogparadise:4589602260099": { "positive": "60.0%(30)", "negative": "40.0%(20)" },
          "1001000497050103287": { "positive": "55.0%(22)", "negative": "45.0%(18)" }
        }
      }
    ]
    
  • Ví dụ (SPVP, với all_products=true):
    [
      {
        "viewpoint_id": 515,
        "viewpoint_name": "Price",
        "data": {
          "dogparadise:4589602260099": {
            "positive": { "rate": "60.0%", "count": 30 },
            "negative": { "rate": "40.0%", "count": 20 },
            "total_count": 50
          },
          "1001000497050103287": {
            "positive": { "rate": "55.0%", "count": 22 },
            "negative": { "rate": "45.0%", "count": 18 },
            "total_count": 40
          }
        }
      }
    ]
    

Trường hợp 2: Quan điểm AI

Mô tả

Tạo bảng so sánh bằng Quan điểm AI. Dữ liệu tổng hợp theo AI viewpoint trên tập sản phẩm được chọn.

Sơ đồ Trình tự

sequenceDiagram
    participant User
    participant API as ProductAnalyzerController
    participant Service as ProductAnalyzerService
    participant Repo as WishlistDatasetHistoryRepository
    participant DB as Database

    Note over User,DB: Bước 1: Yêu cầu bảng so sánh (AI)
    User->>API: GET /api/v1/general/analyzer/{wldh_slug}/products/comparison (viewpoint_type=AiViewpoint)

    Note over API,Repo: Bước 2: Xác thực Dataset
    API->>Repo: findBySlug(wldh_slug)
    Repo-->>API: wishlistDataset

    Note over API,Service: Bước 3: Tổng hợp theo AI Viewpoint
    API->>Service: comparisonTable(request, wishlistDataset)
    Service->>DB: Query review_sentence_aivp + review_sentences
    DB-->>Service: AI viewpoint review data

    Note over Service,API: Bước 4: Cấu trúc bảng so sánh
    Service-->>API: Bảng so sánh đã định dạng

    Note over API,User: Bước 5: Trả về phản hồi
    API-->>User: 200 OK (dữ liệu bảng so sánh)

Các bước

Bước 1: Yêu cầu (AI)

  • Yêu cầu: GET /api/v1/general/analyzer/{wldh_slug}/products/comparison
  • Tham số:
    • Đường dẫn: wldh_slug
    • Truy vấn:
      • viewpoint_type (bắt buộc): AiViewpoint
      • start_date (bắt buộc): YYYY-MM-DD
      • end_date (bắt buộc): YYYY-MM-DD
      • mall_product_ids (tùy chọn)
      • all_products (tùy chọn, boolean, mặc định false): nếu true, phản hồi bao gồm số lượng tích cực/tiêu cực thô theo sản phẩm ngoài tỉ lệ
      • is_noise (tùy chọn): true | false

Bước 2: Tổng hợp (AI)

  • Mô tả: Tổng hợp câu đánh giá theo AI viewpoint
  • Hành động:
    • Join review_sentence_aivp với review_sentences
    • Group theo sản phẩm và AI viewpoint_id
    • Tính tổng tích cực/tiêu cực theo sản phẩm

Bước 3: Phản hồi (AI)

  • Ví dụ (mặc định không có totals):
    [
      {
        "viewpoint_id": 101,
        "viewpoint_name": "Delivery",
        "data": {
          "dogparadise:4589602260099": { "positive": "62.0%(31)", "negative": "38.0%(19)" }
        }
      }
    ]
    
  • Ví dụ (với all_products=true):
    [
      {
        "viewpoint_id": 101,
        "viewpoint_name": "Delivery",
        "data": {
          "dogparadise:4589602260099": {
            "positive": { "rate": "62.0%", "count": 31 },
            "negative": { "rate": "38.0%", "count": 19 },
            "total_count": 50
          }
        }
      }
    ]
    

Bảng/Trường liên quan (SPVP)

erDiagram
    review_sentences {
        bigint id PK
        string mall_product_id
        double sentiment_score
        date post_date
        boolean is_noise
    }
    review_sentence_spvp {
        bigint id PK
        bigint sentence_id FK
        int viewpoint_category_id
        int viewpoint_ordinal_number
    }
    review_sentences ||--o{ review_sentence_spvp : has

Bảng/Trường liên quan (AI Viewpoint)

erDiagram
    review_sentences {
        bigint id PK
        string mall_product_id
        double sentiment_score
        date post_date
        boolean is_noise
    }
    review_sentence_aivp {
        bigint id PK
        bigint sentence_id FK
        bigint ai_viewpoint_id FK
        bigint dataset_id FK
    }
    review_sentences ||--o{ review_sentence_aivp : has

Xử lý Lỗi

  • Log

    • Ghi log thất bại tạo bảng so sánh
  • Chi tiết Lỗi:

    Thông báo Mô tả
    404 "Dataset not found" Slug dataset không tồn tại
    400 "Invalid product selection" ID sản phẩm không hợp lệ
    400 "Insufficient products for comparison" Chọn ít hơn 2 sản phẩm
    400 Lỗi chung kèm thông điệp ngoại lệ Lỗi bất ngờ khi xử lý

Ghi chú bổ sung

  • Khuyến nghị so sánh 2–5 sản phẩm để tối ưu
  • Có thể xuất bảng so sánh ra CSV/PDF
  • Có thể tính chỉ số so sánh tùy biến dựa trên thuộc tính sản phẩm
  • Hiệu năng có thể bị ảnh hưởng khi so sánh nhiều sản phẩm với nhiều thuộc tính