2009-02-27 43 views
18

Tôi cần phải tự động khớp tên sản phẩm (máy ảnh, máy tính xách tay, TV-s vv) đến từ các nguồn khác nhau với tên chuẩn trong cơ sở dữ liệu.Kết hợp mờ của tên sản phẩm

Ví dụ "Canon PowerShot a20IS", "powershot A20 MỚI LÀ từ Canon""Máy ảnh kỹ thuật số Canon PS A20IS" nên tất cả các trận đấu "Canon PowerShot A20 LÀ". Tôi đã làm việc với khoảng cách levenshtein với một số heuristics thêm (loại bỏ các từ thông dụng rõ ràng, gán chi phí cao hơn để thay đổi số vv), mà làm việc ở một mức độ nào đó, nhưng không đủ tốt không may.

Vấn đề chính là ngay cả những thay đổi một chữ cái trong các từ khóa có liên quan cũng có thể tạo ra sự khác biệt lớn, nhưng không dễ để phát hiện từ khóa nào có liên quan. Hãy xem xét ví dụ ba tên sản phẩm:
Lenovo T400
Lenovo R400
New Lenovo T400, Core 2 Duo
Hai đầu tiên là chuỗi ridiculously tương tự theo tiêu chuẩn nào (ok, Soundex có thể giúp để phân biệt chữ T và R trong trường hợp này, nhưng tên cũng có thể là 400T và 400R), cái đầu tiên và thứ ba khá xa nhau như chuỗi, nhưng là cùng một sản phẩm.

Rõ ràng, thuật toán khớp không thể chính xác 100%, mục tiêu của tôi là tự động khớp khoảng 80% tên với độ tin cậy cao.

Bất kỳ ý tưởng hoặc tài liệu tham khảo được nhiều đánh giá

Trả lời

0

Bạn có thể muốn tạo logic mà bỏ qua các chữ cái/số kết hợp của số mô hình (kể từ khi họ đang đêm luôn cực kỳ tương tự).

0

Spell checking thuật toán sẽ được lưu ý.

Mặc dù tôi không thể tìm thấy triển khai mẫu tốt, tôi tin rằng bạn có thể sửa đổi thuật toán kiểm tra chính tả cơ bản để đưa ra kết quả khả quan. tức là làm việc với các từ như một đơn vị thay vì một nhân vật.

Các bit và miếng còn lại trong ký ức của tôi:

  1. Strip ra tất cả các từ thông thường (a, an, the, mới). "Phổ biến" phụ thuộc vào ngữ cảnh là gì.
  2. Lấy chữ cái đầu tiên của mỗi từ và độ dài của từ đó và tạo từ khóa đó.
  3. Khi từ nghi ngờ xuất hiện, hãy tìm các từ có cùng một từ hoặc từ khóa tương tự.

Có thể không phải giải quyết trực tiếp vấn đề của bạn ... nhưng bạn nói bạn đang tìm ý tưởng, đúng không?

:-)

4

Tôi nghĩ rằng đây sẽ đun sôi xuống để phân biệt các từ khóa như Lenovo từ trấu như New.

Tôi sẽ chạy một số phân tích trên cơ sở dữ liệu tên để xác định các từ khóa. Bạn có thể sử dụng mã tương tự như mã được sử dụng để tạo ra một đám mây từ.

Sau đó, tôi sẽ tự sửa danh sách để xóa mọi thứ rõ ràng là chaff, như có thể Mới thực sự phổ biến nhưng không phải là khóa.

Sau đó, bạn sẽ có danh sách các từ khóa có thể được sử dụng để giúp xác định các điểm tương đồng. Bạn sẽ liên kết tên "thô" với các từ khóa của từ khóa và sử dụng các từ khóa đó khi so sánh hai hoặc nhiều tên thô cho các điểm tương đồng (theo nghĩa đen là phần trăm từ khóa được chia sẻ).

Không phải là một giải pháp hoàn hảo bởi bất kỳ căng, nhưng tôi không nghĩ rằng bạn đang mong đợi một?

