sada
16.06.2012, 11:10:59
Witam!
Mam następujące pytanie:
Mając jakiś tekst $tx
wyrazy pożądane $p1,$p2,$p3
wyrazy niepożądane $n1,$n2,$n3
Czy jest możliwe utworzenie jednego wyrażenia regularnego, które zwróci true (1) gdy w tekście znajduje się chociaż jeden z wyrazów pożądanych i żaden z niepożądanych.
Nie mam problemu z pożądanymi, ale z niepożądnaymi krucho.
[^wyraz] taki zapis wyklucza poszczególne znaki, ale i tak w ramach "jednego miejsca na znak" w tekście
Ostatecznie zadowoliłbym się rozwiązaniem mini:
Mając jakiś tekst $tx
wyraz niepożądany $n1
zwracającym true (1) jeśli w tekście nie występuje wyraz niepożądany.
NIe chodzi mi o kompletne rozwiązanie, a tylko podanie ewentualnej konstrukcji pozwalającej na to.
Nie ważny też jest problem czy znaleziony wyraz jest wyrazem czy częścią innego wyrazu.
Pozdrawiam forumowiczów
melkorm
16.06.2012, 12:11:45
Tutaj regex nie jest totalnie potrzebny, tylko operacje na stringach i
strpos i wtedy sprawdzasz czy jest jakieś słowo pożądane i jakieś niepożądane.
sada
16.06.2012, 12:24:56
Potrafię to zrobić za pomocą strpos.
Szukam metody z regex by zastosować do wyszukiwania w bazie Mongo.
Nie chciałbym robić tego na raty tzn. wyszukiwać dokumenty zawierające słowa pożądane a potem z nich wykluczać np przez strpos zawierające niepożądane, chyba że będzie to jedyna droga.
melkorm
16.06.2012, 13:10:06
Szukanie pełno tekstowe w mongo to nieporozumienie bo musisz walić mnóstwo regexpów, moim zdaniem lepiej zrób tak jak sama specyfikacja mongo sugeruje, czyli dodać pole gdzie będzie tablica wszystkich słów, wtedy o wiele łatwiejsze i szybsze. Tutaj masz bardziej to wyjaśnione :
http://www.mongodb.org/display/DOCS/Full+T...Search+in+Mongo.
sada
16.06.2012, 14:04:54
Dzięki, czytałem ten artykuł wcześniej, ale nawet jak rozbiję każdy tekst na słowa i umieszczę w bazie jako index to szukając frazy np "mapa polski" , nie znajdzie bo będzie "mapa" i "polski" jako dwa wyrazy, natomiast gdy rozbiję frazę podczas szukania na dwa słowa, znajdzie nawet, te które nie występują razem, a to będzie błąd. Po prostu indeksowanie musiało by być zrobione inteligentnie tzn. dodatkowo dodając zlepki wyrazów .
melkorm
16.06.2012, 15:27:42
No to jeżeli chcesz prawdziwy FULL TEXT SEARCH to może lepiej użyć jakiegoś silnika do tego przeznaczonego ? np
Solr ?
Z wyrażeniami regularnymi jeżeli chodzi o te słowa to do pozytywnego to nie problem, a do przeciwieństwa to negative look ahead & look behind (google it).
sada
16.06.2012, 16:17:32
od nutcha i solra zacząłem. Chciałem to połączyć z hbase ale projekt nie jest jeszcze stabilny i padłem .
Solr zintegrowany z nutchem działa ,
..... teraz dopiero zobaczyłem , że jest klasa Solr w PHP .
Nie wiem jeszcze jak Solr zintegrować z Mongodb ale prawdopodobnie jest to możliwe .
...w takim razie pomógł - dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.