2013-04-05 25 views
7

VẤN ĐỀ:Matching tập tin gần nhất trong trao chữ ASCII tập tin

Tôi có khoảng 20 tập tin văn bản ASCII, từng có một kích thước nhỏ hơn 10^9 Bytes .Another tập tin văn bản ASCII (nói FOO) được đưa ra . Chương trình là chiến lược phù hợp với nội dung của FOO với 20 tệp nhất định và in tên tệp kết hợp CLOSEST. Nội dung của FOO chỉ có thể khớp một phần.

Kể từ kích thước tập tin là quá lớn, tôi tự hỏi:

1.How để sử dụng Thông tin Retrieval (kể từ khi tôi không biết nhiều về IR)

cấu trúc dữ liệu

2.which tôi nên sử dụng để lưu trữ thông tin đó

3. Thuật toán tốt nhất để thực hiện nó là gì.

Tôi biết tôi đang yêu cầu quá nhiều, Nhưng thực sự tôi đang bị mắc kẹt ở vấn đề này và không thể tìm ra cách tiếp cận. Bất kỳ trợ giúp nào sẽ được đánh giá cao.Cảm ơn!

+0

thế nào về quét tất cả các file và tạo ra một vector chiều của từ cho mỗi tập tin văn bản, sau đó bạn có thể tính toán góc giữa documets và chọn gần nhất? –

+0

Cách đơn giản hơn là sử dụng chỉ mục Jaccard http://en.wikipedia.org/wiki/Jaccard_index, mặc dù nó có thể không cung cấp độ chính xác giống như độ tương tự cosin. Lưu ý rằng kỹ thuật này hoạt động trên số lượng từ được chuẩn hóa. – decden

+9

Bạn thực sự cần phải xác định "gần nhất". Nếu tệp kiểm tra khớp với tất cả các từ trong tệp # 1, nhưng với các từ theo thứ tự ngược lại (tức là "con cáo màu đỏ nhanh" và "con cáo màu đỏ nhanh"), nó có "gần hơn" không nếu nó khớp với tệp # 2 chính xác để 30% đầu tiên, nhưng sau đó có rất ít điểm tương đồng sau đó? Trường hợp có ý nghĩa không? Không gian trắng?Nếu không có một định nghĩa "gần nhất", bạn sẽ có một thời gian khó khăn quyết định những gì để so sánh. –

Trả lời

0

Vì vậy, tôi giả sử một tệp chứa một số văn bản. Vì vậy, chúng ta có thể nói mỗi một tập tin là một chuỗi lớn. Bây giờ tạo 20 vectơ hoặc mảng. Đi qua tệp và đặt từng từ làm phần tử trong vectơ. Bây giờ tạo một vectơ với kích thước 20 để lưu trữ kết hợp của mỗi tệp Bây giờ, hãy tạo một vectơ từ cho tệp đã cho. Bây giờ tạo ra một vòng lặp để chạy qua các vectơ này nếu tại bất kỳ chỉ mục cụ thể nào, bạn đã tìm thấy một kết quả phù hợp với bất kỳ trong số 20 vectơ này và các vectơ đã cho của bạn. Tăng giá trị cho tệp tương ứng trong vectơ lưu trữ phù hợp. Cuối cùng, giá trị cao nhất trong vector lưu trữ phù hợp sẽ cho biết tệp có kết quả phù hợp nhất.

0

Giải pháp của Vampire Coder giả định rằng các tài liệu là túi từ, có nghĩa là thứ tự các từ không quan trọng. Nhưng bằng cách "đối sánh một phần", bạn có nghĩa là một số câu phù hợp, sau đó điều đó sẽ không làm tốt.

Bạn có thể chia từng tài liệu thành các tập hợp con chồng chéo và lấy giá trị băm của từng tập hợp con. Sau đó, bạn chuyển tài liệu của mình thành một bộ băm. Sau đó, bạn có thể so sánh các băm. Đây là một cách bạn có thể làm những gì bạn muốn làm.

Đối với mỗi tài liệu, khi bạn đã thu hẹp các kết quả phù hợp tiềm năng, bạn có thể tăng độ phân giải mà tại đó bạn chia tài liệu của mình. Giả sử ban đầu bạn chia chúng thành hai, bây giờ bạn có thể chia chúng thành 10. Điều này là để giảm thiểu thời gian chạy.

Ngoài ra, bạn nên sử dụng trên địa bàn thuật toán băm nhạy cảm như: http://en.wikipedia.org/wiki/Nilsimsa_Hash

Các vấn đề liên quan