0

Không có bất kỳ kinh nghiệm nào về loại sự cố này, nhưng tôi nghĩ rằng việc triển khai rất ngây thơ sẽ là mã thông báo cụm từ tìm kiếm và tìm kiếm các kết quả phù hợp chứa bất kỳ mã thông báo nào.

"Canon PowerShot A20 LÀ", ví dụ, tokenizes thành:

  • Canon
  • Powershot
  • A20

mà sẽ phù hợp với mỗi người trong số các mặt hàng khác bạn muốn hiển thị trong kết quả. Tất nhiên, chiến lược này có thể sẽ tạo ra rất nhiều kết quả trùng khớp sai.

Một chiến lược khác là lưu trữ "từ khóa" với từng mục, chẳng hạn như "máy ảnh", "canon", "máy ảnh kỹ thuật số" và tìm kiếm dựa trên các mục có từ khóa phù hợp. Ngoài ra, nếu bạn đã lưu trữ các thuộc tính khác như Maker, Brand, v.v., bạn có thể tìm kiếm trên từng thuộc tính này.

3

câu trả lời của edg là đúng hướng, tôi nghĩ - bạn cần phải phân biệt các từ khóa từ lông tơ.

Vấn đề ngữ cảnh. Để lấy ví dụ của bạn, Core 2 Duo là fluff khi nhìn vào hai trường hợp của một T400, nhưng không phải khi nhìn vào một gói OEM CPU.

Nếu bạn có thể đánh dấu trong cơ sở dữ liệu của mình phần nào của tên sản phẩm chính tắc quan trọng hơn và phải xuất hiện dưới dạng này hoặc dạng khác để xác định sản phẩm, bạn nên làm điều đó. Có lẽ thông qua việc sử dụng một số loại đánh dấu ngữ nghĩa? Bạn có thể đủ khả năng để có một con người đánh dấu cơ sở dữ liệu?

Bạn có thể cố gắng xác định các lớp tương đương cho những thứ như "T-400", "T400", "T 400" v.v. Có thể là một bộ quy tắc cho biết "số ràng buộc mạnh hơn chữ cái được gắn với số đó".

Chia nhỏ các trường hợp dựa trên nhà sản xuất, số kiểu, v.v. có thể là một cách tiếp cận tốt. Tôi khuyên bạn nên xem xét kỹ thuật để tìm kiếm cụm từ để thử và hoàn thành điều đó: http://www.worldcat.org/isbn/9780262100854

Thiết kế mọi thứ trong khung linh hoạt chủ yếu là quy tắc, nơi các quy tắc có thể được sửa đổi dựa trên nhu cầu của bạn và các mẫu mới nổi (đọc: những thứ phá vỡ thuật toán của bạn) cũng sẽ là một ý tưởng hay. Bằng cách này, bạn có thể cải thiện hiệu suất của hệ thống dựa trên dữ liệu thực tế.

0

Đó chính là vấn đề tôi đang làm trong thời gian rảnh rỗi của mình.Những gì tôi đã đưa ra là: dựa trên từ khóa thu hẹp phạm vi tìm kiếm:

trong trường hợp này bạn có thể có một số hệ thống phân cấp:

loại -> Công ty -> mô hình

để bạn muốn đối sánh "Máy ảnh kỹ thuật số" cho một loại

"Canon" cho công ty và ở đó bạn sẽ bị bỏ lại với phạm vi hẹp hơn để tìm kiếm.

Bạn có thể làm việc này sâu hơn nữa bằng cách giới thiệu dòng sản phẩm, vv Nhưng điểm chính là, điều này có thể phải được thực hiện lặp lại.

+0

Phương pháp này có phù hợp với bạn hay bạn đã đi theo một hướng khác? –

2

