Re: tutorial findString

Manuel Blanc <[email protected]>
Newsgroups gmane.education.small-land
Message-ID <[email protected]>
On 15 Aug 2004, at 5:26 PM, Diego Gomez Deck wrote:

[Esteban escribió:]
>> De todas las interesantes respuestas que he leído, me gusta
>> especialmente ésta:
>>
>> --- Diego Gomez Deck wrote:
>>>
>>> ¿Qué es lo que hace falta que el Squeak haga?
>>>
>> Llevo muy poco tiempo con Squeak y me gusta. Sin embargo, se nota muy
>> orientado a problemas de 'tipo ingeniero'. La mayoría de los guiones
>> prediseñados son 'avanza', 'rota', 'multiplica', etc. Pero creo que
>> hay mucha gente interesada en aplicaciones sobre lenguaje natural. En
>> concreto, mi carta a los reyes magos, consistiría en lo siguiente:
>>
>> 1.Un guión en la categoría texto para buscar una cadena de caracteres
>> en un texto.
>
>  Esto es bastante fácil de hacer.  Lo que me gustaría, antes de 
> hacerlo, es que hagamos una pequeña carta a los reyes de que tipo de 
> procesamiento de cadenas necesitamos (además, claro, del findString).
>
>  Una primera lista que puede servir como inicio para la discusión 
> puede ser:
>
>  - contains (contiene): si el texto contiene otro texto.
>
>  - containsWord: (buscar palabra) que buscaría Platón y no daría 
> verdadero cuando esté la palabra "Platona".
>
>  - startsWith (empieza con)
>
>  - endsWith (termina con)
>
>  - asUpperCase (como mayúsculas): devuelve una cadena pero con todos 
> los caracteres en mayúsculas.  Esto es útil para usar en combinación 
> con las opciones de búsqueda, para que se encuentre con cualquier 
> combinación de mayúsculas minúsculas. Ejemplo:
>
>   texto asUpperCase startsWith: 'HABÍA UNA VEZ'
>
>  En ese ejemplo, cualquier cadena que comience con 'había una vez' o 
> 'HaBÍa uNa Vez' o 'HABÍA UNA VEZ' daría "verdadero".
>
>  - asLowerCase (como minúsculas): idem al anterior, pero al revés.
>
>  La otra opción, para evitar que tener que concatenar 2 opciones, es 
> duplicar las funciones de búsqueda y hacerlas todas duplicadas (una 
> que busque respetando mayúsculas/minúsculas y la otra que ignore esas 
> diferencias). Ejm:  endsWith y endsWithIgnoringCase, containsWord y 
> containsWordIgnoringCase, etc.
>
>  - match (coincide): Esta función permitiría comparaciones con 
> caracteres 'comodín' (como el * del viejo DOS).  Ejemplos de uso:
>
>   '*pepe*'     match: 'pepe'             --> verdadero
>    '*pepe*'     match: 'pepa'             --> false
>    '*pepe*'     match: 'xxx pepe yyy'     --> verdadero
>    'pepe*'      match: 'xxx pepe'         --> false
>    'pepe*pepa'  match: 'pepe ama a pepa'  --> verdadero
>
>  Esta última es interesante porque incluye a varias de las anteriores, 
> ejemplo:
>
>    'pepe*'  match: algo   >>equivale a>>  algo startsWidth: 'pepe'.
>     '*pepe'  match: algo   >>equivale a>>  algo endsWidth: 'pepe'.
>     '*pepe*' match: algo   >>equivale a>>  algo contains: 'pepe'.
>
>  Comentarios?
>
>
> Obsérvese que findString da positivo cuando encuentra
> 'Platón' y cuando encuentra 'Platona', lo que ¿quizás? es fácil de
> mejorar.
>

  Yo creo que con match: bastaría si se hiciera de la siguiente forma:
	- Si no hay asteriscos presentes entonces funcionaría como 
containsWord:
	- con asteriscos a ambos lados funcionaría como contains:
	- con asterisco al principio o al final funcionaria como endsWith: y 
startsWith: respectivamente.

Para hacer un "match" exacto eToys ya proporciona el metodo = (cosa que 
esteban ya había descubierto)

  Con respecto a las mayusculas y minusculas, yo sugiero que se distinga 
siempre entre ellas.

[Nota técnica: si se necesitan ampliaciones en el futuro siempre se 
pueden conseguir mejorando el lenguage de expresiones regulares (ej 
'[Pp]ep[ea]' match: algo,  reconoceria 'pepe', 'pepa', 'Pepe' y 'Pepa', 
pero no 'pepi') en vez de añadiendo más métodos "asustantes" a eToys]


>> 2.Más efectos lógicos: me explico. Una "prueba" en un guión
>> corresponde a lo que en lenguaje natural llamamos un condicional:
>>
>> si encuentra la palabra clave 'Platón' muestra en la salida el texto
>> correspondiente
>>
>> Sin embargo, ¿hay una forma tan eficiente para activar un evento
>> cuando ocurra una conjunción de objetivos, por ejemplo, encuentre
>> "Platón" y "ética" ?
>
>  Esto lo podés hacer hoy, anidando cajas de prueba. 
>
>> ¿Existe una forma tan eficiente para activar un evento cuando ocurra
>> una disyunción de objetivos, por ejemplo "Platón" o "ética"?
>
>  Esto se lograría con una caja de prueba detrás de otra caja de prueba.

Yo sugeriría encontrar una forma alternativa que fuera menos engorrosa 
cuando el problema sea real y no un mero ejemplo.

[Nota técnica: estoy pensando un morfo "analizador lexicográfico 
dirigido por tabla de mosaicos". A pesar del nombrecito seria muy fácil 
de usar simplemente moviendo mosaicos a una tabla. Además tambien 
podría ser de aplicación a morfos más gráficos. ¿Es razonable, Diego?].

Si hay interés, elaboro más la idea.

Saludos
--Manolón
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.