2011-01-14 10 views
5

Poszukuję wyszukiwarki tekstowej do nietradycyjnego wyszukiwania tekstowego i chcę uzyskać poradę, które narzędzie (Lucene, Sphinx, Xapian lub coś innego) jest najbardziej przydatne odpowiednie dla mnie plus wskazówki, od czego zacząć.dostosowywanie wyszukiwania tekstowego algorytmów porównywania wykresów/cząsteczek

Mam cząsteczki reprezentowane jako wykresy (atomy i więź). Mam drogę do enumerate all subgraphs o rozmiarze k. Jako techniczne, wejściami są SMILES, a wyjściem są kanoniczne SMARTS i liczba razy każdy subrafik/SMARTS.

Na przykład, jeśli cząsteczką wejściową jest "CCO", wówczas wyniki kanoniczne to {"C": 2, "O": 1, "CC": 1, "OC": 1, "CCO": 1 } a jeśli cząsteczka to "SCO" to wyniki kanoniczne to {"C": 1, "S": 1, "O": 1, "CS": 1, "OC": 1, "SCO": 1 }. To są małe przykłady. Dla prawdziwej cząsteczki otrzymałem około 500 "słów", które wyglądają jak "CC (C) O", "CCCOCC", "cn" i "cccc (c) O".

Przeglądanie cząsteczek jako kolekcji charakterystycznych ciągów plus liczenie oznacza, że ​​powinienem umieć korzystać z narzędzia do wyszukiwania tekstów w celu dokonywania porównań na poziomie tekstu z nadziejami, że będą one znaczące na poziomie chemii.

