Desktop version

Home arrow Language & Literature

  • Increase font
  • Decrease font


<<   CONTENTS   >>

Exploración inicial

En el subdirectorio creado para las practices de este capftulo tenemos ya los textos elec- tronicos de las dos partes del Quijote y, en caso necesario, hemos instalado las aplicaciones indicadas en el apartado 7.3.1. La pregunta acerca del numero de palabras se resuelve con rapidez empleando la utilidad wc, que tiene el formato general siguiente:22

wc nombre_fichero. ext

Asf pues, para saber el numero de palabras de la primera parte del Quijote hay que escribir: wc Quijotel.txt

El conjunto de orden у respuesta sera algo del estilo de: wc Quijotel.txt

17634 185771 1058310 Quijotel.txt

La respuesta tiene tres cifras distintas у el nombre del fichero sobre el que ha trabajado la orden. La primera da el numero de lfneas del texto,25 la segunda el numero de palabras graficas у la tercera contiene el numero de caracteres. Si hacemos lo mismo para la segunda parte:

wc Quijote2.txt

19810 195446 1120649 Quijote2.txt

Ast pues, la segunda parte es un poco mas voluminosa que la primera. Usando uno de los metacaracteres habituales en las referencias a hcheros у subdirectories, podemos obtener la informacion referente a cada una de las dos partes у a su conjunto:

wc Quijote7.txt

17634 185771 1058310 Quijotel.txt 19810 195446 1120649 Quijote2.txt 37444 381217 2178959 total

El resultado en numero de palabras у caracteres es proximo al obtenido con el procesador. Ademas de que, сото ya he indicado, estos recuentos tienen siempre algunos factores dife- renciales, hay que tener en cuenta que hemos eliminado un cierto numero de palabras, sobre todo del final, de modo que es logico que estas cifras resulten inferiores a las previas.

La utilidad wc tiene, сото casi todos los programas, opciones que permiten configurar las operaciones que realiza у el resultado que proporciona. En este caso concreto, si llegara a ser necesario trabajar con unicamente el numero de palabras, puede lograrse del modo siguiente:24

wc -w Quijote7.txt 185771 Quijotel.txt 195446 Quijote2.txt 381217 total

Veamos ahora la forma de localizar las apariciones de una palabra о expresion en un texto. El programa mas adecuado para ello es grep, una herramienta realmente imprescindible para quienes trabajamos con textos. La forma general de utilizar este programa es25

grep "expresion_deseada" nombre_fichero. ext

En nuestro caso concreto, suponiendo que deseemos recuperar los casos de rabel en la pri- mera parte del Quijote:

grep "rabel" Quijotel.txt

que, sobre todo, sabe leer у escrebir у es musico de un rabel, que no hay

son del rabel, у de alii a poco llego el que le tania, que era un mozo de

encina, y, templando su rabel, de alii a poco, con muy buena gracia,

queja de ausencia; у al son de un rabel, que admirablemente toca, con Como en el caso de wc, es posible recuperar los casos de los dos ficheros al tiempo: grep "rabel" Quijote7.txt

Quijotel.txt:que, sobre todo, sabe leer у escrebir у es mdsico de un rabel, que no hay

Quijotel.txt:son del rabel, у de alii a poco llego el que le tania, que era un mozo de

Quijotel.txt:encina, y, templando su rabel, de alii a poco, con muy buena gracia,

Quijotel.txt:queja de ausencia; у al son de un rabel, que admi- rablemente toca, con

Quijote2.txt:zamoranas, que tamborines, у que de sonajas, у que de rabeles! Pues, ;que

En este caso, сото se ve, el programa indica de que fichero procede cada ejemplo. La ultima lfnea devuelta (que contiene rabeles) muestra un rasgo que es necesario tener siempre en cuenta: es muy probable que la persona que da la instruccion este pensando en “la palabra rabel", pero la computadora у la utilidad entienden “la secuencia de caracteres rabel”, que, evidentemente, no es lo mismo. Veremos la forma de resolver problemas de este tipo con grep у otras utilidades en el apartado 7.3.3.

Naturalmente, grep puede trabajar con secuencias de caracteres que contengan mas de una palabra grafica. Si, en lfnea con lo que hemos visto previamente, hacemos la busqueda de la secuencia con la iglesia

