2015-02-03 15 views
6

Tôi có một ứng dụng dựa trên Java và một bộ từ khóa trong cơ sở dữ liệu MySQL (trong tổng số khoảng 3 từ khóa, mỗi từ khóa có thể bao gồm nhiều từ, ví dụ: "memory", " ngôi nhà cũ "," luật Liên minh châu Âu ", v.v.).Tìm kiếm từ khóa trong Java

Người dùng tương tác với ứng dụng bằng cách tải lên tài liệu có văn bản tùy ý (một số trang hầu hết các lần). Điều tôi muốn làm là tìm kiếm liệu và trong tài liệu có bất kỳ từ khóa nào trong số 3 triệu từ khóa xuất hiện hay không.

Tôi đã thử sử dụng vòng lặp và tìm kiếm tài liệu cho từng từ khóa nhưng điều này không hiệu quả chút nào. Tôi tự hỏi nếu có một thư viện để thực hiện tìm kiếm theo cách hiệu quả hơn.

Tôi rất cảm kích mọi trợ giúp.

+0

Điều gì về băm cửa hàng cho mỗi từ khóa trong cột bên cạnh từ khóa và trong khi đọc tài liệu, hãy kiểm tra từng từ theo, ví dụ: 'chọn từ khóa từ khóa trong đó keyword_hash = calculateHash (wordToCheck) '? – rzysia

+0

Những gì bạn cần phải xem xét là những gì sẽ là con đường ngắn nhất. Thực hiện 3 triệu tìm kiếm hoặc xây dựng các cụm từ N từ tài liệu được tải lên. Một giải pháp có thể là xây dựng một tìm kiếm của tất cả các từ khóa 3M để tìm kiếm tài liệu. Sử dụng Công cụ đánh dấu từ khóa của Lucenes và đối sánh tất cả các từ được đánh dấu với từ khóa 3M;) –

+0

Có cách nào để nhận được nhiều kết quả từ khóa trong cùng một phần văn bản được trích xuất trong công cụ đánh dấu không? Hoặc thậm chí tốt hơn là có một cấu trúc có thể trả về danh sách các từ khóa phù hợp được tìm thấy trong tệp không? –

Trả lời

1

Bạn có thể thử sử dụng bộ lọc nở hoa http://en.wikipedia.org/wiki/Bloom_filter. Sau đó kiểm tra từng từ (s) chống lại bộ lọc nở để tìm ra các mặt tích cực. Hãy nhớ rằng có thể có dương tính giả. Do đó, nếu có tích cực từ bộ lọc nở thì bạn có thể thử truy vấn sql như 'chọn từ khóa từ từ khóa có từ khoá trong (dương từ bộ lọc hoa)' để xác định cụ thể từ khóa nào có trong tài liệu được tải lên.

Java triển khai bộ lọc nở có sẵn trong thư viện ổi. http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/hash/BloomFilter.html

5

dự án Apache Lucene có thể hữu ích.

Apache LuceneTM là thư viện công cụ tìm kiếm văn bản đầy đủ tính năng, hiệu suất cao được viết hoàn toàn bằng Java. Nó là một công nghệ phù hợp cho hầu như bất kỳ ứng dụng nào yêu cầu tìm kiếm toàn văn bản, đặc biệt là nền tảng chéo.

bạn có thể tìm thấy một số hướng dẫn hữu ích here

1

Bạn có thể sử dụng The Lemur Project cũng có sẵn tại sourceforge:

Dự án Lemur phát triển công cụ tìm kiếm, thanh công cụ trình duyệt, công cụ phân tích văn bản, và các nguồn lực dữ liệu hỗ trợ nghiên cứu và phát triển phần mềm thu thập thông tin và khai thác văn bản, bao gồm công cụ tìm kiếm Indri và tập dữ liệu ClueWeb09.

Và theo khuyến nghị của Taher, Apache Lucene là một công cụ tuyệt vời và tôi đã sử dụng cả hai công cụ này và chúng tuyệt vời.

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