Dla przykładu, mogę użyć cosine similarity być może z wagą tf-idf i znaleźć podobne cząsteczki, szukając podobnych podtypów. W przypadku powyższych przykładów "CCO" i "SCO" podobieństwo cosinusów wynosi (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.

Dla innego przykładu, jeśli chcę znaleźć cząsteczki zawierające podstrukturę "CCS", mogę wykonać szybkie odwrócone wyszukiwanie indeksu oparte na zliczeniach (cząsteczki muszą mieć co najmniej 2 "C", co najmniej 1 "CS" itd.) Przed rozwiązaniem problemu izomorfizmu NP subgraph. Oznacza to, że metody oparte na tekście mogą działać jako filtr, aby odrzucić oczywiste niedopasowania.

Próbuję znaleźć rozwiązania tekstowe, które istnieją, ale są nieco zniechęcające. Nie potrzebuję słów przestankowych, nie potrzebuję słowotwórstwa, nie dbam o porządek słowny; Nie potrzebuję wielu funkcji, które istnieją. Potrzebuję możliwości utrzymywania wektorów słów, ponieważ ważne jest, aby wiedzieć, czy "C" pojawia się 2 razy lub 3.

Która wyszukiwarka jest dla mnie najbardziej odpowiednia? Wygląda jak Lucene, szczególnie z pracy w Mahout. Czy możesz polecić, które części dokumentacji obejrzeć lub odpowiednie tutoriale? Te, które znalazłem, są przeznaczone do przeszukiwania pełnotekstowego, z efektami i innymi funkcjami, których nie potrzebuję.

+0

Co oznacza dla ciebie "podobieństwo"? Na przykład. czy "C = C" powinno być "podobne" do "C-C"? jest "N +" podobne do "N"? Czy "cco" jest podobne do "c (c) o" itp? Być może, jeśli podasz kilka przykładowych wyszukiwań, a wyniki, które powinni znaleźć, pomogą nam dowiedzieć się więcej o tym, czego chcesz (skoro nie jesteśmy chemikami). – Xodarap

+0

Mam słowa W_i z liczbą powtórzeń n_i i i <~ 500. Chcę zrobić między nimi podobieństwo cosinusowe, zgodnie z definicją powiązaną. Myślę, że to, czego szukam, jest standardem w świecie wyszukiwania dokumentów, a chemia nie ma znaczenia, ale zaktualizuję przykład. –

+0

Zobacz również http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –

Odpowiedz

1

EDYCJA: Być może zrozumiałem to teraz lepiej. Chcesz porównać wykresy, reprezentowane jako ciągi. Struny mają "słowa", które mogą się powtarzać. Możesz używać Lucene, w takim przypadku proponuję użyć Solr. Zasadniczo każdy dokument Solr składa się z jednego pola; Pole zawiera ciąg znaków, który proponuję rozwinąć: napisz C C zamiast C:2. Jeśli użyjesz spacji do rozdzielenia słów, możesz użyć narzędzia WhiteSpaceAnalyzer. Jeśli używasz innego separatora, możesz potrzebować napisać niestandardowy analizator, co nie jest trudne.

Czy to dobry pomysł? Nie jestem pewien. Oto dlaczego:

  1. Lucene (i Solr) nie używać cosinus podobieństwa jako takie, lecz Lucene Similarity, który miesza cosinus TF/IDF i logiczną punktacji, z pewnymi szczególnymi modyfikacjami. Działa to dobrze w większości tekstowych przypadków użycia, ale może być inne niż to, czego potrzebujesz.
  2. Czy chcesz porównać wyniki z różnych wyszukiwań? Jeśli tak, to trudno jest użyć Solr, ponieważ znormalizuje każde wyszukiwanie do maksymalnej wartości 1.

Proponuję wypróbować Solr dla małej próbki twojej bazy danych. Jeśli Solr pracuje dla ciebie, w porządku. Jeśli nie, najprawdopodobniej jest to możliwe. Mining of Massive Datasets by Rajaraman and Ullman to ostatnia darmowa książka o tych tematach. Sugeruję, abyś to przeczytał. Obejmuje wyszukiwanie podobnych ciągów w górach danych. Sądzę, że wyróżnikiem jest: Czy potrzebujesz stosunkowo dużego skrzyżowania? Jeśli tak, użyj shinglinga i min-haszy. Jeśli nie, może wystarczy Solr.

+0

Dopasowywanie ciągów i wyrównanie sekwencji? Jak to? Moje "dokumenty" zawierają "słowa", które można powtórzyć. Biorąc pod uwagę dokument zapytania i docelowy zbiór dokumentów, chcę znaleźć 10 najbliższych w kolekcji na podstawie (powiedzmy) podobieństwa cosinusów. Algorytmy wyrównania oznaczają porządek, którego moje dane nie mają. Needleman-Wunsch, Aho-Corasick i inne algorytmy dopasowywania ciągów właśnie nie mają zastosowania, przynajmniej nie tak daleko, jak to możliwe. (BTW, trochę pracowałem w bioinformatyce, więc znam niektóre z miejsc, w których można je wykorzystać.) –

+0

Zmieniłem moją odpowiedź, aby lepiej zaadresować twoje dokumenty i słowa. –

+0

Zacząłem czytać tę książkę pewnego dnia i jest to bardzo pomocne. Spróbuję z Solr i zobaczę, co się stanie. Natknąłem się również na gensim pod adresem http://nlp.fi.muni.cz/projekty/gensim/index.html. –

1

Hmm ... nie bardzo wiem, czym są SMARTS lub jak działa podobieństwo chemiczne. Jeśli chcesz użyć lucenu, najpierw rozważ użycie solr. Ponieważ twoje dane są na wykresach, możesz spojrzeć na neo4j z komponentem solr. Ponadto, czy problem ten byłby bardziej związany z dokumentem w pobliżu duplikatów? Za pomoc w tym jest wiele algorytmów LSH, Spotsigs, shingling i simhash. Chciałbym być bardziej pomocny.

+0

Chcę sprawdzić, czy wyszukiwanie tekstu może zastąpić lub uprościć wyszukiwanie wykresów. Z 50 milionami cząsteczek to około 150 milionów atomów i tyle wiązań. Nie widzę, jak ogólny wykres db jak neo4j może zbliżyć się do możliwości specjalistycznych wyszukiwarek chemicznych. Ale wykonanie wyszukiwania podobieństwa kosinusów do 50 milionów dokumentów, z których każda zawiera najwyżej 1000 słów (wszystkie unikalne) powinno być łatwe. Szukam narzędzia do tego zadania. –

+1

Ok Widzę co masz na myśli, a Solr jest całkiem łatwy w użyciu. To kolejna warstwa na wierzchu lucenu. Czy wiesz, ile pól możesz mieć na chemikalia? Użyj tokenizera słów kluczowych, aby każde wejście do indeksowanego pola nie zostało tokenizowane, i po prostu nie filtruj procesu indeksowania za pomocą funkcji związanych lub innych specjalnych funkcji. Polecam, aby dostać książkę wydaną przez Packt. Myślę, że to chyba jedyna książka, z której można skorzystać w przypadku wykorzystania wyszukiwarki przez przedsiębiorstwa. – Joyce

+0

Każdy związek ma około 200-600 "słów" wybranych ze słownika około 200 000 słów. Dzięki za rekomendację książki! –

0

Nie używaj lucenu. Lub Solr. Modele wewnętrzne są przestarzałe i brukowane razem; chociaż wykonują dobrą robotę. Znajdź silnik z minimalnymi kryteriami (jeśli chcesz mapować wewnątrz silnika tekstowego) BM25F w pełni obsługiwany. Gdybym był po to i chciałem skalowalność i wydajność oraz niski koszt wsparcia społeczności, szczerze mówiąc I'd go z SQL Server i kostki. Licencjonowanie z SQL Server może być kompletnym blokerem. Powodzenia.

+0

Nie mam pojęcia, dlaczego BM25F byłby odpowiedni do tego, co robię. Dlaczego miałoby to być lepsze od podobieństwa cosinusów? Znajomy zaproponował Xapian, który ma wsparcie BM25, ale nie wydaje się być tak szeroko stosowany. Używam komputerów Mac i innych wariantów systemu UNIX, więc rozwiązanie przeznaczone wyłącznie dla systemu Windows nie będzie działać. –