#! /bin/sh # ############################################################################# NAME_="CoOcurrencias" HTML_="calcular co-ocurrencia de palabras" PURPOSE_="generar matriz de coocurrencias" SYNOPSIS_="$NAME_ " REQUIRES_="comandos GNU estándares" VERSION_="1.0" DATE_="2008-06-07" AUTHOR_="Alvaro Huertas " URL_="www.dcs.gla.ac.uk/~alvaro" # CATEGORY_="gfx" PLATFORM_="Linux" SHELL_="bash" DISTRIBUTE_="yes" # ############################################################################# # Este programa puede ser usado, modificado y distribuído como sea. # Se agradece pero no se exige el crédito al autor. usage () { echo >&2 "$NAME_ $VERSION_ - $PURPOSE_ Usage: $SYNOPSIS_ Requires: $REQUIRES_" exit 1 } CoOcurrencias() { # arg check [ ! -f $1 ] && { echo >&2 archivo $1 no se encontró; continue ;} [ ! -f $2 ] && { echo >&2 archivo $2 no se encontró; continue ;} [ ! -f $3 ] && { echo >&2 falta ancho de ventana; continue ;} } lista=$1 texto=$2 ancho=$3 echo "lista de palabras en " $lista echo "archivo de texto " $texto echo "ventanas de " $ancho " palabras" # Borrar signo número tr -d "#" < $texto > archivo01.txt # PASAR TILDES A CÓDIGO b=0; for a in "á" "é" "í" "ó" "ú" "ñ" "ü"; do let "b = $b+1"; sed "s/$a/#$b/" archivo01.txt > archivo02.txt; mv -f archivo02.txt archivo01.txt; done # PASAR MAYÚSCULAS A MINÚSCULAS: tr "A-Z" "a-z" < archivo01.txt > TextoMin1.txt rm -f archivo01.txt # TILDES A MAYÚSCULAS b=0; for a in "A" "E" "I" "O" "U" "N" "IU"; do let "b = $b+1"; sed "s/#$b/$a/" TextoMin1.txt > TextoMin2.txt; mv -f TextoMin2.txt TextoMin1.txt; done # BORRAR OTROS SÍMBOLOS: tr -c /A-Za-z/ " " < TextoMin1.txt > TextoLetras.txt rm -f TextoMin1.txt # DEJAR UNA PALABRA POR LINEA tr -s ' ' '\n' < TextoLetras.txt > ColumnaPalabras.txt rm -f TextoLetras.txt # VOLVER A PONER TILDES b=0; for a in "A" "E" "I" "O" "U" "N" "IU"; do let "b = $b+1"; sed "s/$a/#$b/" ColumnaPalabras.txt > auxiliar.txt; mv -f auxiliar.txt ColumnaPalabras.txt; done b=0; for a in "á" "é" "í" "ó" "ú" "ñ" "ü"; do let "b = $b+1"; sed "s/#$b/$a/" ColumnaPalabras.txt > auxiliar.txt; mv -f auxiliar.txt ColumnaPalabras.txt; done # PONERLE ESPACIOS ANTES Y DESPUÉS awk '{print " " $1 " "}' ColumnaPalabras.txt > ColumnaPalabrasE.txt mv -f ColumnaPalabrasE.txt ColumnaPalabras.txt # ESTADISTICAS sort ColumnaPalabras.txt | uniq -c | sort -g > TerminosContados.txt # Hacer los archivos correspondientes a las ventanas alrededor de cada palabra echo "creando archivos con conteos alrededor de palabras en la carpeta ventanas" mkdir ventanas b=0; for a in $(cat $lista); do let "b = $b+1"; grep -C $ancho $a ColumnaPalabras.txt | sort | uniq -c | grep -f $lista | sort -n > ventanas/$b.dat; done rm -f ColumnaPalabras.txt echo "archivos de ventanas creados" # Todas las ventanas a un archivo b=0; for a in $(cat $lista); do let "b = $b+1"; awk -v v=$a '{print " " v " " $2 " " $1}' ventanas/$b.dat >> resultadosCC.out; done # Cambiar las palabras por números cp resultadosCC.out resultadosCCN.out b=0; for a in $(cat $lista); do let "b=$b+1"; sed -e "s/ $a / $b /" -e "s/ $a / $b /" resultadosCCN.out > resultsCCN2.out; mv -f resultsCCN2.out resultadosCCN.out; done