grep "con la iglesia" Quijote7.txt

veremos que se obtiene una respuesta vacfa, esto es, que no localiza ningun caso de esa secuencia en todo el texto del Quijote. La razon de esta contradiccion aparente con lo que sabemos esta en la diferencia entre mayusculas у minusculas. Estamos acostumbrados a con- siderar las letras, los caracteres, desde una perspectiva bastante abstracta, que nos permite hablar de “la p” у prescindir de todas las diferencias de cuerpo, tipo о caja que se pueden ocultar tras esa expresion. Para las aplicaciones informaticas, en cambio, se trata de una diferencia importante, puesto que la mayuscula у la minuscula de “la misrna letra” tienen dos codigos diferentes y, por tanto, son entidades totalmente distintas. Dado que, сото hemos visto, el texto contiene al menos un caso de Con la iglesia hemos dado, podrfamos hacer la busqueda con esa expresion, es decir, con la primera letra en mayusculas. La mejor opcion, sin embargo, al menos para la primera exploracion de lo que sucede con esta secuencia en el texto, consiste en utilizar un parametro de la orden que permite prescindir de esta diferencia у recuperar todos los casos de la secuencia en cuestion, sin tener en cuenta la distincion entre mayusculas у minusculas:

$ grep -i "con la iglesia" Quijote7.txt

Quijotel.txt:reconcilian con la Iglesia, sin que se les haga dano; y, cuando veen la

Quijote2.txt:-Con la iglesia hemos dado, Sancho.

El uso de esta opcion hace que podamos recuperar de una sola vez todas las secuencias que nos interesan, con independencia de que alguno(s) de sus integrantes aparezcan en mayus- culas о minusculas.26

Ya hemos visto que grep devuelve las lfneas que contienen una determinada secuencia de caracteres. Por tanto, podemos utilizar esa caracterfstica para recuperar las apariciones de ciertos formantes gramaticales que tienen una expresion clara en terminos ortograficos. Como es bien sabido, Cervantes ironiza acerca del uso excesivo de superlativos en -isimo en el capf- tulo xxxviii de la segunda parte de la obra.:' Sin embargo, nuestro autor utiliza esta formacion en un cierto numero de ocasiones, de modo que puede resultar de interes recuperar todos los casos del superlativo sintetico que aparecen, por ejemplo, en la segunda parte de la obra:

grep "isimo" Quijote2.txt

La respuesta es un buen numero de lfneas que no podemos manejar con comodidad. Lo mas aconsejable es, por tanto, almacenar el resultado en un fichero con el que luego podamos trabajar. La forma de lograrlo es utilizar el operador de direccionamiento (>) seguido del nombre de fichero en el que queremos conservar la salida de la orden. Por ejemplo:28

grep "isimo" Quijote2.txt > isimo_quijote_2.txt

La primera sensacion es que no hay respuesta, pero lo que sucede en realidad es que, siguiendo las instrucciones recibidas, el resultado ha sido almacenado en un fichero de texto, que podre- mos ver dando la orden de listar en contenido del subdirectorio (dir о bien Is, segiin el sistema operativo utilizado).29 El paso siguiente debe consistir en analizar el contenido del listado, para lo cual podemos usar un editor de texto о bien, aunque es menos aconsejable, el procesador de texto que empleemos habitualmente. De esa forma es posible ver todas las lfneas devueltas, analizarlas con calma, copiar algunas de ellas у transferirlas a otro fichero de texto, etc.

Hacer el estudio completo requiere trabajar con las dos partes de la obra, con lo que el numero de lfneas se incrementa considerablemente. Una forma de saber que es lo que nos espera si vamos a hacer esa busqueda consiste en utilizar una opcion de grep que no imprime las lfneas que cumplen la condicion especificada, sino que devuelve su numero:

grep -c "isimo" Quijote7.txt Quijotel.txt:66 Quij ote2.txt:95

Visto que las cifras dan un numero de casos importante en ambas partes, podemos proceder a obtener las lfneas que contienen la secuencia у almacenar el resultado en un fichero:

grep "isimo" Quijote7.txt > isimo_quijote.txt

