Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Zamiana synonimów w tekscie
lukash82
post
Post #1





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

Ostrzeżenie: (0%)
-----


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, Ł
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukash82
post
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

Ostrzeżenie: (0%)
-----


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, Ł

Ten post edytował lukash82 18.10.2010, 11:46:00
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 00:59