===== siette.util.corpus.Dictionary ===== La clase ''Dictionary'' implementa una lista de términos a los que se asocia una serie de atributos. Los //términos// son secuencias de caracteres que terminan con el caracter '':'' (dos puntos). Los atributos son cadenas de caracteres separados por algún caracter especial (en general espacio en blanco, tabulador o coma). Cada línea corresponde a un término. Los términos pueden repetirse. ==== Constructores ==== public Dictionary(String sURL, String separator) public Dictionary(String sURL) public Dictionary() public Dictionary clone() public void setDictionary(String sURL, String separator) public void setDictionary(String sURL) Inicialmente para construir el objeto de la clase ''Dictionary'' hay que indicar el fichero que contiene el diccionario y especificar el separador o separadores mediante una cadena de caracteres. Si no se especifica se usa como separador ''DEFAULT_SEPARATOR'' cuyo valor es: '' \t,'' , es decir, espacio en blanco, tabulador, o coma. Tambien es posible crear el diccionario en blanco e inicializarlo posteriormente con el método ''setDictionary'', o bien crearlo como copia de otro diccionario mediante el método ''clone()'' ==== Modo exclusivo ==== public void setExclusive() public void setNotExclusive() Los diccionarios tienen dos modos de funcionamiento, //exclusivo// y //no exclusivo//. El modo //exclusivo// que es el que se usa por defecto elimina del diccionario cada termino que se haya seleccionado previamente, de manera que no se pueda seleccionar dos veces el mismo elemento. El modo //no exclusivo// si lo permite. public boolean excludes(String termino) Excluye un ''termino'' del diccionario, es decir, hace que de ahí en adelante este término no se seleccione. ==== selectDictionary ==== public Dictionary selectDictionary(String[] attPos, int modePos, String[] attNeg, int modeNeg) public Dictionary selectDictionary(String[] attPos, String[] attNeg ) public Dictionary selectDictionary(String[] attPos, String attNeg) public Dictionary selectDictionary(String[] att, int mode) public Dictionary selectDictionary(String[] att) public Dictionary selectDictionary(String att) public Dictionary selectDictionary() El conjunto de métodos ''selectDictionary'' devuelve un diccionario que solo contiene algunos de los términos del diccionario original, y que todos ellos cumplen con la siguiente condicion: ''attPos'' es un array de atributos (cadenas de caracteres) que pueden tener los términos. ''modePos'' es una variable que puede tomar dos valores constantes ''Dictionary.ALL'' y ''Dictionary.ANY''. El primer caso indica que los atributos listados en ''attPos'' deben estar todos asociados al término que se busca. En el segundo caso, basta con que el término contenga alguno de ellos. ''attNeg'' al igual que ''attPos'' es un array de atributos. ''modeNeg'' al igual que ''modePos'' es una variable que puede tomar dos valores constantes ''Dictionary.ALL'' y ''Dictionary.ANY''. El significado es diferente, en el caso de ''modeNeg'' el valor ''Dictionary.ALL'' implica que el término no contenga todos los atributos listados en ''attNeg'', y el valor ''Dictionary.ANY'' indica que el término no debe contener ninguno de los atributos listados en ''attNeg''. Un ejemplo clarifica mejor el funcionamiento de este método: Dictionary d = new Dictionary(...); String[] talla = {"38","39","40"} String[] color = {"rojo","azul"}; Dictionary d2 = selectDictionary(talla, Dictionary.ANY, color, Dictionary.ANY); Suponiendo que el diccionario lista un conjunto de prendas de vestir, la selección se realiza entre aquellas que sean o bien de la talla ''38'', ''39'' o ''40'', pero que no sean ni de color ''rojo'', ni de color ''azul''. Dictionary d3 = selectDictionary(color, Dictionary.ALL, talla, Dictionary.ANY); En este caso, el diccionario selecciona prendas que mezclen los colores rojo y azul, pero no sean de la talla ''38'',''39'', ni ''40''. Raramente la selección se hará en un solo paso con una consulta complicada. Lo más usual es que las consultas sean simples, y que en muchos casos no haya que especificar más que alguno de los argumentos de la función. Para ello se han creado métodos que utilizan valores por defecto y llaman al método principal, que son estos: ''modePos'', valor por defecto ''ALL'' \\ ''attNeg'', valor por defecto ''new String{}'' \\ ''modeNeg'', valor por defecto ''ANY'' \\ Si se llama al metodo sin atributos, se devuelve una copia del objeto. El siguiente método selecciona prendas de la talla ''38'' que mezclen el color ''rojo'', y ''azul'' Dictionary d4 = selectDictionary(new String[] {"38","rojo","azul"}); ==== selectSet ==== public Set selectSet(String[] attPos, int modePos, String[] attNeg, int modeNeg) public Set selectSet(String[] attPos, String[] attNeg ) public Set selectSet(String attPos, String attNeg ) public Set selectSet(String[] att, int mode) public Set selectSet(String[] att) public Set selectSet(String att) public Set selectSet() Este conjunto de métodos es igual al anterior conjunto ''selectDictionary'' solo que esta vez se devuelve como resultado un conjunto de cadenas de caracteres correspondiente a los //términos// del diccionario. ==== selectAll ==== public String[] selectAll(String[] attPos, int modePos, String[] attNeg, int modeNeg) public String[] selectAll(String[] attPos, String[] attNeg ) public String[] selectAll(String attPos, String attNeg ) public String[] selectAll(String[] att, int mode) public String[] selectAll(String[] att) public String[] selectAll(String att) public String[] selectAll() Igual que el anterior pero devuelve un array de cadenas de caracteres. ==== select ==== public String select(String[] attPos, String[] attNeg ) public String select(String attPos, String attNeg ) public String select(String[] att) public String select(String att) public String select() Es una aplicación simplificada del método anterior, una ve seleccionados los términos que contienen todos los atributos ''attPos'', y ninguno de los ''attNeg'', en vez de devolver todos los valores, se selecciona uno de ellos al azar. ==== getAttributes ==== public String[] getAttributes(String termino, String[] atts) public String[] getAttributes(String termino) Estas funciones devuelven todos los atributos asociados a un ''término''. Si se usa el ''atts'', solo se devuelven los atributos que estén incluidos en esta lista, es decir la intersección entre los atributos asociados al //término// y los atributos de la lista ''atts''. public Set getAttributesSet(String text, Set atts) public Set getAttributesSet(String text) Igual que la anterior pero con conjuntos. ==== toPattern ==== public static String cap(String st) Pone en mayúsculas la primera letra de una cadena de caracteres ''st''. public static String toPattern(String in, boolean escape, int patternAlign) public static String toPattern(String in, boolean escape) public static String toPattern(String in) El propósito de estas funciones es construir un [[es:manual:items:patron:siette|patrón Siette]] a partir de una cadena de entrada ''in''. Al construir un patrón Siette algunos caracteres son caracteres especiales que no pueden usarse directamente en las expresiones, si no se especifica otra cosa, estos caracteres simplemente se eliminan. out.println(Dictionary.toPattern("Miguel (de) Cervantes")); produce la salida Miguel de Cervantes Otra opciones, es construir el patrón de manera que conserve los caracteres especiales, para lo cual hay que precederlo del caracter de//escape// out.println(Dictionary.toPattern("Miguel (de) Cervantes"),true); produce la salida Miguel \(de\) Cervantes que es un patrón Siette valido. Finalmente tambien se puede construir un [[es:manual:items:patron:siette|patrón Siette]] de manera que parte del texto sea opcional a derecha o izquierda, por ejemplo: out.println(Dictionary.toPattern("Miguel de Cervantes"),false, Dictionary.LEFT); produce en la salida el patrón Siette: {{Miguel} de} Cervantes o bien out.println(Dictionary.toPattern("Aguila culebrera blanca"),false, Dictionary.RIGHT); produce en la salida el patrón Siette: Aguila{ culebrera{ blanca}} El primer patrón daría como buena una respuesta que dijera simplemente ''Cervantes'' y el segundo una respuesta que dijera simplemente ''Aguila''. Dependiendo de la aplicación unas veces es más conveniente un patrón que otro. public static String toPattern(Set set, int mode) public static String toPattern(List aList, int mode) public static String toPattern(String[] aString, int mode) public static String toPatternAll(Set set) public static String toPatternAll(List aList) public static String toPatternAll(String[] aString) public static String toPatternAny(Set set) public static String toPatternAny(List aList) public static String toPatternAny(String[] aString) Este conjunto de métodos devuelve un [[es:manual:items:patron:siette|patrón Siette]] combinando las cadenas de caracteres que se les pasan como argumentos, ya sea como un array de cadenas de caracteres, una lista o un conjunto. El atributo ''mode'' puede tomar dos valores, correspondientes a dos constantes de la clase ''Dictionary.ALL'' y ''Dictionary.ANY'' indicando cómo deben combinarse. Por ejemplo toPattern(new String[] {"rojo","azul","blanco"}, Dictionary.ALL) genera el siguiente [[es:manual:items:patron:siette|patrón Siette]]: rojo+azul+blanco que reconoce respuestas como: rojo,azul,blanco rojo,blanco,azul azul rojo blanco ... Las versiones abreviadas de esta función imponen el modo en el propio nombre de la función, como por ejemplo toPatternAny(new String[] {"rojo","azul","blanco"}) que genera el patrón rojo|azul|blanco que acepta cualquiera de estas cadenas como respuesta. ==== toText ==== public static String toText(String[] aString, int mode, String lang) public static String toText(Set set, int mode, String lang) public static String toTextAll(String[] aString, String lang) public static String toTextAll(Set set, String lang) public static String toTextAll(String s, String lang) public static String toTextAny(String[] aString, String lang) public static String toTextAny(Set set, String lang) public static String toTextAny(String s, String lang) Los métodos ''toText'' son similares a los métodos ''toPattern'' solo que en vez de crear un patrón Siette, forman una frase en lenguaje natural. Están pensados para trabajar con una lista de atributos y generar textos que pueden usarse en las preguntas de respuesta corta como //ejemplos// de respuestas correctas, o en la sección de //ayuda//. Por ejemplo, toText(new String[] {"rojo","azul","blanco"}, Dictionary.ALL, "es") devuelve la cadena de caracteres: rojo, azul y blanco Los métodos 'toTextAll' y ''toTextAny'', utilizan un modo por defecto, por ejemplo toTextAll(new String[] {"red","blue","white"}, "en") devuelve la cadena: red, blue and white ==== Métodos auxiliares ==== public static String cap(String st) Pone en mayúsculas la primera letra de una cadena de caracteres ''st''. public static String[] union(String[] att1, String[] att2) public static String[] intersection(String[] att1, String[] att2) public static String[] remove(String[] att1, String[] att2) public static String[] remove(String[] att1, String att2) Implementan operaciones de conjuntos con arrays de caracteres. Están pensadas para manejar conjuntos de atributos. El método ''union'' devuelve un array con la unión de los dos argumentos ''att1'' y ''att2''; el método ''interseccion'' devuelve los elementos comunes entre ambos; y ''remove'' elimina del conjunto ''att1'' los elementos de ''att2''. public static URL getURL(String sURL) Devuelve la URL del archivo, para ello sustituye la cadena que se le pasa como argumento ''sURL'' por una cadena formada por la ruta absoluta, teniendo en cuenta el directorio de la asignatura.