Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 7.06.2012 Ostrzeżenie: (0%)
|
Witam
Mam problem z konstruowaniem wyrażenia regularnego które będzie szukać danego słowa.
Jakie zadanie ma skrypt ze zmiennej $tresc rozbijamy na wyrazy następnie w pętli for sprawdzamy czy dany wyraz znajduje się w pliku txt dane w pliku txt wyglądają tak: (zmienna $synonimy) {absolutyzm|monarchiaabsolutna|władzaabsolutna} {absolwent|wychowanek} {absorbent|pochłaniacz|substancjapochłaniająca} {absorber|aparatabsorpcyjny} {absorbować|asymilować|przyswajać|wchłaniać|frapować|pochłaniać|zajmować|zaprząt ać} {absorbując|asymilując|przyswajając|wchłaniając|frapując|pochłaniając|zajmując|z aprzątając} {absorbujący|chłonny|wchłaniający} {absorpcja|pochłanianie|wchłanianie} Problem polega na tym iż $wartosc = preg_match('/{.*'.$slowo.'.*}/', $synonimy, $out); sprawdza mi czy występuje dany znak lub ciąg na przykład szukamy litery "i" to jeśli w bazie będzie wyżej wyraz "interpretacja" to zostanie on zakwalifikowany. Druga sprawa jeśli skrypt znajdzie już dane słowo w bazie chce aby zamiast niego pojawiło się cały ciąg w klamrach na przykład {absorbujący|chłonny|wchłaniający} (ale to niby działa) Trzecia sprawa to coś co najbardziej mnie martwi obciążenie serwera podczas szukania słów baza w txt ma prawie 3MB jak rozwiązać ten problem ma ktoś jakiś pomysł za wszystkie sugestie będę bardzo wdzięczny bo morduje się już z tym 3 dni. Aha próbowałem także takiego wyrażenia regularnego $wartosc = preg_match('/\{.*[\{|\|]'.$slowo.'.*\}/', $synonimy, $out); lecz w tym przypadku znajduje mi tylko wyrazy które zaczynają się na daną literę lub ciąg liter a ja nadal chce konkretnie cały wyraz aby się zgadzał. Jeszcze raz bardzo proszę o pomoc z góry dzięki. Ten post edytował adamp359 27.11.2012, 09:31:17 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%)
|
Musisz dać zrzut bazy danych gdzieś aby sobie uzupełnić i przeprowadzić testy.
Aby było najwydajniej to warto by pokombinować z zaindexowaniem każdego wyrazu, można spróbować coś takiego - zwiększa to ilość wyrażeń wewnątrz tabeli, ale daje nam pewność szybszego działania. struktura bazy:
jak dostaniesz wynik w tablicy to dajesz: Można też wszystko zaindexować w pllu full text ale ja nie jestem jednak do końca przekonany do takiego rozwiązania, poza tym działać będzie tylko na silniku myisam, który jest wypierany przez innodb Jeśli interesuje cię full text search odsyłam do http://www.databasejournal.com/features/my...cle.php/1578331 Z drugiej strony mysql nie jest chyba tutaj najlepszym rozwiązaniem. Taką strukturę danych jak zaproponowałem można zaimplementować w bazach nosql jak, np. mongodb - myślę, że było by to najfajniejsze rozwiązanie (IMG:style_emoticons/default/smile.gif) Ten post edytował cudny 27.11.2012, 14:58:25 |
|
|
|
adamp359 Wyrażenia regularne problem 27.11.2012, 09:30:28
b4rt3kk Jeśli plik jest duży to siłą rzeczy jego wczytanie... 27.11.2012, 12:20:57
adamp359 Powiem tak testowałem wczoraj i na bazie danych le... 27.11.2012, 13:50:43
adamp359 Dzięki Cudny podsunąłeś mi pomysł zrobię relację m... 27.11.2012, 16:38:53
cudny Na indexach nie ma możliwości aby to nie hulało ja... 27.11.2012, 21:22:13 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 08:41 |