Esercizio PHP?

JackIlPazzo

Utente Attivo
25 Lug 2014
69
0
6
Ciao a tutti, chi può darmi una mano a realizzare quest'esercizio:

scrivi una parola e controlla se la parola scritta è presente nel dizionario (precedentemente scaricato perciò in un file di testo) se non è presente deve stamparti un elenco di dieci parole che hanno in comune delle lettere con la parola scritta.

Grazie :)
 
ciao
per trovare se esiste è semplice ipotizzando che il file si chiami dizionario.txt
PHP:
<?php
$dizionario=array();
$dizionario=file(dizionario.txt);//legge il dizionario e lo mette in un array (non ho messo il percorso)
$parola="pinco";
if(in_array($parola, $dizionario)){
	echo "la parola $parola è nel dizionario <br />";
}else{
	//vedi sotto
}
?>
poi per vedere se ci sono simili devi dirmi cosa intendi per simili cioe altre parole che contengano la parola cercata o che ci sia ena corrispondenza di un certo numero di caratteri
es.
se cerci pinco devi trovare le parole del tipo
abspinco (contiene pinco)
bopincoba (contiene pinco)
pincolini (contiene pinco)
...
oppure
panco (4 caratteri in comune)
banco (3 caratteri in comune)
....
 
ciao
per trovare se esiste è semplice ipotizzando che il file si chiami dizionario.txt
PHP:
<?php
$dizionario=array();
$dizionario=file(dizionario.txt);//legge il dizionario e lo mette in un array (non ho messo il percorso)
$parola="pinco";
if(in_array($parola, $dizionario)){
	echo "la parola $parola è nel dizionario <br />";
}else{
	//vedi sotto
}
?>
poi per vedere se ci sono simili devi dirmi cosa intendi per simili cioe altre parole che contengano la parola cercata o che ci sia ena corrispondenza di un certo numero di caratteri
es.
se cerci pinco devi trovare le parole del tipo
abspinco (contiene pinco)
bopincoba (contiene pinco)
pincolini (contiene pinco)
...
oppure
panco (4 caratteri in comune)
banco (3 caratteri in comune)
....
Ciao, grazie per la risposta. Per le parole simili intendo quelle che hanno un numero minimo di lettere differenti, quindi che sono più simili alla parola cercata. Il tuo secondo esempio va bene.
 
ciao
però provalo perchè non l'ho testato e buttato giu di getto
PHP:
<?php
$dizionario=array();
$dizionario=file(dizionario.txt);//legge il dizionario e lo mette in un array (non ho messo il percorso)
$parola="pinco";
if(in_array($parola, $dizionario)){
    echo "la parola $parola è nel dizionario <br />";
}else{
	$sim=80;//grado di similitudine in % (cerca di valutare se di più o di meno)
	/*
	conviene operare con la percentuale perchè es se la parola cercata è
	scalo
	e nel dizionario c'è
	supercalifragilisticespiralidoso
	di certo non sono simili anche se alcuni caratteri in comune
	*/
	$conta=0;
	foreach($dizionario as $p){
		$comuni=similar_text($parola , $p);//conto i caratteri in comune
		$lunga=strlen($p);
		$similitudine=$comuni/$lunga*100;//calcolo la percentuale di similitudine
		if($similitudine >=$sim){
			$simile[]=$p;//inserisco in un array
			$conta++;//e incremento il contatore
		}
	}
	if($conta==0){
		echo "non sono state trovate parole simili a $parola con similitudine > $sim % <br />";
	}else{
		if($conta > 10){$conta =10;}//dato che ne devo trovare al massimo 10
			echo "trovate $conta parole simili a $parola, tra cui: <br />";
		for($k=0; $k <$conta; $k++){
			echo $simile[$k]."<br />";
		}
	}
}
?>
attento però che similar_text è casesensitive es. se pinco e Panco trova solo 3 caratteri p != P, se la vuoi rendere caseinsentive devi aggiungere
nel foreach le istruzioni
PHP:
<?php
//....
foreach($dizionario as $p){
		$parola=strtolower($parola);
		$p=strtolower($p);//rendendole entrambe in caratteri minuscoli
		$comuni=similar_text($parola , $p)
//...
?>
se non funziona dimmi quali errori riporta e/o perche non funziona
 
Ciao,

allora nessun errore di sintassi. Però mi dice sempre che non sono state trovate parole simili, com'è possibile?
 
ciao
mi sono accorto che leggendo si puo trascinare detro degli spazi che danno fastidio
aggiungi
PHP:
<?php
$dizionario=array();
$dizionario=file('dizionario.txt');//legge il dizionario e lo mette in un array (non ho messo il percorso)
$dizionario = array_map("trim", $dizionario);//toglie eventuali spazi
$parola="pinco";
//....
?>
fatto prima prova con dizionario.txt contenente
asdrubale
pinco
pallino
sofonisba

output:
la parola pinco è nel dizionario
modificato il dizionario in
asdrubale
pincaccio
pallino
sofonisba

output:
trovate 2 parole simili a pinco, tra cui
pincaccio
pallino
 
Funziona veramente molto bene. Ti ringrazio per l'aiuto che mi hai dato :)
Ti auguro una buona giornata.
 

Discussioni simili