Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: cris0710 en 03 de Marzo 2021, 20:23

Título: Java programa análisis leer texto comparar palabras con diccionario número coinc
Publicado por: cris0710 en 03 de Marzo 2021, 20:23
Hola, estoy tratando de resolver este ejercicio, agradecería ayuda.

Ejercicio

Desarrollar un programa que lea un texto, que pueden ser varias líneas y a continuación:

Comparar las palabras de ese texto contra las palabras de una lista llamada Diccionario.
Indicar el número de coincidencias.
Volver a mostrar el texto resaltando de alguna forma las palabras coincidentes.

Esto es lo que llevo hecho en C pero no me entra al ultimo if y no sé si el diccionario me reciba las palabras como una lista o como una sola cadena, agradecería mucho si me pudieran apoyar.

Código: [Seleccionar]
#include<conio.h>
#include<iostream>
#include <string.h>
using namespace std;

int main(){
    char palabra[50];
    char *tokenPtr;
    char cont=' ';
std::string strtoken;
    char diccionario[50]={"hola vallarta mexico"};
    int x,a,tam,i;
    x=1;
   
   
    cout<<"ingrese cadena "<<endl;
    cin.getline(palabra,50);
   
    tam=strlen(palabra);
   
    for(i=0;i<tam;i++){
   
        if(palabra[i]==' ' ){
            x++;
           
        }
    }
   
    cout<< "Estan escritas "<<x<<" palabras "<<endl;
    cout<<"La frase introducida es: "<<endl;
  tokenPtr = strtok ( palabra, " ");
while ( tokenPtr != NULL )
{
cout<<"La palabra es: " <<tokenPtr <<endl;
tokenPtr = strtok( NULL, " " );
strtoken = tokenPtr;
}
 
if(diccionario==palabra){
cont++;
}
cout<<"Palabras que coinciden con el diccionario "<<cont<<endl;

return 0;
}

Título: Re: Analisis lexico
Publicado por: cris0710 en 03 de Marzo 2021, 23:00
O si consideran que sería más fácil hacerlo en Java no hay problema
Título: Re: Analisis lexico
Publicado por: Kabuto en 04 de Marzo 2021, 01:07
Mmmhh, en Java si se me ocurren formas sencillas de hacerlo.
Pero claro, Java incorpora librerías y clases que bien usadas, te hacen la vida muy fácil.

Por ejemplo, la clase Scanner que normalmente usamos para leer por teclado, se le puede pasar un String y pedir que nos vaya dando palabras de una en una para ir comprobando si se encuentra en el diccionario.
El diccionario, si lo hacemos con un String, esta clase nos da el método contains() para con toda sencillez averiguar si la palabra existe en el diccionario.

Para resaltar las palabras coincidentes, mientras se comprueba si las palabras existen en el diccionario, se puede ir construyendo una copia del texto original en otro String, o mejor aún, en un StringBuilder.
Si se encuentra una palabra en el diccionario, la pasamos a la copia metiéndola entre corchetes por ejemplo.
Y si no se encuentra, la pasamos a la copia tal cual, sin resaltar nada.

Código: [Seleccionar]
public class Palabras {

public static void main(String[] args) {

String texto = "Este es un texto para probar un programa escrito en Java";
String diccionario = "texto programa Java";

Scanner sc = new Scanner(texto);
int contador = 0;
StringBuilder textoResaltado = new StringBuilder();

while (sc.hasNext()) {
String palabra = sc.next();
if (diccionario.contains(palabra)) {
textoResaltado.append(String.format("[%s] ", palabra));
contador++;
}
else
textoResaltado.append(String.format("%s ", palabra));
}
sc.close();

System.out.println("Texto original:\n" + texto);
System.out.println("\nDiccionario: " + diccionario);
System.out.println("\nCoincidencias: " + contador);
System.out.println("Texto con coincidendias resaltadas:\n" + textoResaltado.toString());
}

}

En pantalla, tendríamos este resultado:
Citar
Texto original:
Este es un texto para probar un programa escrito en Java

Diccionario: texto programa Java

Coincidencias: 3
Texto con coincidendias resaltadas:
Este es un [texto] para probar un [programa] escrito en [Java]
Título: Re: Analisis lexico
Publicado por: cris0710 en 05 de Marzo 2021, 18:21
Le hice algunas pequeñas modificaciones para adaptarlo un poco a poder introducir por pantalla.

Código: [Seleccionar]
import java.sql.*;//impota todas las librerias de mysql
import java.util.*;// importa todas las librerias de utilidad para leer en teclado
public class Palabras {

 public static void main(String[] args) {

     Scanner scn = new Scanner(System.in);
  String texto = " ";
  System.out.println("Ingresa la cadena de texto que deseas revisar");
  texto = scn.nextLine();
  Scanner sc = new Scanner(texto);
  String diccionario = "hola canada mexico";
  int contador = 0;
 


  StringBuilder textoResaltado = new StringBuilder();
 

  while (sc.hasNext()) {
   String palabra = sc.next();
   if (diccionario.contains(palabra)) {
    textoResaltado.append(String.format("[%s] ", palabra));
    contador++;
   }
   else
    textoResaltado.append(String.format("%s ", palabra));
  }
  sc.close();
 
  System.out.println("Texto original:\n" + texto);
  System.out.println("\nDiccionario: " + diccionario);
  System.out.println("\nCoincidencias: " + contador);
  System.out.println("Texto con coincidendias resaltadas:\n" + textoResaltado.toString());
 }

}