El analisis de las lfneas devueltas por grep con los casos en los que aparece la secuencia -isimo muestra que, de forma congruente con lo que ya hemos visto, contiene tambien los casos en los que el superlativo aparece en masculino plural (-tsimos). Faltan, por tanto, los femeninos (singular у plural). Hay una forma sencilla de pedir todos estos casos con una sola orden, pero, de momento, vamos a usar un rnetodo mas primitivo, pedir los resultados de -isima у, сото novedad, almacenar los resultados en el mismo fichero en el que hemos guardado los de las formas masculinas:

grep "isima" Quijote7.txt >> isimo_quijote.txt

Con la repeticion del signo “mayor que” se consigue que el resultado de esta orden se anada al final del fichero creado previamente (que contiene las lfneas en las que aparece la secuen- cia -isimo), con lo que podemos trabajar con todos ellos en un bloque tinico.30 Para analizar el contenido de ese fichero podemos usar cualquier editor о procesador de texto у tambien, desde la pantalla del sistema, un editor сото less: less nombre_del_fichero. ext

Veamos ahora una lista de frecuencias de palabras у las primeras informaciones de interes que podemos obtener de ellas. En la pagina de consulta del CREA (no etiquetado) (http://corpus.rae.es/creanetditml) hay un enlace a unas listas de frecuencias de las formas contenidas en ese corpus. Vamos a usar la primera, la que contiene las mil formas mas frecuentes. Para poder trabajar con ella hay que seleccionar su contenido, copiarlo al portapapeles, abrir nuestro editor de texto, pegar las mil lineas en el у guardarlo en formato texto en el subdirectorio que se este usando para las practices con un nombre que indique su contenido, por ejemplo crea_1000.txt. Como se puede ver con facilidad, el fichero contiene, en columnas separadas por tabuladores,51 el numero de orden, la forma, su fre- cuencia total en el CREA у la frecuencia normalizada (casos por millon de formas).32

Aplicando lo ya visto, es facil ver el numero de lineas del fichero (con wc, que devuelve 1001 lineas porque cuenta tambien la del encabezamiento). Podemos tambien comprobar, por ejemplo, que en este serie de entradas no hay ninguna que contenga la secuencia -isimo у que, en cambio, hay cuatro con la secuencia -mente:

grep "mente" crea_1000.txt

  • 596. especialmente 21931 143,75
  • 702. precisamente 18930 124,08
  • 738. finalmente 18231 119,5
  • 944. solamente 14520 95,17

Para analizar el contenido de un fichero de texto podemos usar, сото hemos hecho ante- riormente, un editor о un procesador, pero hay otros metodos de lograr una vision rapida de su contenido у estructura. La orden head devuelve las diez primeras lineas de un fichero:33

head crea_1000.txt

Orden Forma Free, absoluta Free, normalizada

  • 1. de 9999518 65545,55
  • 2. la 6277560 41148,59
  • 3. que 4681839 30688,85
  • 4. el 4569652 29953,48
  • 5. en 4234281 27755,16
  • 6. у 4180279 27401,19
  • 7. a 3260939 21375,03
  • 8. 1os 2618657 17164,95
  • 9. se 2022514 13257,31

Su contrapartida, la orden tail, devuelve las diez ultimas. Ambas admiten la modificacion del numero de lineas retornadas:

head -n5 crea_1000.txt

Orden Forma Free, absoluta Free, normalizada

  • 1. de 9999518 65545,55
  • 2. la 6277560 41148,59
  • 3. que 4681839 30688,85
  • 4. el 4569652 29953,48

Las lfneas del fichero contienen las formas ordenadas por su frecuencia (de mayor a menor), con la indicacion del numero de orden que corresponde a cada una. Si, por alguna razon, fuese necesario trabajar unicamente con solo alguno(s) de los cuatro campos, podemos usar para ello la orden cut. Para quedarnos con unicamente la lista de formas:

cut -f2 crea_1000.txt

El parametro f alude a los campos (fields) en que esta estructurada cada una de las lfneas, de modo que la orden anterior indica que se pretende conseguir unicamente la secuencia de caracteres que figura en el segundo campo. Si queremos eliminar el numero de orden у conservar los otros tres campos, la orden es:

cut -f2-4 crea_1000.txt

Si necesitamos guardar el resultado podemos usar el operador de almacenamiento (>) у trabajar con ese fichero derivado.

La orden cut entiende, por defecto, que los campos estan separados por tabuladores. Si no es asf, es necesario indicarlo mediante el parametro -d. Por ejemplo, si el separador es el signo :, la instruccion debe ser

cut -d f 2-4

El fichero crea_1000.txt esta, сото hemos visto, ordenado por frecuencia descendente de las formas. Podrfa interesarnos tener esa misma lista, pero con las formas ordenadas alfabeticamente. Los sistemas operativos incorporan utilidades que permiten hacer este trabajo con facilidad: la orden sort,34 que es la que vamos a utilizar para este proposito. Para entender el funcionamiento de sort, podemos comenzar por la formulacion mas simple:

sort crea_1000.txt

Las ultimas lfneas (que son las que probablemente podremos observar en la pantalla del monitor) muestran que el resultado de la orden no ha sido muy satisfactorio:

  • 98. pais 104568 685,42
  • 990. torno 13781 90,33
  • 991. proyectos 13773 90,28
  • 992. flores 13763 90,21
  • 993. niveles 13759 90,18
  • 994. afirmo 13758 90,18
  • 995. explico 13751 90,13
  • 996. n 13748 90,11
  • 997. somos 13727 89,97
  • 998. terminos 13719 89,92
  • 999. premio 13701 89,8
  • 99. segOn 104204 683,04
  • 9. se 2022514 13257,31

Orden Forma Free. absolute Free, normalizada

Como se puede ver, las lfneas estan ordenadas, pero de modo inservible para nuestros proposi- tos: el orden se ha establecido a partir del contenido de la primera columna (la que da el numero de orden que corresponde a cada forma en una organizacion de mayor a menor fre- cuencia salvo en la primera lfnea) y, ademas, la ordenacion no es “correcta”, puesto que a la lfnea a la que corresponde el numero de orden noventa у ocho sigue la que lleva el novecientos noventa y, al final, a la lfnea novecientos noventa у nueve siguen noventa у nueve у nueve. Este aparentemente extrano resultado se debe simplemente a que orden ha operado de acuerdo con la configuracion que tiene por defecto: ordenar a partir del contenido lefdo de izquierda a derecha por un lado у considerar que se trata de secuencias de caracteres alfanumericos por otro. El resultado, pues, es inservible, pero, en realidad, es el que hemos pedido. Para obtener una salida mas proxima a lo que deseamos hay que indicar que necesita- mos que el contenido del primer campo sea tratado сото una cifra, no сото una secuencia alfanumerica:

sort -n crea_1000.txt | tail

  • 991. proyectos 13773 90,28
  • 992. flores 13763 90,21
  • 993. niveles 13759 90,18
  • 994. afirmo 13758 90, 18
  • 995. explico 13751 90,13
  • 996. n 13748 90,11
  • 997. somos 13727 89,97
  • 998. terminos 13719 89,92
  • 999. premio 13701 89,8
  • 1000. tercera 13694 89,76

Las ultimas lfneas son ahora, en efecto, las que tienen el numero de orden mas alto (y las frecuencias mas bajas), de modo que la orden ha interpretado correctamente la indicacion de tratar el contenido de la primera columna сото una cifra. Como una muestra adicional de las posibilidades de sort, podrfamos lograr la inversion de la ordenacion, para conseguir que aparecieran en los ultimos lugares las formas que tienen el numero de orden mas bajo (y las frecuencias mas altas del grupo de las mil primeras, naturalmente):

sort -nr crea_1000.txt | tail

  • 9. se 2022514 13257,31
  • 8. los 2618657 17164,95
  • 7. a 3260939 21375,03
  • 6. у 4180279 27401,19
  • 5. en 4234281 27755,16
  • 4. el 4569652 29953,48
  • 3. que 4681839 30688,85
  • 2. la 6277560 41148,59
  • 1. de 9999518 65545,55

Orden Forma Free, absoluta Free, normalizada

De todas formas, estos resultados no son los que buscamos у solo consiguen darnos varian- tes mas о menos utiles sobre la lista que ya tenemos. Para lograr una lista de formas ordenadas alfabeticamente, que es lo que pretendemos conseguir, tenemos varios caminos. El primero de ellos es mas largo, pero conviene seguirlo para adquirir mayor familiaridad con todas estas ordenes. Como hemos visto, la orden sort trabaja, por defecto, de izquierda a derecha, de modo que, puesto qne disponemos tambien de cut, podemos generar un fichero que con- tenga unicamente las tres ultimas columnas у luego hacer la ordenacion sobre la primera de ellas, que sera, naturalmente, la que contiene la forma:

cut -f2-4 crea_1000.txt > crea_1000_bis.txt

Con esto habremos producido un fichero en el que ya no figura la columna con el numero de orden у la forma ocupa el primer campo. Ahora podemos ordenarlo con las opciones por defecto у guardar el resultado en otro fichero:

sort crea_1000_bis.txt > crea_1000_ter.txt

Las ultimas lfneas de este fichero (que podemos ver con tail) muestran que, efectiva- mente, el resultado es el deseado:

voy 23067 151,2

voz 34982 229,3

vuelta 16521 108,29

vuelve 13799 90,45

у 4180279 27401,19

ya 274177 1797,19

yo 167684 1099,14

zona 31365 205,59

zonas 15679 102,77

Un modo mas rapido e interesante de lograr este resultado consiste en utilizar la posi- bilidad de redireccionamiento de las salidas de un programa a otro mediante el uso de “tuberfas” (pipes). Lo que se consigue con ello es que no sea necesario guardar los ficheros intermedios, sino que el resultado de la ejecucion de una orden (la salida) se transfiera сото entrada a otro programa que hace lo que se le indica у luego a otro, у asf sucesiva- mente hasta conseguir lo buscado. En nuestro caso, podrfa ser algo сото lo siguiente:

cut -f2-4 crea_1000.txt | sort > crea_1000_alfa.txt

Es decir, se extraen las columnas dos a cuatro del fichero crea_1000.txt, se ordenan (sobre lo que es ahora la primera columna, que corresponde a la forma) у el resultado se almacena en un fichero distinto. El examen de crea_1000_alfa.txt (con un editor de textos о bien con head о tail) mostrara si se ha conseguido lo deseado.

La segunda via es mas rapida у consiste en utilizar una opcion de sort que permite seleccio- nar la columna sobre la cual se quiere hacer la ordenacion:

$sort -k2 crea_1000.txt > crea_1000_alfa2.txt

Las lfneas finales de este ultimo fichero (que se pueden conseguir con tail) muestran que, en efecto, se ha conseguido la ordenacion por el contenido de la segunda columna sin nece- sidad de eliminar la primera:

$tail crea_1000_alfa2.txt

  • 833. volvio 16207 106,23
  • 555. voy 23067 151,2
  • 325. voz 34982 229,3
  • 817. vuelta 16521 108,29
  • 988. vuelve 13799 90,45
  • 6. у 4180279 27401,19
  • 34. ya 274177 1797,19
  • 56. yo 167684 1099,14
  • 376. zona 31365 205,59
  • 869. zonas 15679 102,77

Es posible usar el redireccionamiento para realizar operaciones sobre partes de ficheros. Por ejemplo, para ordenar alfabeticamente las formas que presentan la secuencia -mente podemos usar la orden siguiente у obtener el resultado que figura a continuacion:

$ grep "mente" crea_1000.txt | sort -k2 596. especialmente 21931 143,75

  • 738. finalmente 18231 119,5
  • 702. precisamente 18930 124,08
  • 944. solamente 14520 95,17

Practices

Contar el nOmero de llneas de crea_1000.txt que contienen la secuencia -cion. Lo mismo con la secuencia anti- у la secuencia ue. Ojo: obtendremos formas que contienen esas secuencias de caracteres, de modo que los resultados no coincidiran exactamente con el sufijo -cion, el prefijo anti- о el diptongo ue.

Tomando crea_1000.txt сото punto de partida, producir un fichero que contenga Onicamente la forma у la frecuencia total.

Reordenar alfabeticamente el fichero derivado de la practica anterior.

Utilizando crea_1000.txt, localizar las formas que contienen la secuencia -cion у reor- denarlas alfabeticamente.

 
<<   CONTENTS   >>

Related topics