Mój HomeMatic

Blog opisujący moją przygodę z HomeMatic

Gerwazy TTS – synonimy fraz

Synonimy w wypowiedziach Gerwazego dadzą złudzenie, że teksty nie są wypowiadane przez komputer. W swojej dawnej pracy zawodowej wykorzystywałem synonimy do różnicowania tekstów. Wtedy to właśnie wpadłem na pomysł by zamiast robić synonimy wyrazów zrobić „synonimy fraz” czy wręcz „synonimy zdań”. Dzięki takiemu rozwiązaniu teksty były jeszcze bardziej unikatowe. Niestety naśladowcy nie zrozumieli idei i pozostali w sferze synonimów wyrazów.

Zapis techniczny synonimów polega na objęciu ich klamrą „{}” i rozdzieleniu znakiem „ścianki” czyli „|”.


<?php
$text='{ fraza1 | fraza2 | fraza3}';

?>

Z takiego zapisu funkcja wylosuje jedną z trzech podanych fraz.

Bardziej skomplikowany zapis będzie wyglądał tak:


<?php
$text='Tekst tekst tekst { fraza1 | fraza2 | fraza3} tekst tekst { fraza4 | fraza5 | fraza6}'';

?>

W tym wypadku zostanie wybrana jedna z fraz oznaczona numerami 1-3 oraz jedna z fraz oznaczona numerami 4-6.

Do tego wszystkiego funkcja umie rozpoznawać „zagłębienia” synonimów np.


<?php
$text='{ fraza1 | fraza2 | { fraza4 | fraza5 | fraza6}}'';

?>

W powyższym zapisie najpierw zostanie wylosowana fraza 4-6 i wstawiona do „fraza3”, a następnie zostanie wylosowana fraza 1-3. Oczywiście ilość zagłębień może być większa.

Na sam koniec wypada przedstawić samą funkcję:


<?php

$wyp='{Jutro|Jutro rano|Rano} {wywożą|przyjeżdżają po|zabierają} {{segregowane|żółte} {śmieci|odpady}|żółty pojemnik na śmieci}.';

echo mieszaj($wyp);


function mieszaj($text=''){
   #odnajdź wszystkie najgłębsze wystąpienia {}
   if(preg_match_all("/{([^{}]*)}/", $text, $matches)){
      #wykonaj pętlę dla wszystkich wystąpień {}
      foreach($matches[1] AS $key=>$match){
         #zamień na tablicę synonimów
         $do_zamiany=explode('|',$match);
         #jeśli tablica ma więcej niż 1 element
         if(count($do_zamiany)>1){
            #losuj element
            $losuj=rand(0,count($do_zamiany)-1);
            #zastąp w oryginalnym tekście wylosowany element
            $text=str_replace($matches[0][$key],$do_zamiany[$losuj],$text);
         }
      }
      #po wylosowaniu wszystkich (najgłębszych) odnalezionych synonimów wykonaj kolejną iterację funkcji "mieszaj"
      $text=mieszaj($text);
   }
   return $text;
}

?>

Z powyższego wzoru zostały wygenerowane przykładowe teksty:

Jutro wywożą żółty pojemnik na śmieci.
Jutro zabierają segregowane odpady.
Jutro zabierają żółte odpady.
Jutro zabierają segregowane śmieci.
Jutro przyjeżdżają po żółty pojemnik na śmieci.
Rano zabierają żółty pojemnik na śmieci.
Jutro rano wywożą żółty pojemnik na śmieci.

Dla jasności – „żółty”  to u nas kolor pojemnika na segregowane odpady stąd przyjęło się u nas mówić potocznie „żółte śmieci”.

To nie wszystkie teksty, które mogą zostać wylosowane ale przykłady pokazują zamierzoną różnorodność wypowiedzi Gerwazego opisujących to samo wydarzenie.

Updated: 13 lutego 2019 — 20:19

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Mój HomeMatic © 2016 Frontier Theme