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ę.
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
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. –
Zobacz również http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –