Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zamiana synonimów w tekscie
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

¦lęczę już nad tym dłuższy czas i jako¶ nie mogę tego przeskoczyć...:/ Mam tekst z synonimami w postaci {synonim1|synonim2|synonim3...} w jakim¶ tek¶cie. I teraz chciałbym znaleĽć w podanym tek¶cie dane synonimy i wybrać z niego jeden losowy. Napisałem do tej pory co¶ takiego:

  1. $tekst = "Lorem Ipsum is simply {synonim1|synonim2|synonim3|synonim4} printing (...) remaining essentially unchanged. It {txt1|txt2|txt3} was popularised (...) software like Aldus PageMaker {synonim1|synonim2|synonim3|synonim4} including versions of Lorem Ipsum.";
  2.  
  3. $tab = array ("synonim1", "synonim2", "synonim3", "synonim4");
  4.  
  5. $los = rand(0, count($tab)-1);
  6.  
  7. echo $wynik = preg_replace('/\{synonim1|synonim2|synonim3|synonim4\}/',"<b>". $tab[$los] ."</b>",$tekst);


Tylko w tym przypadku nie jest to to czego bym oczekiwał ponieważ każdy z synonimów jest zastępowany osobno i wychodz± jakie¶ dziwol±gi... Poza tym do każdej grupy synonimów musiałbym zrobić tablicę, losowanie z niej i wyrażenie więc przy 100 tekstach i ponad 1000 synonimów robi się tego dosyć sporo...:/

Próbowałem to wyrażenie nieco zgeneralizować na bardziej ogólne ale niestety wtedy zamienia mi wszystkie synonimy w tek¶cie na jeden losowy z podanej tablicy... Oczywi¶cie powodem tego jest taka konstrukcja jak± napisałem...:

  1. echo $wynik = preg_replace('/\{[a-zA-Z0-9\|]*}/',"<b>". $tab[$los] ."</b>",$tekst);


Więc wracaj±c do pierwszego przypadku. W sumie możnaby zrobić od biedy jak±¶ bazę danych z synonimami... Tylko jak konstrukcję z pierwszego zapytania zmusić do tego żeby zamiast takiego wyniku:

Lorem Ipsum is simply synonim3|synonim3|synonim3|synonim3 printing (...) remaining essentially unchanged. It {txt1|txt2|txt3} was popularised (...) software like Aldus PageMaker synonim3|synonim3|synonim3|synonim3 including versions of Lorem Ipsum.

Otrzymywać taki:

Lorem Ipsum is simply synonim3 printing (...) remaining essentially unchanged. It {txt1|txt2|txt3} was popularised (...) software like Aldus PageMaker synonim3 including versions of Lorem Ipsum.

Je¶li macie jaki¶ pomysł na to to proszę o jak±¶ podpowiedĽ. Z góry dzięki i pozdrawiam, Ł
bobo168
  1.  
  2. function wylosuj($do_podmiany)
  3. {
  4. $fraza=explode('|',$do_podmiany[1]);
  5. return $fraza[array_rand($fraza)];
  6. }
  7. function synonimuj($text)
  8. {
  9. return preg_replace_callback('/\{(.*?)\}/',wylosuj,$text);
  10. }
  11.  
  12.  
  13.  
  14. $text='tekst z {synonimami|wyrazami bliskoznacznymi|zamiennikami} do {wylosowania|zamiany}';
  15. echo synonimuj($text);
  16.  
lukash82
Witam ponownie,

Skrypt synonimów już działa ale kombinuję jeszcze z jedn± opcj±. Chodzi o to, żeby przed losowaniem wybrać z synonimów w tek¶cie dane słowo kluczowe i dopiero potem wylosować synonimy z pozostałych opcji:

  1. function wylosuj($do_podmiany){
  2. $fraza=explode('|',$do_podmiany[1]);
  3. return $fraza[array_rand($fraza)];
  4. }
  5. function synonimuj($text){
  6. return preg_replace_callback('/\{(.*?)\}/',wylosuj,$text);
  7. }
  8.  
  9. $text='Przykładowy tekst z {synonim1|synonim2|synonim3|synonim4} oraz słowami {kluczowe1|kluczowe2|kluczowe3} oraz innymi {synonim1|synonim2|synonim3|synonim4}.';
  10.  
  11. $szukaj = "kluczowe2";
  12.  
  13. $zmien = preg_replace('/'. $szukaj .'/', '<a href="#">'. $szukaj .'</a>', $text);
  14.  
  15. echo synonimuj($zmien);


Kombinuje już dzisiaj dłuższy czas i jako¶ to nie idzie...:/ Narazie wyszukuje dane słowo, robi z niego linka i potem korzystam z wcze¶niej podanych funkcji. Jednak tu losowaniu podlega również zestaw synonimów z danym słowem kluczowym. Można oczywi¶cie poklikać parę razy aż trafi na dane słowo ale to trochę bez sensu...

Dlatego tak my¶lę, że po zaznaczeniu danego słowa trzaba pozbyć się wokół niego pozostałych słów kluczowych razem z nawiasami klamrowymi i dopiero potem lecieć przez tekst funkcj± synonimuj. Problem w tym, że niebardzo wiem jak to ugryĽć...:/ Je¶li macie na to jaki¶ pomysł to proszę o jak±¶ podpowiedĽ... Pozdrawiam, Ł
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.