GNU/Linux >> Tutoriales Linux >  >> Linux

Frecuencia de palabras en texto en idioma no inglés:¿Cómo puedo combinar formas singulares y plurales, etc.?

Estoy clasificando francés palabras del idioma en algunos archivos de texto según frecuencia con un enfoque en insight en lugar de significación estadística. El desafío consiste en preservar los caracteres acentuados y lidiar con las formas de los artículos delante de las vocales (l' , d' ) en el contexto de dar forma a tokens de palabras para ordenar.

El tema de las palabras más frecuentes en un archivo toma muchas formas (1 | 2 | 3 | 4). Así que armé esta función usando GNU utilidades:

compt1 () {
for i in *.txt; do
    echo "File: $i"
    sed -e 's/ /
/g' <"$i" | sed -e 's/^[[:alpha:]][[:punct:]](.*)/1/' | sed -e 's/(.*)/L1/' | grep -hEo "[[:alnum:]_'-]+" | grep -Fvwf /path_to_stop_words_file | sort | uniq -c | sort -rn 
done
}

…que intercambia espacios por saltos de línea; recorta un carácter seguido de la puntuación que está al principio de la línea; luego convierte todo a minúsculas; usa este grep compacto construcción que coincide con los caracteres constituyentes de la palabra para crear tokens; luego elimina las palabras de parada, y finalmente está la clasificación habitual. El archivo de detención contiene un segmento con caracteres individuales, por lo que debe tener cuidado con la forma en que se usa, ¡pero el análisis proporcionado sobre cómo crear raíces para palabras en diferentes idiomas es realmente interesante!

Ahora, cuando comparo la frecuencia de una palabra significativa con la salida de grep -c directamente en los archivos, creo que está lo suficientemente cerca dentro de algún margen de error.

Preguntas :

  • ¿Cómo podría modificar esto para fusionar la frecuencia de los plurales con sus
    formas singulares, es decir, palabras que comparten un prefijo común con un sufijo de 1
    carácter variable?
  • Estoy tratando de evaluar si grep una parte en particular funcionaría con lo que hay en OSX ?

Respuesta aceptada:

Realmente no podrá hacer esto con un sed simplista texto. Asumo que querrá reducir a "formularios de citas", colapsando todas las inflexiones en un formulario base.

Eso significa que adjetivos como protegido, protegidos, protegido, protegidos todos cuentan como lo mismo, el adjetivo/participio base protegido . Del mismo modo, todas las flexiones del verbo proteger — como protegido, protegido, protegido, protegido, protegido, protegido, protegido , etc., todo se reduciría a ese verbo base.

Eso significa que necesitas saber cosas sobre la morfología flexiva del idioma. Peor aún, deberá comprender algo sobre la sintaxis real del lenguaje, incluidas las inflexiones y distinguir homógrafos.

he hecho muy enfoques simples para al menos la primera parte de esto usando Perl. Realmente es más bien un dolor en el trasero. Aquí hay una muestra del código que utilicé para generar claves de ordenación para ciudades y pueblos de la Península Ibérica:

       # 1st strip leading articles
          s/^L'//;    # Catalan
          s{ ^
            (?:
        # Castilian
                El
              | Los
              | La
              | Las

        # Catalan 
              | Els
              | Les         
              | Sa
              | Es

        # Gallego
              | O       
              | Os
              | A
              | As      
            ) 
            s+ 
          }{}x;
        # 2nd strip interior particles
          s/b[dl]'//g;   # Catalan
          s{ 
            b
            (?:
                el  | los | la | las | de  | del | y          # ES
              | els | les | i  | sa | es | dels               # CA 
              | o   | os  | a  | as  | do  | da | dos | das   # GAL
            )
            b
        }{}gx;

Eso elimina los artículos y las partículas para que no cuenten a los efectos de la clasificación. Pero tendrás que lidiar con formularios como l'autre con una llamada comilla rizada, que en realidad es U+2019 RIGHT SINGLE WOTATION MARK, la forma preferida para el apóstrofe. Los normalicé en rectos con s/’/'/g primero.

Relacionado:¿Diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?

Ah, y tendrás que lidiar con las codificaciones:MacRoman no es lo mismo que UTF-8 o ISO-8859-1, ni mucho menos.

Honestamente, probablemente quieras usar algo como el algoritmo de lematización Snowball, especificando el francés como idioma. Ciertamente Lingua::Stem::Snowball de Perl módulo sabe cómo hacer esto. Puede buscar módulos de Perl relacionados con la lingüística francesa utilizando esta consulta.

Pero la derivación solo lo llevará hasta cierto punto. Realmente no harás un buen trabajo hasta que apliques el análisis morfosintáctico, lo que significa que tienes que generar un análisis para las oraciones y asignar partes del discurso a cada elemento allí.

Esto requiere mucho más trabajo. La buena noticia es que existen herramientas dedicadas para esto, algunas de las cuales sí funcionan en francés. Pero esto realmente es un gran avance, porque ahora te has aventurado en los campos del procesamiento del lenguaje natural y la lingüística computacional. No hay un buen hogar para tales preguntas aquí, pero probablemente se puedan responder mejor en Linguistics.SE; No lo sé.


Linux
  1. ¿Cómo puede la tecnología en la nube potenciar el aprendizaje electrónico y el aprendizaje a distancia?

  2. ¿Cómo puedo obtener palabras entre las dos primeras instancias de texto/patrón?

  3. ¿Cómo puedo ordenar ls por propietario y grupo?

  4. ¿Cómo puedo revertir un chmod en el directorio etc?

  5. ¿Cómo puedo rasterizar todo el texto en un PDF?

Cómo comparar y fusionar archivos de texto en Linux

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

Cómo usar marcadores y realizar una selección de texto en Vim

Cómo buscar y reemplazar texto, palabra o cadena en un archivo

Cómo instalar y usar Sublime Text 4 en Linux

Cómo encontrar y reemplazar texto en Vim