Tutorial: Instrucciones de Unix básicas para el tratamiento de corpus textuales - mtuoc/tutorials GitHub Wiki
1. Introducción
En este tutorial vamos a aprender algunas instrucciones de Unix útiles para el preprocesamiento básico de corpus. Este sistema operativo dispone de muchos comandos útiles para trabajar con archivos de texto de gran tamaño.
2 Obtención del corpus
En esta sección vamos a realizar un preprocesamiento básico de corpus utilizando comandos Unix y algunas utilidades básicas. En esta edición del seminario pretendemos entrenar un sistema TAN inglés-español de ámbito médico. Para empezar el preprocesamiento necesitamos acceder a nuesto terminal y descargar el corpus. Nos interesa, en primer lugar descargar el corpus EMEA de Opus Corpora en formato Moses. Podéis ir a la web de Opus Corpora y utiizar el buscador para seleccionar el enlace de descarga y descargarlo desde la web, o bien copiar el enlace de descarga y descargarlo con wget:
wget https://object.pouta.csc.fi/OPUS-EMEA/v3/moses/en-es.txt.zip
Si os da un error de que no tenéis instalado wget podéis instalarlo (en Ubuntu 22.04 y otras distribuciones basadas en Debian):
sudo apt-get install wget
Una vez descargado el corpus lo tenemos que descomprimir, ya que se bajará en un archivo zip. Para ello, en Terminal, vamos al directorio donde tenemos el archivo y escribimos:
unzip en-es.zip
Atención: si tu sistema Linux no tiene instalado unzip y esta instrucción de da un error, puedes instalarlo mediante la siguiente instrucción:
sudo apt-get install unzip
3. Preprocesamiento básico
Una vez descomprimidos los archivos te aparecen varios, entre ellos (los nombres pueden variar según el par de lenguas o corpus que hayas escogido=:
- EMEA.en-es.en: la parte inglesa del corpus
- EMEA.en-es.es: la parte española del corpus
Podemos contar el número de segmentos del corpus haciendo:
wc -l EMEA.en-es.e?
1098333 EMEA.en-es.en
1098333 EMEA.en-es.es
2196666 total
Como era de esperar, los dos archivos tienen el mismo número de líneas, ya que son paralelos. A este formato de corpus paralelo con dos archivos alineados línea a línea se le denomina formato Moses.
Ahora nos interesa convertir este corpus en formato Moses en un corpus en formato de texto tabulado (con paste unimos cada una de las líneas de cada archivo con un tabulador). A la vez que lo hacemos, eliminaremos los repetidos (con sort | uniq) y ordenaremos aleatoriamente el corpus (con shuf):
paste EMEA.en-es.en EMEA.en-es.es | sort | uniq | shuf > EMEA-uniq-eng-spa.txt
Si tu sistema no tiene shuf instalado, escribe:
apt-get install coreutils
Ahora podemos contar el número de líneas del archivo resultante:
wc -l EMEA-uniq-eng-spa.txt
366888 EMEA-eng-spa.txt
Como podemos ver, el número de segmentos es menor ya que habían segmentos repetidos. De hecho en este corpus, habían mucho segmentos repetidos, ya que pasamos de más de 1M segmentos a poco más de 350K segmentos.
Hemos aprendido a pasar de formato Moses a texto tabulado, pero también es posible pasar de texto tabulado a Moses con la instrucción cut:
cut -f 1 EMEA-uniq-eng-spa.txt > EMEA-uniq.en
cut -f 2 EMEA-uniq-eng-spa.txt > EMEA-uniq.es
4. Visualización de archivos en terminal
Unix permite visualizar el contenido de archivos, por muy grandes que sean, mediante las siguientes instrucciones:
cat: esta instrucción concatena el contenido de archivos y si no se indica donde ponerlos, los muestra por pantalla, así
cat EMEA-uniq-eng-spa.txt
mostrará el contenido de manera rápida y sin detenerse. Para detenerlo haz Ctrl+C
more: enseña el contenido del archivo pero se detiene cuando se llena la pantalla y para continuar se tiene que ir pulsando Enter. La instrucción less hace exactamente lo mismo.
more EMEA-uniq-eng-spa.txt
tail: muestra las últimas líneas del archivo.
tail EMEA-uniq-eng-spa.txt
5. Concatenar dos archivos y eliminar repetidos
Como hemos podido ver, nuestro corpus EMEA, una vez eliminados los segmentos repetidos, se ha quedado en un corpus demasiado pequeño. Observando los recursos en Opus Corpora vemos que tenemos disponible el corpus: ELRC-EMEA. Realiza las siguientes operaciones:
wget https://object.pouta.csc.fi/OPUS-ELRC-EMEA/v1/moses/en-es.txt.zip
(si lo haces en el mismo directorio que con el EMEA borra primero el en-es.txt.zip escribiendo
rm en-es.txt.zip)
unzip en-es.txt.zip
paste ELRC-EMEA.en-es.en ELRC-EMEA.en-es.es | sort | uniq | shuf > ELRC-EMEA-uniq-eng-spa.txt
wc -l ELRC-EMEA-uniq-eng-spa.txt
777372 ELRC-EMEA-uniq-eng-spa.txt
Ahora queremos combinar los dos corpus de la siguiente manera:
cat EMEA-uniq-eng-spa.txt ELRC-EMEA-uniq-eng-spa.txt | sort | uniq | shuf > corpusEMEA-uniq-eng-spa.txt
Y contamos cuantos segmentos diferentes tenemos:
wc -l corpusEMEA-uniq-eng-spa.txt
1144260 corpusEMEA-uniq-eng-spa.txt
Al final hemos obtenido un corpus de algo más de 1M segmentos del ámbito de la medicina. Este corpus será la base del motor que entrenaremos en esta edición del seminario.