2011-01-14 29 views
5

Tôi đang tìm kiếm một công cụ tìm kiếm văn bản cho loại tìm kiếm văn bản phi truyền thống và tôi muốn được tư vấn về công cụ nào (Lucene, Sphinx, Xapian, hay cái gì khác) phù hợp với tôi, cộng với các gợi ý về nơi bắt đầu.thích ứng với tìm kiếm văn bản cho các thuật toán so sánh đồ thị/phân tử

Tôi có các phân tử được biểu diễn dưới dạng đồ thị (nguyên tử và liên kết). Tôi có cách để enumerate all subgraphs có kích thước tối đa k. Là kỹ thuật, đầu vào là SMILES và đầu ra là SMARTS chuẩn và số lần mỗi biểu đồ con/SMARTS xảy ra. Ví dụ: nếu phân tử đầu vào là "CCO" thì kết quả chuẩn là {"C": 2, "O": 1, "CC": 1, "OC": 1, "CCO": 1 } và nếu phân tử là "SCO" thì kết quả chuẩn là {"C": 1, "S": 1, "O": 1, "CS": 1, "OC": 1, "SCO": 1 }. Đây là những ví dụ nhỏ. Đối với phân tử thực tôi có khoảng 500 từ "", trông giống như "CC (C) O", "CCCOCC", "cn" và "cccc (c) O".

Nhìn vào phân tử như một tập hợp các chuỗi đặc trưng cộng với số đếm có nghĩa là tôi có thể sử dụng công cụ tìm kiếm văn bản để so sánh ở cấp độ văn bản, với hy vọng rằng chúng có ý nghĩa ở cấp độ hóa học.

Ví dụ, tôi có thể sử dụng cosine similarity có lẽ với trọng lượng tf-idf và tìm các phân tử tương tự bằng cách tìm các mẫu con tương tự. Với ví dụ "CCO" và "SCO" ở trên, độ tương tự cosin là (2 * 1 + 1 * 1 + 1 * 1)/sqrt (2 * 2 + 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1)/sqrt (6 * (1 * 1)) = 4/sqrt (8 * 6) = 0,58. Ví dụ khác, nếu tôi muốn tìm các phân tử chứa cấu trúc con "CCS" thì tôi có thể thực hiện tìm kiếm chỉ số đảo ngược nhanh dựa trên số lượng (các phân tử phải có ít nhất 2 "C", ít nhất là 1). "CS", v.v.) trước khi giải quyết vấn đề đẳng cấu đồ thị NP. Nghĩa là, các phương thức dựa trên văn bản có thể hoạt động như một bộ lọc để loại bỏ các sự không phù hợp rõ ràng.

Tôi đang cố gắng tìm ra các giải pháp văn bản tồn tại nhưng có một chút khó khăn. Tôi không cần phải dừng lời, tôi không cần phải bắt đầu, tôi không quan tâm đến thứ tự từ ngữ; Tôi không cần một số tính năng tồn tại. Tôi cần khả năng giữ vectơ từ, vì điều quan trọng là phải biết liệu "C" có xuất hiện 2 lần hay không 3.

Công cụ tìm kiếm văn bản nào phù hợp nhất với tôi? Có vẻ như Lucene, đặc biệt là với công việc ở Mahout. Bạn có thể đề xuất phần nào của tài liệu hướng dẫn hoặc các hướng dẫn có liên quan không? Những cái mà tôi đã tìm thấy có nghĩa là tìm kiếm toàn văn bản, với gốc và các tính năng khác mà tôi không cần.

+0

"Sự giống nhau" có ý nghĩa gì đối với bạn? Ví dụ. nên "C = C" là "tương tự" thành "C-C"? là "N +" tương tự như "N"? "Cco" có tương tự như "c (c) o" không? Có lẽ nếu bạn đưa ra một vài ví dụ tìm kiếm và kết quả họ sẽ tìm thấy nó sẽ giúp chúng tôi biết thêm về những gì bạn muốn (vì chúng tôi không phải là nhà hóa học). – Xodarap

+0

Tôi có từ W_i với số lần lặp lại n_i và i <~ 500. Tôi muốn làm tương tự cosine giữa chúng, theo định nghĩa liên kết. Tôi nghĩ rằng những gì tôi đang tìm kiếm là tiêu chuẩn trong thế giới tìm kiếm tài liệu và hóa học không quan trọng, nhưng tôi sẽ cập nhật với một ví dụ. –

+0

Xem thêm http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –

Trả lời

1

EDIT: Tôi có thể đã hiểu điều này tốt hơn bây giờ. Bạn muốn so sánh các biểu đồ, được biểu diễn dưới dạng chuỗi. Các chuỗi có "từ" có thể lặp lại. Bạn có thể sử dụng Lucene, trong trường hợp này tôi đề nghị sử dụng Solr lần thứ hai. Về cơ bản, mỗi tài liệu Solr sẽ bao gồm một trường đơn; Trường này sẽ chứa chuỗi mà tôi đề nghị bạn hủy đăng ký: viết C C thay vì C:2. Nếu bạn sử dụng một khoảng trống để tách các từ, bạn có thể sử dụng một WhiteSpaceAnalyzer. Nếu bạn sử dụng một dấu tách khác, bạn có thể cần phải viết một trình phân tích tùy chỉnh, mà không phải là quá khó làm.