Bạn có thể sử dụng số trigram search cho việc này. Tôi phải thừa nhận tôi chưa bao giờ nhìn thấy thuật toán để thực hiện một chỉ mục, nhưng đã thấy nó hoạt động trong các ứng dụng dược phẩm, nơi nó đối phó rất tốt thực sự với tên ma túy sai lầm. Bạn có thể áp dụng cùng một loại logic cho vấn đề này.

4

Sự hiểu biết chính ở đây là bạn có chỉ số khoảng cách thích hợp. Đó là thực tế không phải là vấn đề của bạn cả. Vấn đề của bạn đang được phân loại.

Hãy để tôi cung cấp cho bạn một ví dụ. Giả sử bạn có 20 mục nhập cho Foo X1 và 20 cho Foo Y1. Bạn có thể giả định một cách an toàn chúng là hai nhóm. Mặt khác, nếu bạn có 39 mục nhập cho Thanh X1 và 1 cho Thanh Y1, bạn nên coi chúng là một nhóm duy nhất.

Bây giờ, khoảng cách X1 < -> Y1 giống nhau trong cả hai ví dụ, vậy tại sao có sự khác biệt trong phân loại? Đó là vì Bar Y1 là một ngoại lệ, trong khi Foo Y1 thì không.

Phần thú vị là bạn không thực sự cần phải làm rất nhiều công việc để xác định các nhóm này lên phía trước. Bạn chỉ cần thực hiện phân loại đệ quy. Bạn bắt đầu với nút trên mỗi nhóm, và sau đó thêm một nút siêu cho hai nút gần nhất. Trong siêu nút, lưu trữ giả định tốt nhất, kích thước của cây con của nó và biến thể trong nó. Vì nhiều chuỗi của bạn sẽ giống nhau, bạn sẽ sớm nhận được các subtrees lớn với các mục giống hệt nhau. Phép đệ quy kết thúc bằng siêu âm có chứa ở gốc cây.

Bây giờ, hãy ánh xạ tên chính tắc dựa vào cây này. Bạn sẽ nhanh chóng thấy rằng mỗi cái sẽ khớp với toàn bộ cây con. Bây giờ, hãy sử dụng khoảng cách giữa các cây này để chọn khoảng cách cắt cho mục nhập đó. Nếu bạn có cả hai sản phẩm Foo X1 và Foo Y1 trong cơ sở dữ liệu, khoảng cách cắt sẽ cần phải thấp hơn để phản ánh điều đó.

-1

Chúng tôi có thể sử dụng Datadecision service cho các sản phẩm phù hợp.

Nó sẽ cho phép bạn tự động khớp dữ liệu sản phẩm của mình bằng thuật toán thống kê. Hoạt động này được thực hiện sau khi xác định một ngưỡng điểm tin cậy.

Tất cả dữ liệu không thể được đối sánh tự động sẽ phải được xem xét thủ công thông qua giao diện người dùng chuyên dụng.

Dịch vụ trực tuyến sử dụng bảng tra cứu để lưu trữ các từ đồng nghĩa cũng như lịch sử kết hợp thủ công của bạn. Điều này cho phép bạn cải thiện việc khớp dữ liệu tự động hóa lần sau khi bạn nhập dữ liệu mới.

0

Đây là sự cố của record linkage. Các dedupe python library cung cấp một thực hiện đầy đủ, nhưng ngay cả khi bạn không sử dụng python, tài liệu có một good overview of how to approach this problem.

Tóm lại, trong mô hình tiêu chuẩn, nhiệm vụ này được chia thành ba giai đoạn

  1. Hãy so sánh các lĩnh vực, trong trường hợp này chỉ là cái tên. Bạn có thể sử dụng một hoặc nhiều bộ so sánh cho điều này, ví dụ khoảng cách chỉnh sửa giống như khoảng cách Levenshtein hoặc khoảng cách cosin so sánh số từ phổ biến.
  2. Biến mảng thành điểm khoảng cách thành xác suất mà một cặp bản ghi thực sự giống nhau
  3. Kết hợp các điểm xác suất cặp này thành các nhóm có thể tham chiếu cùng một điều.
Các vấn đề liên quan