Visualizzazione risultati 1 fino 3 di 3
Like Tree2Likes
  • 2 Post By mzanella

Discussione: Aiuto per modificare testo con sinonimi

  1. #1
    Guest

    Post Aiuto per modificare testo con sinonimi

    Ciao a tutti, spero di ricevere un vostro aiuto.
    Vorrei creare uno script che mi permetta di cambiare le parole di una frase con sinonimi.
    Ho creato delle array ogni singola array è composta da tutti sinonimi.
    Le variabili con in seguenza ho dato un nome con il numero progressivo.. esempio.. var1 var2 var3 var4 ecc.. ecc..

    io ho pensato di usare un ciclo for per arrivare all'ultima variabile ecco l'esempio
    Codice PHP:
    <?php

    // Array con sinonimi
    $var1=array("abbacchiare","avvilire","deprimere");
    $var2=array("abbacinare","accecare","abbagliare","frastornare");
    $var3=array("abbagliare","affascinare","incantare","ingannare","illudere");
    $var4=array("abbaglio","sbaglio","svista");
    $var5=array("abbaiare","gridare","inveire");
    $var6=array("abbandonare","lasciare","rinunciare","desistere","ritirarsi","cedere");
    $var7=array("abbandonato","lasciato","deserto","rilasciato","incolto","disteso");
    $var8=array("abbandono","rinuncia","trascuratezza","rifiuto");
    $var9=array("abbarbagliare","abbagliare","confondere","frastornare");
    $var10=array("abbarbicare","attaccare","fissare","avvinghiare","radicare");

    // testo da modificare
    $testo="Non ti avvilire, e non ti far abbagliare, non ti incatenare per una svista, gridare serve per lasciare andare via la rabbia come nel deserto e rinuncia, non ti confondere, rimani a fissare </br>";

    // nuovo testo modificato
    $nuovo_testo="";

    // funzione
    function cambio_parole(){
    // ciclo for
    for ($i = 1; $i <= 10; $i++) {
    // variabile che concatena $ e var per avere $var
    $v="$"."var";
    // conta quanti array ci sono all'interno
    $contaArray=count($v.$i);
    // genera un numero casuale compreso tra 0 e il numero di array prensente meno 1
    $numerocasuale=rand(0,$contaArray-1);


    // cambia la parola trova in una casuale all'interno dell array
    str_replace($v.$i, $v.$i.$numerocasuale, $testo);




    };

    // stampa tutto il testo modificato
    echo $testo;

    };

    // avvio funzione
    cambio_parole();

    ?>
    ho cercaro di concatenare le variabili in modo da avere var.$numeroprogressivo... ma non funziona
    dove sbaglio?? o come posso fare per arrivare a modificare tutto il testo singola parola trovata? e avere un nuovo testo con i sinonimi? grazie a tutti per l'aiuto

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Gli errori più grossi sono nella funzione cambio_parole. Innanzitutto non accetta parametri: come fa a modificare una stringa e capire quali sinonimi usare se non glieli passi? Potresti riferirti allo stato globale usando global, ma non avrebbe senso definire una funzione in questo modo.

    str_replace non lavora in place, ovvero non modifica la stringa che le passi, bensì ne crea una nuova: quando la chiami devi assegnare il risultato alla variabile $testo.

    $v.$i.$numerocasuale viene valutato come $var53, mentre tu vorresti piuttosto $var5[3].

    Creare un insieme di variabili come hai fatto rende il tutto più complesso. È più semplice ed efficace utilizzare un vettore (che contiene a sua volta i vettori che già hai), in questo modo:
    Codice PHP:
    <?php
    // Replaces words with randomly chosen synonyms
    function replace_words($string, $synonyms) {
    foreach (
    $synonyms as $synonym_list) {
    foreach (
    $synonym_list as $word) {
    $random_key = array_rand($synonym_list, 1);
    $synonym = $synonym_list[$random_key];
    $string = str_replace($word, $synonym, $string);
    }
    }

    return
    $string;
    }


    // Synonyms
    $synonyms = array(
    array(
    "abbacchiare","avvilire","deprimere"),
    array(
    "abbacinare","accecare","abbagliare","frastornare"),
    array(
    "abbagliare","affascinare","incantare","ingannare","illudere"),
    array(
    "abbaglio","sbaglio","svista"),
    array(
    "abbaiare","gridare","inveire"),
    array(
    "abbandonare","lasciare","rinunciare","desistere","ritirarsi","cedere"),
    array(
    "abbandonato","lasciato","deserto","rilasciato","incolto","disteso"),
    array(
    "abbandono","rinuncia","trascuratezza","rifiuto"),
    array(
    "abbarbagliare","abbagliare","confondere","frastornare"),
    array(
    "abbarbicare","attaccare","fissare","avvinghiare","radicare")
    );

    // String to modify
    $string = "Non ti avvilire, e non ti far abbagliare, non ti incatenare per una svista, gridare serve per lasciare andare via la rabbia come nel deserto e rinuncia, non ti confondere, rimani a fissare";

    echo
    "Testo originale:\n" . $string . "\n\n";
    echo
    "Testo modificato:\n" . replace_words($string, $synonyms) . "\n";
    trendallworld and alemoppo like this.

    I suggerimenti che do più spesso:


  3. #3
    Guest

    Predefinito

    grazie milleeeeee

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •