elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Matches para palabras o silabas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Matches para palabras o silabas  (Leído 2,940 veces)
SrTrp


Desconectado Desconectado

Mensajes: 323


Script/C#


Ver Perfil
Matches para palabras o silabas
« en: 10 Febrero 2019, 02:13 am »

Bueno quiero usar matches para saber cuando hay silabas o palabras en una cadena
Código
  1. String condicion= ".*[si]+[so].*";
  2.        Pattern pattern = Pattern.compile(condicion);
  3.        Matcher matcher = pattern.matcher(cadena);
  4.         System.out.println(matcher.matches());
  5.  
pero no se como implementart las expresiones para por ejemplo una cadena siso me devuelva true pero si es una cadena sis me devuelva false


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Matches para palabras o silabas
« Respuesta #1 en: 10 Febrero 2019, 02:35 am »

pero no se como implementart las expresiones para por ejemplo una cadena siso me devuelva true pero si es una cadena sis me devuelva false

Esa parte que siso te de true y sis false? quieres decir?

Hay tienes para empezar la clase Pattern en su docu ayuda mas

Código
  1. private void silabas() {
  2.        final String silabas = "aeiouy";
  3.        final Pattern pattern = Pattern.compile("[aeiyou]+");
  4.        final Matcher matcher = pattern.matcher(silabas);
  5.        System.out.println(matcher.matches());
  6. }
  7.  
  8. private void palabras() {
  9.        final String sis = "sis";
  10.        final String siso = "siso";
  11.        final Pattern pattern = Pattern.compile("[a-zA-Z]+");// falta quitar espacios puntos y comas, con replaceAll("^[.,\\s]+"), voy a dormir XD
  12.        final Matcher matcher = pattern.matcher(sis);
  13.        System.out.println(matcher.matches());  // true con ambos String
  14. }


« Última modificación: 10 Febrero 2019, 03:11 am por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
SrTrp


Desconectado Desconectado

Mensajes: 323


Script/C#


Ver Perfil
Re: Matches para palabras o silabas
« Respuesta #2 en: 10 Febrero 2019, 05:42 am »

lo que me refiero con siso que detecta que tiene silabas correctas y que debe dar true por ejemplo si ingreso estas cadenas debe dar true "siso" "como si", y  debe dar false por ejemplo "sis", "metete al sistema"..
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Matches para palabras o silabas
« Respuesta #3 en: 10 Febrero 2019, 12:19 pm »

lo que me refiero con siso que detecta que tiene silabas correctas y que debe dar true por ejemplo si ingreso estas cadenas debe dar true "siso" "como si", y  debe dar false por ejemplo "sis", "metete al sistema"..

Entonces según entiendo, si la palabra tiene, o contiene sis, dar false(la i es una silaba también XD, mala descripción tuya, o sea, tu no te estas refiriendo si tiene varias silabas, o una silaba), ahí va, sino tocara reimplementar tu descripción

Código
  1. private void negarSis() {
  2.    final String palabra = "siso"; // debe dar true
  3.    final String palabra2 = "como si"; // debe dar true
  4.    final String meteteAlsistema = "metete al SIStema"; // solo "sis" false
  5.    final Pattern pattern = Pattern.compile("^(?i)(?!.*?sis).*");//flag ignore case (?i) metete al SIStema, o metete al sistema, resultado false
  6.    final Matcher matcher = pattern.matcher(meteteAlsistema);
  7.    System.out.println(matcher.matches());
  8. }
« Última modificación: 10 Febrero 2019, 12:39 pm por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
SrTrp


Desconectado Desconectado

Mensajes: 323


Script/C#


Ver Perfil
Re: Matches para palabras o silabas
« Respuesta #4 en: 10 Febrero 2019, 19:33 pm »

Deja me explico mejor xd por ejemplo la silabas de s serían (sa,se,si,so,su) por lo tanto palabras como "suma,sistema y todo eso entra" y perdón no me explique bien quiero detectar silabas con matches y si esta algo bien como me explicaste pero quiero saber mas de 1 caso de silabas quiero que verifique que una cadena tenga alguna silaba la que sea y cierto sistemas entra en true, lo único que se me ocurre es crear 5 matches con cada una de las silabas y si alguna me devuelve true es que hay, pero quiero hacerlo solo en un matcher como sería la expresión?
En línea

SrTrp


Desconectado Desconectado

Mensajes: 323


Script/C#


Ver Perfil
Re: Matches para palabras o silabas
« Respuesta #5 en: 10 Febrero 2019, 20:47 pm »

Pues creo ya lo supe la expresión algo así
Código:
".*sa.*|.*se.*|.*si.*|.*so.*|.*su.*"
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Matches para palabras o silabas
« Respuesta #6 en: 10 Febrero 2019, 23:43 pm »

Es un error común confundir la gramática de un lenguaje de programación con la gramática humana.

En programación, las expresiones regulares reconocen 'patrones'.
Para reconocer sílabas del lenguaje humano, deben crearse los patrones específicos... es decir no están descritas como tal, las sílabas de la gramática humana, tienen reglas, que definen donde termina una sílaba y empieza otra, que además es dependiente del idioma. En español, por ejemplo, tenemos los diptongos, hiatos y triptongos, que pueden complicarlo...

entonces la única forma de reconocer sílbas del español, será crear patrones para cada caso, bien que luego muchos se puedan aunar en uno mismo, con ligeras diferencias o a base de complicarlo... la sílaba más larga en español suelen ser de la forma: "trans".

Con la s, tienes sílabas sa, se si, so, su, pero que las reconozca bien o no, dependerá de la letra que luego venga detrás... así: en "Sor Socorro sospecha del soriano"Las silabas de 's' son:
Sor - espacio
So - corro
sos - pecha
so - riano.

Como puede ves 'sor' de Sor es una sola sílaba, pero luego en soriano las 3 mismas letras 's+o+r' participan de 2 sílabas.

Resumiendo, obtener las sílabas de plabras del lenguaje humano, es algo más complicado... requiere primero aprenderte bien la parte de la gramática española que lo trata (análisis léxicográfico), luego estarás más preparado para ser capaz de exponer patrones que capten las sílabas.

Una forma sucia es componer todas las situaciones posibles para 3 letras con la 's', descartando luego a mano las que no proceden y revisando luego las que tienen casos positivos y negaticos (como ese doble caso de sor y soriano), entonces para estos casos primero filtras encontrarlos todos y luego una segunda revisión que descarte todos los casos...
Posiblemente esta sea la regla para todas las silabas comenzando con 's' (pero no si no es inicial, por ejemplo como en la 's' final de 'no-so-tros')
tomar3 = "s" vocal consonante separador   ejemplo: 'sal ', 'sol ', 'Toma-sín '
tomar3 = "s" vocal consonante consonante    ejemplo: 'sas-tre', 'sím-bolo', 'sal-go', 'sís-tole'
tomar2 = "s" vocal consonante vocal      ejemplo 'sa-lida', 'so-corro', 'se-ta', 'sa-gaz'
tomar2 = "s" vocal vocal     ---> ejemplo 'Sá-ez', 'sa-eta', 'se-ísmo'

tomar2, tomar3 indica que son sílabas de 2 y 3 letras respectivamente.
Pero hay que revisarlo en profundidad, para ver si hay algún caso irregular... y aclaro que solo sería sabiendo que la 's' es comienzo de sílaba, en una palabra como 'es-truendo', tras la 's' le sigue una consonante...

En fin, es tarea tuya, peor ahí tienes por donde cogerlo de un a forma sucia... es válido si sólo precisas hacerlo para la 's', si pretendes hacerlo con todo el alfabeto, entonces es mejor que te estudies a fondo la gramática española para recrear las reglas de formación de sílabas y poderlo portar para programarlo.
« Última modificación: 10 Febrero 2019, 23:47 pm por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Seperar en silabas
Programación Visual Basic
<[(x)]> 3 7,995 Último mensaje 8 Diciembre 2009, 06:45 am
por MCKSys Argentina
problema con busqueda de silabas ( letra mayuscula) « 1 2 »
Programación C/C++
manutmac 10 5,587 Último mensaje 14 Noviembre 2012, 16:09 pm
por rir3760
¿En ingles se puede separar las palabras en silabas?
Foro Libre
bacanzito 2 2,200 Último mensaje 6 Agosto 2014, 11:40 am
por ivancea96
Regex.Matches() error de uso C#
.NET (C#, VB.NET, ASP)
Kaxperday 5 3,575 Último mensaje 22 Febrero 2016, 00:05 am
por Eleкtro
MOVIDO: Division Silabas Texto
Programación General
Eleкtro 0 1,557 Último mensaje 10 Febrero 2017, 17:11 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines