En primer lugar familiarizarse con el análisis léxico y cómo escribir una especificación generador de escáner. Lea las presentaciones para usar herramientas como YACC, Lex, Bison o mi favorito personal, JFlex. Aquí defines lo que constituye un token. Aquí es donde aprendes acerca de cómo crear un tokenizador.
A continuación tiene lo que se llama una lista de semillas. El opuesto de la lista de detención generalmente se conoce como lista de inicio o léxico limitado. Lexicon también sería una buena cosa para aprender. Parte de la aplicación necesita cargar la lista de inicio en la memoria para poder consultarla rápidamente. La forma típica de almacenar es un archivo con una palabra por línea, luego lea esto al inicio de la aplicación, una vez, en algo así como un mapa. Es posible que desee aprender sobre el concepto de hash.
A partir de aquí, debe pensar en el algoritmo básico y las estructuras de datos necesarias para almacenar el resultado. Una distribución se representa fácilmente como una matriz dispersa bidimensional. Aprende los conceptos básicos de una matriz dispersa. No necesitas 6 meses de álgebra lineal para entender lo que hace.
Como está trabajando con archivos más grandes, recomendaría un enfoque basado en secuencias. No lea todo el archivo en la memoria. Léelo como una secuencia en el tokenizer que produce una secuencia de tokens.
En la siguiente parte del algoritmo, piense cómo transformar la lista de tokens en una lista que contenga solo las palabras que desee. Si lo piensas bien, la lista está en la memoria y puede ser muy grande, por lo que es mejor filtrar las palabras que no comienzan al principio.Entonces, en el punto crítico donde obtienes un token nuevo del tokenizer y antes de agregarlo a la lista de tokens, haz una búsqueda en la lista de palabras in-memory-start para ver si la palabra es una palabra de inicio. De ser así, guárdelo en la lista de tokens de salida. De lo contrario, ignórelo y pase al siguiente token hasta que se lea todo el archivo.
Ahora tiene una lista de tokens solo de interés. La cuestión es que no está mirando otras métricas de indexación como posición, caso y contexto. Por lo tanto, realmente no necesita una lista de todos los tokens. Realmente solo quieres una matriz dispersa de tokens distintos con conteos asociados.
Por lo tanto, primero cree una matriz dispersa vacía. Luego, piense en la inserción del token recién encontrado durante el análisis. Cuando ocurra, incremente su conteo si está en la lista o inserte un nuevo token con un conteo de 1. Esta vez, al final del análisis del archivo, tiene una lista de tokens distintos, cada uno con una frecuencia de al menos 1.
Esa lista ahora está en la memoria y puede hacer lo que quiera. Volcarlo en un archivo CSV sería un proceso trivial de iterar sobre las entradas y escribir cada entrada por línea con su recuento.
Por lo demás, echar un vistazo al producto no comercial llamado "puerta" o un producto comercial como TextAnalyst o los productos incluidos en http://textanalysis.info
Tengo curiosidad, ¿cuál es la lista de palabras? (y el tipo de textos) –
Artículos. La lista de términos son palabras clave del campo. – fdsayre