Đây có phải là một ý tưởng hay không? Tôi không chắc. Dưới đây là lý do:

  1. Lucene (và Solr) không sử dụng sự tương đồng cosin như vậy, nhưng thay vì Lucene Similarity này phối hợp cosin, TF/IDF và boolean ghi bàn, với một số thay đổi cụ thể. Điều này hoạt động tốt cho hầu hết các trường hợp sử dụng văn bản, nhưng có thể khác với những gì bạn cần.
  2. Bạn có cần so sánh số lần truy cập từ các tìm kiếm khác nhau không? Nếu bạn làm như vậy, rất khó để sử dụng Solr, vì nó đã chuẩn hóa mọi tìm kiếm thành giá trị tối đa là 1.

Tôi đề nghị bạn thử Solr cho một mẫu nhỏ cơ sở dữ liệu của bạn. Nếu Solr làm việc cho bạn, tốt. Nếu không, việc nạo vét và băm nhỏ có lẽ là cách để đi. Mining of Massive Datasets by Rajaraman and Ullman là một cuốn sách miễn phí gần đây về các chủ đề này. Tôi đề nghị bạn đọc nó. Nó bao gồm tìm kiếm các chuỗi tương tự ở các vùng dữ liệu. Tôi đoán sự khác biệt là: Bạn có cần một giao lộ tương đối lớn không? Nếu vậy, sử dụng shingling và min-băm. Nếu không, có lẽ Solr là đủ.

+0

Đối sánh chuỗi và căn chỉnh chuỗi? Làm thế nào? "Tài liệu" của tôi chứa "từ", được lặp lại. Với một tài liệu truy vấn và một bộ sưu tập tài liệu đích, tôi muốn tìm 10 bộ sưu tập gần nhất trong bộ sưu tập dựa trên sự tương tự cosin (nói). Thuật toán căn chỉnh ngụ ý thứ tự, dữ liệu của tôi không có. Needleman – Wunsch, Aho – Corasick và các thuật toán kết hợp chuỗi khác không thể áp dụng, ít nhất là không xa như tôi có thể nói. (BTW, tôi đã làm việc trong tin sinh học một chút, vì vậy tôi biết một số nơi khi họ có thể được sử dụng.) –

+0

Tôi đã chỉnh sửa câu trả lời của tôi để giải quyết tốt hơn các tài liệu và lời nói của bạn. –

+0

Tôi bắt đầu đọc cuốn sách đó vào một ngày khác và nó rất hữu ích. Tôi sẽ thử với Solr và xem điều gì xảy ra. Tôi cũng đã gặp gensim tại http://nlp.fi.muni.cz/projekty/gensim/index.html. –

1

Hmm ... không thực sự biết SMARTS là gì, hoặc sự giống nhau hóa học thực sự hoạt động như thế nào. Nếu bạn muốn sử dụng lucene, đầu tiên xem xét sử dụng solr. Vì dữ liệu của bạn nằm trong biểu đồ, bạn có thể xem neo4j với thành phần solr. Ngoài ra, vấn đề này có liên quan chặt chẽ hơn với tài liệu gần trùng lặp không? Để được trợ giúp, có một số thuật toán LSH, Spotsigs, shingling và simhash. Ước gì tôi có thể giúp đỡ nhiều hơn.

+0

Tôi muốn xem liệu tìm kiếm văn bản có thể thay thế hoặc đơn giản hóa tìm kiếm đồ thị hay không. Với 50 triệu phân tử có khoảng 150 triệu nguyên tử và nhiều liên kết. Tôi không thấy làm thế nào một db đồ thị chung chung như neo4j có thể tiếp cận các khả năng của các công cụ tìm kiếm hóa học chuyên ngành. Nhưng làm một tìm kiếm tương tự cosine của 50 triệu tài liệu mỗi chứa tối đa 1.000 từ (tất cả duy nhất) nên được dễ dàng. Tôi đang tìm một công cụ cho nhiệm vụ đó. –

+1

Ok, tôi hiểu ý của bạn, Solr khá dễ sử dụng. Nó là một lớp khác trên đỉnh của lucene. Bạn có biết bao nhiêu lĩnh vực bạn có thể có cho mỗi hóa chất? Sử dụng Trình mã thông báo từ khóa để mỗi đầu vào vào một trường được lập chỉ mục không nhận được mã thông báo và chỉ không lọc quá trình lập chỉ mục với tính năng bắt đầu hoặc các tính năng đặc biệt khác. Tôi khuyên bạn nên lấy sách do Packt xuất bản. Tôi nghĩ rằng đó có lẽ là cuốn sách duy nhất về sử dụng doanh nghiệp của công cụ tìm kiếm. – Joyce

+0

Mỗi hợp chất có khoảng 200-600 từ "" được chọn từ một từ vựng khoảng 200.000 từ. Cảm ơn vì giới thiệu quyển sách! –

0

Không sử dụng lucene. Hoặc Solr. Các mô hình nội bộ được cổ và được rải sỏi lại với nhau; mặc dù họ làm tốt công việc. Tìm một động cơ với các tiêu chí tối thiểu (nếu bạn muốn ánh xạ bên trong một công cụ văn bản), BM25F hỗ trợ đầy đủ. Nếu tôi đã theo dõi nó và tôi muốn khả năng mở rộng và hiệu suất và cộng đồng hỗ trợ chi phí thấp, thẳng thắn tôi muốn đi với SQL Server và cubes.Licensing với SQL Server có thể là một trình chặn hoàn chỉnh. Chúc may mắn.

+0

Tôi không biết tại sao BM25F lại phù hợp với những gì tôi đang làm. Tại sao nó sẽ tốt hơn so với sự giống nhau về cosin? Một người bạn đã đề xuất Xapian, có hỗ trợ BM25, nhưng nó dường như không được sử dụng rộng rãi. Tôi sử dụng Mac và các biến thể Unix khác nên giải pháp chỉ dành cho Windows sẽ không hoạt động. –

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