Full text
Grado en Matemáticas y Estadística TRABAJO FIN DE ESTUDIOS Introducción a la Minería de texto con ayuda de R Alejandro Lobato Cantos Sevilla, Octubre de 2023
Índice general Resumen........................................ iii Abstract........................................ iv ÍndicedeFiguras................................... v 1. Introducción a la minería de texto 1 1.1. Tareas de la minería de texto . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1. Reducción de dimensionalidad . . . . . . . . . . . . . . . . . . . . . 1 1.1.2. Extracción de información . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2.1. Reconocimiento de entidades nombradas . . . . . . . . . . 2 1.1.2.2. Extracción de relaciones . . . . . . . . . . . . . . . . . . . 3 1.1.3. Clasificación............................... 3 1.1.4. Resumendetextos ........................... 4 1.1.4.1. Puntuación de frases . . . . . . . . . . . . . . . . . . . . . 4 1.1.4.2. Selección de frases para el resumen . . . . . . . . . . . . . 5 1.1.5. Técnicas de agrupamiento . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.6. Análisis de sentimientos . . . . . . . . . . . . . . . . . . . . . . . . 6 2. Marco teórico 9 2.1. Reducción de dimensionalidad . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.1. Indexación Semántica Latente (LSI) . . . . . . . . . . . . . . . . . . 9 2.1.2. Análisis Latente de Dirichlet (LDA) . . . . . . . . . . . . . . . . . . 10 2.1.2.1. Conceptos previos sobre distribuciones . . . . . . . . . . . 10 2.1.2.2. ModeloLDA ......................... 11 2.1.2.3. Verosimilitud y estimación de parámetros . . . . . . . . . 12 2.1.2.4. Muestreo de Gibbs . . . . . . . . . . . . . . . . . . . . . . 13 2.2. Resumendetexto................................ 13 2.2.1. Representación de los temas . . . . . . . . . . . . . . . . . . . . . . 14 2.2.1.1. Palabras temáticas . . . . . . . . . . . . . . . . . . . . . . 14 2.2.1.2. Peso TF*IDF (frecuencia de términos frecuencia inversa dedocumento) ........................ 16 2.2.2. Selección de frases . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.2.1. Máxima Relevancia Marginal (MMR) . . . . . . . . . . . . 16 2.2.2.2. Resumen por selección global . . . . . . . . . . . . . . . . 17 2.3. Clasificación de textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.1. Selección de características . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.1.1. ÍndicedeGini......................... 18 2.3.1.2. Método estadístico basado en el Chi_Cuadrado χ2. . . . 19 2.3.1.3. Medida de información mutua . . . . . . . . . . . . . . . . 20 i
2.3.2. Métodos de clasificación . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.2.1. Vecinos más cercanos (KNN) . . . . . . . . . . . . . . . . 21 2.3.2.2. Máquinas de vector de soporte . . . . . . . . . . . . . . . 21 2.3.2.3. Árboles de decisión . . . . . . . . . . . . . . . . . . . . . . 21 2.4. Extracción de información . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4.1. Reconocimiento de entidades nombradas . . . . . . . . . . . . . . . 22 2.4.1.1. Aproximación a partir de reglas . . . . . . . . . . . . . . . 22 2.4.2. Aproximación estadística . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.2.1. Cadenas ocultas de Markov . . . . . . . . . . . . . . . . . 23 2.4.2.2. Campos Aleatorios Condicionales . . . . . . . . . . . . . . 25 3. Aplicación de la minería de texto en R 27 3.1. Resumendetexto................................ 27 3.2. Clasificación................................... 31 3.3. Reducción de dimensionalidad. . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3.1. Modeladodetemas........................... 36 3.3.2. Reducción de dimensionalidad y programas electorales . . . . . . . 39 3.4. Extracción de información . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.4.1. Reconocimiento de entidades nombradas . . . . . . . . . . . . . . . 43 3.4.2. Extracción de relaciones . . . . . . . . . . . . . . . . . . . . . . . . 44 3.5. Conclusiones................................... 48 A. Apéndice: Scripts de R 51 A.1.Resumendetextos ............................... 51 A.2.Clasificacióndetextos ............................. 53 A.2.1. Script clasificación RTextTools . . . . . . . . . . . . . . . . . . . . . 53 A.2.2. Script clasificación χ2.......................... 54 A.3. Reducción de dimensionalidad e identificación de temas . . . . . . . . . . . 57 A.3.1.LDA................................... 57 A.3.2. LSI en programas electorales . . . . . . . . . . . . . . . . . . . . . . 59 A.4. Extracción de información . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Bibliografía 63 ii
Resumen En este trabajo se ofrecen unos primeros pasos para introducirse en el campo de la minería de textos, desde una base teórica de las principales tareas hasta una implementación utilizando el software “R”. El objetivo principal es intentar dar una visión general de las tareas de las que se encarga esta rama así como representar algunas de sus aplicaciones. Los resultados y la teoría vienen de una diversidad de fuentes. A la hora de la implementación práctica utilizamos tanto aplicaciones construidas para este trabajo así como una serie de librerías específicas de R creadas para la minería de texto. Las subramas de la minería de texto que se desarrollan en este trabajo son la reducción de dimensionalidad, el resumen de textos, la clasificación de textos y la extracción de información. iii
Abstract In this project we offer some steps towards the learning of text mining, including both some base theory about the main tasks and practical applications using the “R” software. The main purpose is to give an overview of the task text mining takes care of and represent some of its applications. Both the theory and the results come from a variety of sources. For the practical applications we use both code created for this project as well as “R” libraries that include specific functions developed for text mining. The sub-branches disscused in this project are dimensionality reduction, text summarization, text classificaction and information extraction. iv
Índice de figuras 3.1. Programas de 9 partidos en 3D. . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2. Programas de 6 partidos en 3D. . . . . . . . . . . . . . . . . . . . . . . . . 43 v
Capítulo 1 Introducción a la minería de texto La minería de texto es una rama que proviene de la minería de datos cuya característica principal es que se enfoca en obtener información a partir de textos. Los textos empleados pueden tomar distintas formas, desde mensajes cortos como interacciones en redes sociales, mensajes de texto, correos electrónicos o reseñas de productos hasta textos más elaborados y de mayor longitud como libros, páginas web o artículos por ejemplo. El papel de la minería de texto es el de recaudar información de estas fuentes, las cuales son más difíciles de estudiar con técnicas estándares de minería de datos. Esto se debe a que la información está dispuesta de una forma distinta a la usual y como mínimo hace falta realizar transformaciones para empezar a trabajar. Por ello los procedimientos habituales no son eficaces a la hora de estudiar los textos o es necesario modificarlos para que funcionen dentro de este contexto. 1.1. Tareas de la minería de texto Dentro de la Minería de texto existe una gran variedad de tareas a realizar. Desde tareas de limpieza y selección, hasta tareas de clasificación, reconocimiento de términos y análisis de sentimientos o ideas presentes en un texto. En este apartado presentaremos algunas de estas tareas y expondremos algunas de los procedimientos empleados para resolverlas. 1.1.1. Reducción de dimensionalidad La reducción de la dimensionalidad es una técnica de minería de texto que se utiliza para reducir la cantidad de características o variables que se tienen en cuenta en un conjunto de datos, sin perder información relevante. En otras palabras, se trata de simplificar los datos para poder procesarlos y analizarlos de manera más eficiente. En el contexto de la minería de texto, la reducción de la dimensionalidad se utiliza para manejar conjuntos de datos que contienen un gran número de palabras, términos o características, lo que puede dificultar el procesamiento y análisis de la información, esto es especialmente útil como paso previo a algunos de los procesos anteriormente mencionados como la clasificación o el clustering. La reducción de la dimensionalidad permite representar los datos en un espacio de menor dimensión, lo que facilita el análisis y la visualización de los mismos. 1
Capítulo 2 Marco teórico En esta sección detallaremos algunos de los procedimientos más comunes en cada una de las áreas mencionadas de la minería de texto. Ofreceremos un esquema general de los procesos utilizados así como métodos específicos utilizados para los cálculos y una breve base teórica previa donde sea necesario. 2.1. Reducción de dimensionalidad La reducción de dimensionalidad es una técnica utilizada en la minería de texto para abordar el desafío de trabajar con datos de alta dimensionalidad. La reducción de dimensionalidad tiene como objetivo disminuir la cantidad de características o dimensiones en el conjunto de datos, al tiempo que se mantiene la información relevante y significativa. Esto se logra mediante técnicas que seleccionan un subconjunto de características importantes o transforman los datos originales a un espacio de menor dimensión. Existen muchas técnicas asociadas a la reducción de dimensionalidad pero aquí trataremos solo 2, el LSI (Latent Semantic Indexing) y el LDA (Latent Dirichlet Allocation). La reducción de dimensionalidad en la minería de texto ofrece varios beneficios, como la reducción del costo computacional, la eliminación de ruido o características irrelevantes, la visualización de datos en espacios de menor dimensión y la mejora del rendimiento de los algoritmos de clasificación o agrupamiento. 2.1.1. Indexación Semántica Latente (LSI) El LSI es un método de indexación automática que consiste en proyectar los textos y documentos de una matriz término-documento en un espacio de menor dimensión. Para ello utiliza la descomposición en valores singulares y utiliza estos vectores para construir una matriz aproximada de menor rango con la que es más sencillo trabajar. Definición 2.1.1 Sea X la matriz término-documento de dimensión W x M de un corpus donde, la d-ésima columna Xd representa el documento d y la v-ésima fila Tv representa al término v. Sea la descomposición en valores singulares de X: 9
2.1. REDUCCIÓN DE DIMENSIONALIDAD X=UΣVT, donde las matrices UyVson ortonormales y Σes la matriz diagonal: Σ = σ1 ... σmin(W,M) Donde los términos σ1, σ2, ..., σmin(W,M) son los valores singulares de la matriz X . Sin pérdida de generalidad, asumimos que los valores singulares están ordenados de mayor a menor. Definimos la matriz término-documento aproximada ˆ Xde rango K como: ˆ X=ˆ Uˆ Σˆ VT=hˆ U1... ˆ UKi ˆσ1 ... ˆσK hˆ VT 1... ˆ VT Ki Esta matriz se puede obtener mediante una descomposición parcial manteniendo los vectores singulares correspondientes a los K mayores valores singulares[23]. Esta descomposición nos permite representar documentos y vectores en un espacio K-dimensional. Para un documento ˆ Xdse tiene la relación: Xd=ˆ Uˆ Σˆ Xd Por otro lado también tenemos la siguiente relación para los términos: Tv=ˆ Uˆ Σˆ Tv A partir de estas relaciones podemos obtener las proyecciones de documentos y términos en el espacio semántico creado[6]. Con estas aproximaciones ˆ Xd y ˆ Tv podemos calcular similaridades entre términos y/o documentos a través de la similaridad cosenoidal. 2.1.2. Análisis Latente de Dirichlet (LDA) El LDA es una técnica probabilística utilizada para modelar los distintos temas o grupos que aparecen en un documento. Esta técnica se basa en distribuciones multinomiales y de Dirichlet para dar probabilidades de cada tema según las frecuencias de las palabras[1]. 2.1.2.1. Conceptos previos sobre distribuciones Definición 2.1.2 La distribución de Dirichlet de orden K con vector de parámetros Y tiene una función de densidad dada por : 10 CAPÍTULO 2. MARCO TEÓRICO
2.1. REDUCCIÓN DE DIMENSIONALIDAD D(X;Y) = Γ(PK i=1 yi) QK i=1 Γ(yi) K Y i=1 xyi−1 i Por otro lado tenemos la distribución multinomial: Definición 2.1.3 Dado un experimento multinomial con K casos y probabilidades yk para cada caso, la función de probabilidad viene dada por: M(X;Y) = n! x1!...xk! K Y i=1 yxi i De donde obtenemos que M(X;Y)∝ K Y i=1 yxi i Ahora veamos la relación que hay entre estas[22]: Teorema 2.1.1 La distribución de Dirichlet es la distribución conjugada de la distribución multinomial. Demostración. Nuestra distribución a posteriori sería: P(p|x)∝P(x|p)∗P(p) donde P ( x|p )es la distribución multinomial y P ( p )es la función a priori, en nuestro caso la distribución de Dirichlet. Entonces tenemos que: P(p|x)∝n! x1!...xk! K Y i=1 pxi i∗Γ(PK i=1 yi) QK i=1 Γ(yi) K Y i=1 pyi−1 i∝ ∝ K Y i=1 pxi i∗ K Y i=1 pyi−1 i= K Y i=1 pxi+yi−1 i, Lo cual es proporcional a una distribución de Dirichlet de parámetros xi + yi por lo tanto tenemos que la función a priori y la posteriori pertenecen a la misma familia por lo que tenemos lo que queríamos probar. Por lo tanto la distribución multinomial es la conjugada de la de Dirichlet. Definición 2.1.4 Un proceso generativo es un algoritmo que describe como se se selecciona una respuesta. 2.1.2.2. Modelo LDA Tras exponer estas relaciones entre las distribuciones pasamos a describir como funciona el método LDA. Este es un modelo generativo en el que se asume un proceso generativo para cada documento ddescrito de la siguiente forma[4]: CAPÍTULO 2. MARCO TEÓRICO 11
2.1. REDUCCIÓN DE DIMENSIONALIDAD 1.Se elige una distribución multinomial θ a partir de una distribución Dirichlet de parámetro α. θi∼ D(α);p(θi|α) = Γ(Wα) [Γ(α)]W W Y v=1 θα−1 iv 2.Se elige una distribución multinomial Φa partir de una distribución Dirichlet de parámetro β. Φi∼ D(β);p(Φi|β) = Γ(Wβ) [Γ(β)]W W Y v=1 φβ−1 iv 3. Para cada palabra del documento wn: Se elige un tema zn~ Multinomial(θ). zdn ∼ M(θ|α);p(zdn =i|θd) = θdi - Se elige una palabra wn obtenida a través de la distribución de palabras condicionado al tema elegido para esa palabra. wdn ∼ M(φzdn );p(wdn =v|zdn =i, φi) = φiv Por tanto el modelo nos permite encontrar patrones de co-ocurrencia entre las palabras y los temas. Es decir, si, por ejemplo, tenemos que para un término v y un tema i la probabilidad p ( w = v|z = i )es alta; entonces si nos encontramos con un nuevo documento que contiene la palabra v tendrá una probabilidad aumentada de haber sido generado por el tema i . Esto a su vez aumenta la probabilidad de que los términos presentes en el documento hallan sido generados por el tema i. 2.1.2.3. Verosimilitud y estimación de parámetros Como nuestro objetivo con el LDA es el de encontrar un modelo que represente como se generan los documentos de un cierto corpus es necesario encontrar un conjunto de parámetros que optimizan la probabilidad de generar los documentos, para evaluar lo bueno que es un conjunto de parámetros la medida que se suele utilizar es su probabilidad empírica que es una expresión de verosimilitud. Definición 2.1.5 Probabilidad Empírica Dado un modelo LDA se define su probabilidad empírica Lcomo: L= M Y d=1 N Y n=1 p(wdn|zdn,Φ)p(zdn|θd)p(θd|α)p(Φ|β) = φzwθdz Γ(Wβ) [Γ(β)]W W Y v=1 φβ−1 v El problema con esta verosimilitud es que no se puede optimizar de forma directa ya que la asignación de temas para cada palabra zdn no es observable, vemos los términos pero no el tema que se le asignó según el proceso. Por tanto se plantea otra forma de estimar las distribuciones Φyθ. Esta forma es el muestreo de Gibbs. 12 CAPÍTULO 2. MARCO TEÓRICO
2.2. RESUMEN DE TEXTO 2.1.2.4. Muestreo de Gibbs El objetivo de este procedimiento es hallar un estimador de la distribución de temas dentro de un documento y la distribución de palabras dentro de un tema, para aplicar el algoritmo necesitamos fijar los parámetros α y β así como el número de temas T . También necesitaremos la expresión de la probabilidad condicionada P ( Zi|Z−1,|w ), esta se puede obtener a partir de las distribuciones mencionadas previamente [10], obtenemos: P(zi=j|z−i,w)∝n(wi) −i,j +β n(·) −i,j +Wβ n(di) −i,j +α n(di) −i,·+Tα,[1] donde α y β representan los parámetros de las distribuciones Dirichlet a priori, W y T el número de palabras y de temas distintos respectivamente y n(xi) −i,j es el recuento de las ocurrencias de x para el tema j en todos los elementos de la iteración menos el i-ésimo. Es decir, para cada palabra generada la probabilidad de su tema, condicionado al resto de asignaciones y a la palabra, es proporcional al producto de estos dos cocientes. El primero representa la probabilidad de la palabra wi bajo el tema j mientras que el segundo representa la probabilidad del tema j en el documento di . Estos recuentos son los únicos elementos necesarios para aplicar el algoritmo por lo que se puede ejecutar de forma eficiente. El algoritmo funciona de la siguiente manera. A las variables zi se le dan un valor inicial de forma aleatoria dentro de la lista de temas 1,2, ..., T . En cada iteración del proceso a cada variable zi se le asigna un tema a través de la función de probabilidad [1]. Después de suficientes iteraciones se registran los valores de las zi y los utilizamos para estimar las siguientes distribuciones: ˆ θ(w) j=n(w) j+β n(·) j+Wβ Este es el estimador de la probabilidad de generar la palabra w dentro del tema j. ˆ θ(d) j=n(d) j+α n(d) ·+Tα Este es el estimador de la probabilidad de obtener el tema j en el documento d. Estos dos estimadores son los que nos dan la interación entre tema y documento y palabra documento lo cual nos permite asignar a cada palabra su tema más probable y por consiguiente el tema principal de cada documento. 2.2. Resumen de texto El objetivo del resumen de texto es construir de forma automática el resumen de un texto a partir del mismo. Dentro de las técnicas de resumen de texto nos centraremos en las técnicas de extracción, que son aquellas que utilizan las propias palabras y frases presentes en el texto para elaborar el resumen. Existen otras técnicas que fueron creadas para un resumen más abstracto pero no las discutiremos. CAPÍTULO 2. MARCO TEÓRICO 13
2.2. RESUMEN DE TEXTO Dentro de las técnicas de resumen extractivas podemos encontrar tres fases, una primera fase en la que se le da un valor a las palabras del texto según lo representativas que son dentro del texto. Una segunda en la que a partir de estas palabras se le asigna un valor a cada una de las frases del texto y finalmente una tercera en la que a partir de estas puntuaciones se seleccionan frases del texto para crear el resumen. Las formas de puntuar las frases en la segunda fase suele estar estrechamente ligada a la forma de puntuar las palabras por lo que discutiremos ambas fases a la vez en la siguiente sección. 2.2.1. Representación de los temas Dentro de esta sección veremos varios métodos para obtener una valoración de que palabras aportan mayor significado dentro de un texto. 2.2.1.1. Palabras temáticas Esta técnica consiste en hallar palabras altamente descriptivas del texto a través del test del ratio de log-verosimilitud. Para esta técnica es necesario una recopilación de textos para poder compararlo con el texto a resumir. Estas palabras, las cuales se denominan palabras temáticas son aquellas que son poco frecuentes en el corpus pero son muy frecuentes en el texto, utilizando el test podemos hallar que palabras son temáticas y cuales no. Una vez halladas estas palabras, las frases obtendrán una puntuación según el número de palabras temáticas que contengan o según la proporción de estas. Utilizar la cantidad total premia más las frases más largas mientras que utilizar la proporción premia la concentración de estas palabras. Para aplicar el test necesitaremos de algunas definiciones previas. Definición 2.2.1 Definición Definimos como palabra una sucesión finita de caracteres alfabéticos. Definición 2.2.2 Definición Definimos como texto una sucesión de palabras w1, w2, ..., wn separadas por espacios. Definición 2.2.3 Sea B un conjunto de textos y W(B) el conjunto de palabras presentes en ese conjunto se define la matriz de términos y documentos como la matriz de dimensiones |W(B)|x|B| donde las filas representan los textos de B, las columnas las palabras de W(B) y cada elemento (i,j) es el número de veces que aparece la palabra j en el texto i. Para comprobar que una palabra w es mas frecuente en un texto t usaremos el siguiente contraste de hipótesis: H0 : P(w|t) = P(w|B) H1 : P(w|t)6=P(w|B) 14 CAPÍTULO 2. MARCO TEÓRICO
2.2. RESUMEN DE TEXTO donde B es un conjunto de textos t1, ..., tm. Teorema 2.2.1 Dado un conjunto de textos D, una palabra w y un texto t rechazaremos el anterior contraste de hipótesis para un nivel de confianza de αsi : −2log(λ)> χ2 1,1−α con: λ=(k N)k(1 −k N)N−k (k1 n1)k1(1 −k1 n1)n1−k1(k2 n2)k2(1 −k2 n2)n2−k2 donde N=n1+n2yk=k1+k2con: n1: número de palabras en el texto. n2: número de palabras en el resto del corpus. k1: apariciones de la palabra w en el texto. k2: apariciones de la palabra w en el resto del corpus. Demostración. La aparición de la palabra w en un texto t se puede modelar como un modelo binomial de n=|wi|intentos con probabilidad p. Por tanto la función de verosimilitud para una probabilidad p viene dada por: L(p;n, k) = N k!pk(1 −p)N−k Y el test del ratio de verosimilitud vendrá dado por: λ=maxH0n1 k1pk1 1(1 −p1)n1−k1n2 k2pk2 2(1 −p2)n2−k2 maxp1,p2n1 k1pk1 1(1 −p1)n1−k1n2 k2pk2 2(1 −p2)n2−k2 Como H0 es equivalente a p1=p2tenemos que: λ=maxpn1 k1n2 k2pk(1 −p)N−k maxp1,p2n1 k1pk1 1(1 −p1)n1−k1n2 k2pk2 2(1 −p2)n2−k2 En la prática este máximo se alcanzará para p = k N , p1 = k1 n1 y p2 = k2 n2 . Con el estadístico λ calculado habrá que calcular − 2 log ( λ )que se comporta como una χ2 de 1 grado de libertad [@dunning1994accurate]. Por lo tanto para el nivel α fijado tendremos que rechazamos la hipótesis nula si −2log(λ)> χ2 1,1−α Las palabras para las cuales se rechace la hipótesis nula serán las que se podrán tomar como palabras temáticas. CAPÍTULO 2. MARCO TEÓRICO 15
2.2. RESUMEN DE TEXTO 2.2.1.2. Peso TF*IDF (frecuencia de términos frecuencia inversa de documento) Dentro de los métodos frecuentistas encontramos principalmente el de la probabilidad de las palabras y el TD*IDF, hablaremos de este último ya que no requiere una lista previa de palabras de parada (estas son palabras muy comunes que deben eliminarse para poder realizar el análisis). Definición 2.2.4 Definición Sea B un conjunto t1, t2, ..., tD de textos y w una palabra, entonces definimos la TD*IDF para un documento t como: TF ∗IDFw=c(w)log(D d(w)) donde c(w) es el número de veces que aparece w en el documento t y d(w) es el número de documentos de B donde aparece la palabra w. Normalmente emplearemos un conjunto de documentos que sean de una temática parecida para que las palabras aparezcan en repetidas ocasiones y el análisis sea más fiable. Además esta medida penaliza las palabras muy comunes que no aportan significado específico. Esto hará que las palabras que sean muy comunes en D tendrán TF*IDF cercano a 0 porque si d ( w ) ≃D entonces log ( D d(w) ) ≃ 0y por tanto TF ∗IDF ≃ 0. Por tanto esto haría que las palabras muy comunes sean ignoradas al dar puntuación a la frase a la que pertenecen mientras que las palabras muy poco comunes tendrán un valor muy alto si aparecen al menos una vez en el texto. 2.2.2. Selección de frases Una vez se tienen puntuadas las frases se pasa a la elección donde se suele elegir frase a frase y se van añadiendo según una longitud máxima establecida[ 5 ]. También una vez elegida una frase es importante penalizar otras frases que contengan la misma información para que el resumen pueda incluir la mayor cantidad de información distinta pertinente. Veremos dos métodos de selección. 2.2.2.1. Máxima Relevancia Marginal (MMR) Empecemos definiendo la MMR [15]. Definición 2.2.5 Sea j una frase. La puntuación según el MMR en el momento t de la frase j será: mt j=λS(sj, D)−(1 −λ)maxe∈EtR(sj, e) donde λ∈ [0 , 1] es el peso entre lo significativa que es la frase y la similaridad que tiene con las frases ya elegidas. S ( sj, D )es lo significativa que es la frase j para el 16 CAPÍTULO 2. MARCO TEÓRICO
2.3. CLASIFICACIÓN DE TEXTOS documento D. Et es el conjunto de frases ya escogidas y R ( sj, e )es la similaridad entre la frase sjy la frase e. Definición 2.2.6 Definición Sean dos vectores A, B se define la similaridad cosenoidal como: cosθ =A·B |A||B| Para aplicar esto a 2 frases SA , SB tomaremos el conjunto D formado por cada una de las distintas palabras presentes entre ambos vectores y crearemos los vectores A y B tales que sus elementos son el número de veces que aparecen cada una de las palabras de D. Aplicando la similaridad cosenoidal de esta manera como función R ( sj, e )obtenemos una forma rápida y efectiva de medir la similaridad de frases. La aplicación de esta medida en la práctica se verá con el algoritmo utilizado en R posteriormente en este trabajo. 2.2.2.2. Resumen por selección global Aunque el método anterior es efectivo a veces puede tener problemas al elegir como primera frase una larga e informativa pero que no permitirá incluir otras frases en el resumen. Por este tipo de casos existe esta opción en la que se plantea como un problema de optimización con algunas restricciones como la minimización de la repetición o maximizar la información. El problema con esta aproximación es que, en general, este es un problema de dificultad NP por lo que hará falta hallar soluciones aproximadas pero aún así obtienen resultados incluso mejores que los otros métodos [8]. 2.3. Clasificación de textos La clasificación de textos comparte procedimientos con los problemas de clasificación de la minería de datos convencional pero encuentra una gran diferencia y es el gran número de variables que contiene un texto. Esto es así ya que en una de las aproximaciones más comunes se representan los textos como un conjunto de palabras con las frecuencias asociadas a cada documento. Como las variables a considerar es el número de apariciones de cada una de las palabras presenten en el conjunto de los textos a clasificar es fácil llegar a tener cientos de miles de palabras a priori antes de los preprocesamientos, por ello encontraremos dos fases. Una primera donde se seleccionan las palabras que utilizaremos como variables y una segunda fase donde se emplearán métodos de clasificación estándar para crear modelos y poder aplicarlo a textos que no vengan marcados. 2.3.1. Selección de características Las técnicas más comunes dentro de la selección de características son el “Stemming” y la eliminación de palabras de parada. El stemming consiste en agrupar distintas palabras CAPÍTULO 2. MARCO TEÓRICO 17
2.4. EXTRACCIÓN DE INFORMACIÓN bj(vk) = P(ot=vk|qt=j) Entonces diremos que el Modelo Oculto de Markov es la tupla (Q,V,π,R,S) En nuestro caso tendremos que el conjunto V hace referencia al conjunto de posibles palabras a observar mientras que Q son los posibles estados que definamos. Por ejemplo uno de los modelos empleados “Nymble”[ 3 ], utiliza varios tipos de entidades nombradas y NaN (Not a Name) como posibles estados más un estado “principio de frase” con probabilidad 1 de ser el inicial y un estado “final de frase”. El sistema Nymble modela las probabilidades de la siguiente forma: Se modelan las etiquetas según la etiqueta anterior y la palabra anterior. Si una palabra es la primera de su entidad nombrada se modela condicionada a la etiqueta actual y la anterior. Si una palabra no es la primera de su entidad nombrada se modela según la palabra anterior. Además el sistema asume que existe una palabra “final” de cada entidad nombrada y modela su probabilidad. Dado un conjunto de frases etiquetadas con entidades nombradas, Nymble realiza una estimación de máxima verosimilitud para encontrar los parámetros del modelo que maximizan p ( X, Y ), donde X representa todas las frases en los datos de entrenamiento e Y representa sus secuencias de etiquetas verdaderas. Para estimar las probabilidades utilizan las siguientes fórmulas: P(NC|NC−1) = c(NC, NC−1, w−1) c(NC−1, w−1) Para la probabilidad de una etiqueta. P(wprimera|NC, NC−1) = c(NC, NC−1, wprimera) c(NC−1, NC) Para la probabilidad de la primera palabra de una entidad nombrada. P(w|w−1, NC) = c(NC, w, w−1) c(NC, w−1) Para la probabilidad de una palabra intermedia de una entidad nombrada. Donde NC denota una clase de entidad y c() es el conteo de casos de esa combinación en el corpus de entrenamiento. Finalmente durante la predicción Nymble utiliza los parámetros del modelo para encontrar el vector y que maximiza la probabiliad de p ( x, y )para el vector de palabras x dado. 24 CAPÍTULO 2. MARCO TEÓRICO
2.4. EXTRACCIÓN DE INFORMACIÓN 2.4.2.2. Campos Aleatorios Condicionales Este método considera que las etiquetas yi no solo dependen de las etiquetas anteriores sino también de las futuras. Definición 2.4.3 Sea x = ( x1, ..., xn )el vector secuencia de las palabras y sea y = ( y1, ..., yn )el vector de las etiquetas. Según el modelo de campos aleatorios condicionales la p(x|y)será: p(x|y) = 1 Z(x)exp(X iX j λjfj(yi, yi−1, x, i)), donde Z ( x )es un factor de normalización de todas las posibles secuencias de etiquetas: Z(x) = X y0 exp(X iX j λjfj(y0 i, y0 i−1, x, i)) Para entrenar este modelo de nuevo utilizamos máxima verosimilitud para obtener los parámetros que maximizen p(Y|X). Este modelo ha sido utilizado para obtener tasas de acierto de 84% en textos en inglés[16]. En el siguiente capítulo utilizaremos el software “R” para implementar alguno de los procesos y tareas que hemos visto en este capítulo. CAPÍTULO 2. MARCO TEÓRICO 25
Capítulo 3 Aplicación de la minería de texto en R En este apartado vamos a poner en uso algunos de los métodos mencionados en el capítulo anterior viendo como estos métodos pueden ser implementados en R. Algunos métodos los implementaremos sin utilizar ninguna librería específica, empleando herramientas comunes para ver como se pude construir desde la base; pero otros los desarrollaremos utilizando librerías específicas que tienen funciones capaces de facilitar mucho la implementación. La versión de R utilizada es R version 4.2.1 (2022-06-23 ucrt), mientras que el equipo donde se ha ejecutado el código cuenta con un procesador AMD Ryzen 3 2200G with Radeon Vega y con 8 GB de memoria RAM. 3.1. Resumen de texto Nuestro objetivo en esta sección es obtener resúmenes automáticos de noticias, para ello utilizaremos el método del estadístico TF*IDF para asignar los pesos a las palabras y la máxima relevancia marginal para elegir las frases. Veamos los pasos. En primer lugar el conjunto de datos empleados para resumir son 50 artículos sobre adquisiciones de empresas, el conjunto de datos lo hemos obtenido de la librería “tm”[?]. Estos documentos son relativamente cortos pero cuentan con suficientes frases como para que tenga sentido el resumen de los mismos. La función “TermDocumentMatrix” de la librería tm[?] nos permite obtener la matriz de documentos-artículos a partir de la lista de artículos y asignarle a cada palabra su TF*IDF. También nos permite realizar algunas funciones de limpieza de datos como la eliminación de palabra de parada, signos de puntuación y realizar “stemming”. 27
3.1. RESUMEN DE TEXTO 10 110 12 44 45 68 96 abil 0.0000000 0.0168473 0.000000 0 0.0000000 0.0000000 0 accept 0.0000000 0.0000000 0.000000 0 0.0000000 0.0000000 0 access 0.0000000 0.0000000 0.000000 0 0.0000000 0.0000000 0 accompani 0.0000000 0.0168473 0.000000 0 0.0000000 0.0000000 0 accord 0.0000000 0.0138623 0.000000 0 0.0000000 0.0000000 0 acquir 0.0111674 0.0000000 0.000000 0 0.0065846 0.0423009 0 acquisit 0.0000000 0.0065207 0.087377 0 0.0000000 0.0000000 0 acr 0.0000000 0.0000000 0.000000 0 0.0000000 0.0000000 0 act 0.0000000 0.0000000 0.000000 0 0.0000000 0.0000000 0 action 0.0000000 0.0000000 0.000000 0 0.0000000 0.0000000 0 Aquí podemos ver un extracto de la matriz término-documento donde cada fila corresponde a una palabra (en este caso se puede ver que el stemming ha dejado las raíces de algunas de ellas) y las columnas corresponden a los documentos nombrados a partir de su ID. Una vez que tenemos esta matriz podemos definir varias funciones que nos permiten iterar el proceso y aplicarlo rápidamente a los 50 documentos mediante el siguiente bucle: El texto original sería este: ## Computer Terminal Systems Inc said ## it has completed the sale of 200,000 shares of its common ## stock, and warrants to acquire an additional one mln shares, to ## <Sedio N.V.> of Lugano, Switzerland for 50,000 dlrs. ## The company said the warrants are exercisable for five ## years at a purchase price of .125 dlrs per share. ## Computer Terminal said Sedio also has the right to buy ## additional shares and increase its total holdings up to 40 pct ## of the Computer Terminal's outstanding common stock under ## certain circumstances involving change of control at the ## company. ## The company said if the conditions occur the warrants would ## be exercisable at a price equal to 75 pct of its common stock's ## market price at the time, not to exceed 1.50 dlrs per share. ## Computer Terminal also said it sold the technolgy rights to ## its Dot Matrix impact technology, including any future ## improvements, to <Woodco Inc> of Houston, Tex. for 200,000 ## dlrs. But, it said it would continue to be the exclusive ## worldwide licensee of the technology for Woodco. ## The company said the moves were part of its reorganization ## plan and would help pay current operation costs and ensure ## product delivery. ## Computer Terminal makes computer generated labels, forms, ## tags and ticket printers and terminals. ## Reuter Mientras que el resumen sería este: The company said if the conditions occur the warrants would be exercisable at a price 28 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.1. RESUMEN DE TEXTO equal to 75 pct of its common stock’s market price at the time, not to exceed 1.50 dlrs per share. Computer Terminal also said it sold the technolgy rights to its Dot Matrix impact technology, including any future improvements, to of Houston, Tex. for 200,000 dlrs. Reuter Computer Terminal makes computer generated labels, forms, tags and ticket printers and terminals. Computer Terminal Systems Inc said it has completed the sale of 200,000 shares of its common stock, and warrants to acquire an additional one mln shares, to <Sedio N.V.> of Lugano, Switzerland for 50,000 dlrs. Como podemos ver en este ejemplo se mantiene la información sobre la compañía de venta, el precio y la venta de los derechos de su tecnología. También este código nos permitiría realizar resúmenes más largos ajustando el parámetro de longitud mínima del resumen además de que podríamos darle un peso distinto a la redundancia de las frases ajustando el parámetro λ. Para realizar una comparación más detallada aplicaremos esto mismo a unas pocas noticias en español. El texto es el siguiente: La multiplicación y el agravamiento de las crisis actuales están ejerciendo una presión todavía mayor sobre la salud mental de las personas y los servicios disponibles para apoyarlas. La Organización Mundial de la Salud (OMS) está trabajando codo con codo con los países para lograr este objetivo. En Chile, el Gobierno ha asumido el reto de que nadie vuelva a tener que afrontar solo sus necesidades de salud mental. Pensando en este objetivo, mediante la estrategia Construyendo Salud Mental se está fortaleciendo el liderazgo en este ámbito en todos los sectores, mejorando la prestación de servicios y el apoyo en emergencias y reforzando datos, pruebas e investigaciones en la materia. El resumen generado es el siguiente: La multiplicación y el agravamiento de las crisis actuales están ejerciendo una presión todavía mayor sobre la salud mental de las personas y los servicios disponibles para apoyarlas. Cada vez más personas padecen los efectos persistentes de la pandemia de covid, el repunte de las emergencias relacionadas con el clima y las consecuencias constantes de conflictos y desplazamientos de muchas regiones del mundo. Mientras tanto, sigue habiendo estigmatización y discriminación contra las personas con problemas de salud mental y discapacidades psicosociales en nuestras escuelas, lugares de trabajo y comunidades. Es de esperar que la falta de la atención y el apoyo de calidad necesarios para hacer frente a las necesidades de salud mental aumente como consecuencia de la cantidad de personas que viven con una afección de salud mental —hasta mil millones de personas (uno de cada ocho de nosotros)— y de la persistente y tradicional falta de inversión en servicios de salud en ese campo: las consecuencias para la salud, la felicidad y el bienestar de millones de personas son fáciles de predecir. La pandemia de covid expuso las vulnerabilidades de los sistemas de salud mental a nivel mundial y agravó problemas presentes en ese momento y reveló otros nuevos. En Chile, como en muchos países, las repercusiones de la pandemia en la salud mental han sido significativas. El aislamiento, la incertidumbre y la perturbación de la vida cotidiana afectaron a personas y comunidades, lo que puso de manifiesto la importancia de contar con sistemas de apoyo resilientes. CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 29
3.1. RESUMEN DE TEXTO Teniendo en cuenta todo lo que ha sucedido en este siglo, tenemos que transformar la concepción y el modo de actuación sobre la salud mental, con miras a mejorarla. Necesitamos cambiar nuestras actitudes para dar prioridad a la salud mental como parte integral de nuestra salud y bienestar, así como en cuanto derecho humano básico y factor contribuyente fundamental para la salud pública, el bienestar social y el desarrollo sostenible. Debemos fortalecer la prestación de servicios de atención de salud mental para que todo el espectro de necesidades al respecto quede cubierto por una red comunitaria de apoyo y servicios accesibles, asequibles y de calidad. La Organización Mundial de la Salud (OMS) está trabajando codo con codo con los países para lograr este objetivo. La Iniciativa Especial de la OMS sobre Salud Mental es un buen ejemplo de cómo el aumento de la capacidad en el nivel de la atención primaria de salud puede mejorar el acceso a servicios para las personas que más los necesitan. Gracias a la Iniciativa Especial, en los nueve países participantes se ha ampliado el acceso a servicios locales de salud mental, inexistentes hasta el momento, a 40 millones de personas desde 2019. Aunque el sector de la salud tiene mucho que aportar, no puede trabajar solo. Como expusieron los Ministros en la Cumbre Mundial sobre Salud Mental organizada la semana pasada por el Gobierno de la Argentina, la transformación de la atención de la salud mental requiere un planteamiento pangubernamental y pansocial de promoción, protección y atención de la misma. También debemos reorganizar los entornos que influyen en la salud mental, de manera que se reduzcan los riesgos y se fortalezcan los factores de protección para que todas las personas, independientemente de quiénes sean, tengan las mismas oportunidades de prosperar y alcanzar el nivel más alto posible de bienestar. En Chile, el Gobierno ha asumido el reto de que nadie vuelva a tener que afrontar solo sus necesidades de salud mental. Pensando en este objetivo, mediante la estrategia Construyendo Salud Mental se está fortaleciendo el liderazgo en este ámbito en todos los sectores, mejorando la prestación de servicios y el apoyo en emergencias y reforzando datos, pruebas e investigaciones en la materia. Un factor fundamental es la integración de los servicios de salud mental en la atención primaria y en los centros comunitarios, lo que posibilita su abordaje integral, junto los servicios sociales a nivel municipal. También tiene como objetivo la prevención del suicidio, que es un importante problema de salud pública dada su alta carga entre los jóvenes de todo el mundo: es la segunda causa de muerte entre las personas de 15 a 24 años. Las estrategias ambiciosas encaminadas a proteger y mejorar la salud mental requieren nuevos niveles de liderazgo y compromiso político, así como asignaciones mucho más sólidas de recursos en los sectores de la salud y en otros sectores. Como se ha visto en Chile, por ejemplo, la atención y el compromiso a largo plazo con la salud mental de toda la población pueden generar beneficios reales y considerables a lo largo del tiempo. Hay, sin embargo, demasiados países en los que todavía es necesario tomar más medidas para que las personas reciban la atención adecuada y de calidad que necesitan. Tras celebrar este martes el Día Mundial de la Salud Mental, centrado su defensa como derecho humano, es importante recordar el elevado número de personas que siguen 30 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.2. CLASIFICACIÓN sufriendo coerción, malos tratos y descuido en los servicios de salud mental y a los que se les niega el derecho a opinar sobre su tratamiento. Tenemos la responsabilidad colectiva de que, en el marco del tratamiento y los servicios de esa salud, se respeten los derechos humanos de las personas y se apoye su recuperación. Para ayudar a los países en este sentido, la OMS y la Oficina del Alto Comisionado de las Naciones Unidas para los Derechos Humanos acaban de publicar nuevas orientaciones transformadoras sobre salud mental, derechos humanos y legislación, que ayudarán a los países a que sus leyes y políticas sobre este ámbito de la salud estén en consonancia con las normas internacionales de derechos humanos. Hacemos un llamamiento a las personas y comunidades para que reconozcan la salud mental como un derecho humano universal, mejoren sus conocimientos al respecto, sean conscientes del problema y actúen en la promoción y protección de la salud mental de todas las personas, y a los gobiernos para que tomen las medidas necesarias con las que lograr que todas las personas puedan alcanzar el nivel más alto posible de salud mental. Este resumen vemos que contiene información relevante acerca de los temas pero también incluye información muy específica que no es tan relevante, como la frase acerca de la situación particular de Chile, así como un poco de repetición de la información y que no presenta alguna de las frases que contienen información importante como el penúltimo párrafo del texto. 3.2. Clasificación El problema de clasificación que trataremos es la clasificación automática en una serie de temas preestablecidos de leyes a partir del nombre de la ley. Para ello trabajaremos con un conjunto de textos proveniente del paquete “RTextTools”[?] que contiene el nombre de 4449 leyes aprobadas por el congreso de EEUU así como la clase a la que corresponden. Nuestro objetivo será utilizar 4000 de estos documentos como conjunto de entrenamiento y los otros 449 para comprobar la precisión de los modelos generados. ID cong billnum h_or_sen major text 11 11 107 4509 HR 18 To suspend temporarily the duty on 12 12 107 4510 HR 16 To amend chapter 171 of title 28, 13 13 107 4511 HR 18 To suspend temporarily the duty on 14 14 107 4512 HR 12 To amend the Internal Revenue Code 15 15 107 4513 HR 2 To strengthen the authority of the 16 16 107 4514 HR 3 To authorize the Secretary of Vete 17 17 107 4515 HR 3 To amend title XVIII of the Social 18 18 107 4516 HR 18 To suspend temporarily the duty on 19 19 107 4517 HR 18 To suspend temporarily the duty on 20 20 107 4518 HR 18 To suspend temporarily the duty on 21 21 107 4519 HR 18 To suspend temporarily the duty on Las columnas más importantes de esta tabla son “major” que hace referencia a la clase del documento y “text” que hace referencia al texto del mismo. En esta sección analizaremos los resultados obtenidos aplicando el preprocesado por el método del estadístico χ2 . Posteriormente utilizaremos el método de los vecinos más CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 31
3.2. CLASIFICACIÓN cercanos y máquinas de vector de soporte (SVM) para realizar la clasificación. En un siguiente paso compararemos los resultados con los obtenidos con las funciones definidas en el paquete “RTextTools”[?] que nos proporciona una aplicación más inmediata y ágil para la clasificación de textos. Aquí podemos ver un extracto de las 10 filas de ese conjunto de datos: Primero creamos la matriz término-documento como en la sección anterior, la utilizaremos para realizar los cálculos de los estadísticos χ2 para cada pareja de documento y palabra. 1234567 abandon 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 abaya 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 abduct 0.12021 0.06049 0.47963 0.08410 0.18232 0.15386 0.13900 abductor 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 abel 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 abet 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 abil 0.72401 1.19737 0.10803 0.50652 1.09802 0.92664 0.05465 abl 0.08012 0.04032 2.21075 0.05605 0.12151 0.10255 0.09264 abm 0.08012 0.04032 0.31967 0.05605 0.12151 0.10255 0.09264 aboard 0.04005 0.02015 0.15980 0.02802 0.06074 0.05126 0.04631 Aquí podemos ver un extracto de la matriz donde cada celda ci,j representa el estadístico χ2 de independencia entre la palabra i y la clase j. Utilizando esta matriz obtenemos la lista de palabras que usaremos para la clasificación, nos quedaremos solamente con aquellas cuyo estadístico medio para todas las clases sea mayor que el percentil 99 de una χ2 de un grado de libertad. Este es un extracto de la lista de palabras: ## [1] "duti" "temporarili" ## [3] "suspend" "educ" ## [5] "energi" "health" ## [7] "privat" "social" ## [9] "xviii" "medicar" Ahora necesitamos crear los conjuntos de entrenamiento y testeo para generar y evaluar los distintos modelos. Para ello nos quedaremos solo con las palabras que se encuentren en la lista. Primero probaremos a realizar la clasificación mediante vecinos más cercanos, en particular comprobaremos el número de vecinos entre 1 y 20 que da mejores resultados. Una vez que lo tengamos seleccionado lo usaremos para realizar la clasificación. 32 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.2. CLASIFICACIÓN #Neighbors Accuracy (Bootstrap) 0.46 0.48 0.50 0.52 0.54 0.56 5 10 15 20 Aquí podemos ver que el número óptimo de vecinos a considerar es 1. Obtenemos esta conclusión ya que la precisión empeora si consideramos un número mayor de vecinos. Finalmente realizamos la predicción utilizando el modelo utilizado sobre el conjunto de testeo. ## Accuracy Kappa ## 6.325167e-01 6.010909e-01 ## AccuracyLower AccuracyUpper ## 5.860518e-01 6.772230e-01 ## AccuracyNull AccuracyPValue ## 1.469933e-01 9.726935e-122 ## McnemarPValue ## NaN Ahora veremos los resultados obtenidos por el SVM: ## Accuracy Kappa ## 6.770601e-01 6.481419e-01 ## AccuracyLower AccuracyUpper ## 6.316339e-01 7.201345e-01 ## AccuracyNull AccuracyPValue ## 1.469933e-01 1.428762e-142 ## McnemarPValue ## NaN Comparando las precisiones podemos observar que para este caso el SVM obtiene una mayor precisión con 67,7% de acierto frente al 62,36 % del KNN. Esta precisión no es un mal resultado para este nivel de refinamiento e información. Para conseguir mejores CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 33
3.3. REDUCCIÓN DE DIMENSIONALIDAD. programas_texto=lapply(programas_pdf,pdf_text) n_progs=length(programas_pdf) vector_programas=numeric(n_progs) for( i in 1:n_progs){ vector_programas[i]=gsub("\\\n"," ", programas_texto[[i]])%>% paste0(collapse = " ")%>% str_squish() vector_programas[i]=gsub("[^[:alnum:][:space:]]","",vector_programas[i]) } programas_pdf=gsub(".pdf","",programas_pdf) data_programas=cbind(vector_programas,programas_pdf)%>% as.data.frame() TDM=TermDocumentMatrix(data_programas$vector_programas, control = list(removePunctuation = TRUE, stopwords = FALSE, tolower = TRUE, stemming = FALSE, removeNumbers = TRUE, bounds = list(global = c(1,Inf))))%>% weightTfIdf(normalize = TRUE) TDM$dimnames$Docs=programas_pdf a=as.matrix(TDM) set.seed(1237) filas=nrow(a) kable(a[sample(nrow(a),10),]) PP PSOE SUMAR VOX avalado 0.00e+00 2.85e-05 0.0000144 0.0000000 interesan 0.00e+00 0.00e+00 0.0000000 0.0001013 eléctrico 7.93e-05 5.32e-05 0.0001014 0.0000000 mínima 0.00e+00 2.85e-05 0.0000431 0.0000000 penaliza 0.00e+00 0.00e+00 0.0000144 0.0000507 perdón 4.78e-05 0.00e+00 0.0000000 0.0000507 respaldar 0.00e+00 0.00e+00 0.0001150 0.0000000 activismo 0.00e+00 0.00e+00 0.0000288 0.0000000 apuestas 0.00e+00 5.90e-06 0.0000119 0.0000210 limitan 0.00e+00 1.42e-05 0.0000144 0.0000000 Este es un pequeño fragmento de la matriz de términos documento, en este caso con una ponderación TF-IDF. Podemos ver que hay muchos valores iguales a 0 ya que muchos términos no suelen aparecer en todos los programas. Ahora con esta matriz de 4 columnas y 16106 filas utilizaremos el método LSA para obtener una matriz proyectada 4x2 que represente la anterior. Utilizaremos las proyecciones en las 2 nuevas coordenadas para representar la similitud entre el lenguaje empleado por cada partido. 40 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.3. REDUCCIÓN DE DIMENSIONALIDAD. PP PSOE SUMAR VOX −1.00 −0.75 −0.50 −0.25 0.00 0.25 −1.0 −0.8 −0.6 −0.4 −0.2 V1 V2 Aquí podemos observar como Vox está separado completamente de los otros 3 partidos, habiendo distancias más pequeñas entre los otros 3. También podemos comprobar uno de los problemas del LSA y es que más allá de la cercanía, las 2 coordenadas extraídas no son fáciles de interpretar ya que no siguen ningún tipo de criterio fijado a priori. Si repetimos este procedimiento añadiendo más partidos podemos proyectarlos en un espacio 3D y observar los resultados que obtenemos. CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 41
3.3. REDUCCIÓN DE DIMENSIONALIDAD. Figura 3.1: Programas de 9 partidos en 3D. Aquí podemos ver como los programas de PNV, BILDU y Teruel Existe son completamente distintos a los otros analizados y parecen formar unos ejes. De entre ellos Bildu es completamente ortogonal a los demás. Si quitamos estos 3 partidos que difieren del resto el resultado que obtenemos es el siguiente. 42 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.4. EXTRACCIÓN DE INFORMACIÓN Figura 3.2: Programas de 6 partidos en 3D. En este otro podemos observar que Pacma se presenta de forma completamente perpendicular al resto de los otros partidos mientras que los demás parecen estar presentes en un gradiente entre los programas de Vox y Adelante Andalucía, siendo más cercanos a este último. 3.4. Extracción de información 3.4.1. Reconocimiento de entidades nombradas En esta sección nuestro objetivo será reconocer automáticamente las entidades de tipo persona, lugar u organización de un texto. Vamos a empezar tomando las funciones que nos aporta el paquete openNLP[?] de R,este paquete contiene varias herramientas de procesamiento del lenguaje natural pero nos centraremos en la que nos permite reconocer los tipos de entidades. En particular utilizaremos un modelo de máxima entropía. #Anotadores de openNLP person_ann = Maxent_Entity_Annotator(kind = "person") location_ann = Maxent_Entity_Annotator(kind = "location") organization_ann = Maxent_Entity_Annotator(kind = "organization") word_ann = Maxent_Word_Token_Annotator() sent_ann = Maxent_Sent_Token_Annotator() Con estos modelos ya creados necesitaremos un texto para intentar reconocer sus CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 43
3.4. EXTRACCIÓN DE INFORMACIÓN entidades. Utilizamos uno acerca de adquisición de empresas que sabemos que contiene nombres, lugares y organizaciones. ## [1] "Which" "countries" "have" ## [4] "rejected" "the" "merger" ## [7] "?" "As" "of" ## [10] "right" Aquí podemos observar las primeras 10 palabras del texto ya separadas. Este vector de palabras lo usaremos como argumento para el modelo que tenemos y nos devolverá aquellas palabras que constituyan alguna de las entidades que buscamos. Finalmente procederemos a obtener las entidades del texto. La lista de los nombres extraída es: XboX Live, Infinity Ward, Bobby Kotick United States, Australia La lista de las organizaciones extraída es: Federal Trade Commission, FTC, New York Times, District Court, BNN Bloomberg, Microsoft, Markets Authority, CMA, Activision, Blizzard, SEC Como podemos comprobar ha extraído una lista completa de los lugares y organizaciones mencionados. Podemos destacar de forma especial que la lista de nombres no solo incluye los nombres propios de personas “Bobby Kotick” en este caso, sino que también incluye de un servicio como es Xbox Live. También podemos considerar que comete un error aquí ya que “Inifinty Ward” es un estudio de videojuegos los que se podría considerar una organización por lo que está reconociendo que es una entidad pero no es capaz de clasificarla de forma precisa. 3.4.2. Extracción de relaciones Nuestro objetivo en esta sección será en primer lugar encontrar los términos más utilizados de una serie de libros y en segunda instancia encontrar las palabras que tienen una relación entre ellas. Utilizaremos una aproximación frecuentista basada en el TF-IDF para hallar estas relaciones y finalmente utilizaremos la metodología LDA visto en la sección anterior para observar el uso del lenguaje de estas obras [21]. Las obras que utilizaremos son “El Quijote” de Miguel de Cervantes,“Los Pazos de Ulloa” de Emilia Pardo Bazán, “El árbol de la ciencia” de Pío Baroja y “El esperpento” de Ramón María del Valle Inclán. Los libros son extraídos de la librería gutenbergr[?] que a su vez los obtiene del repositorio del mismo nombre. Las novelas estarán en Castellano. 44 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.4. EXTRACCIÓN DE INFORMACIÓN gutenberg_id text 2000 Al libro de don Quijote de la Mancha 2000 Que trata de la condición y ejercicio del famoso 2000 hidalgo don Quijote de la Mancha 2000 Que trata de la primera salida que de su tierra hizo 2000 el ingenioso don Quijote 2000 Donde se cuenta la graciosa manera que tuvo don 2000 Quijote en armarse caballero 2000 De lo que le sucedió a nuestro caballero cuando salió 2000 de la venta 2000 Donde se prosigue la narración de la desgracia de 2000 nuestro caballero Aquí vemos un extracto del formato en el que obtenemos la tabla, la primera columna es el ID correspondiente al “El Quijote” mientras que la segunda columna contiene renglones pertenecientes al libro. Utilizando tidytext crearemos dos funciones. La primera cuenta la frecuencia de cada par de términos consecutivos a los que llamaremos bigramas y la segunda que nos permite representar en un gráfico estas relaciones. count_bigrams <- function(dataset) { dataset %>% unnest_tokens(bigram, text, token = "ngrams",n=2)%>% filter(!is.na(bigram))%>% separate(bigram, c("word1","word2"), sep = " ")%>% filter(!word1 %in% stopwords("es"), !word2 %in% stopwords("es")) %>% count(word1, word2, sort = TRUE) } set.seed(1234) visualize_bigrams <- function(bigrams) { a <- grid::arrow(type = "closed",length = unit(.15,"inches")) bigrams %>% graph_from_data_frame() %>% ggraph(layout = "fr")+ geom_edge_link(aes(edge_alpha = n), show.legend = FALSE,arrow = a) + geom_node_point(color = "lightblue",size = 5)+ geom_node_text(aes(label = name), vjust = 1,hjust = 1)+ theme_void() } Finalmente presentamos los grafos de asociación de términos para cada uno de los libros. cada nodo representa una palabra y las flechas representan que el nodo origen precede al nodo destino. Además la frecuencia está representada mediante el color de la flecha, cuanto más opaca es la flecha mayor frecuencia. CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 45
3.4. EXTRACCIÓN DE INFORMACIÓN don respondió dijo sancho vuesa señor caballero caballeros merced señora replicó muchas desta podría quiero tan triste maese oído ver doña puede aquella andante buen sansón sé duda quijote dos teresa cada ninguna buena cide si tres aquel dios preguntó alguna aquí digo segunda suele tal bachiller grandes par panza fernando andantes dulcinea veces manera antonio ser decir bien figura pedro amigo rodríguez gobernador noche luis caballería hombre carrasco días paso dice gana hamete diego acaso día cosa adelante pues parte decirse mal mil grande voces don pisa madama pica max vieja basilio mala capitán máximo señá usted _don primer rubén sabe señor si latino bien collet filiberto lagartos gay latí estrella pintada soulinake pitito flora poeta darío ministro Como podemos ver las relaciones más comunes son “Don” seguido del nombre de alguno de los personajes principales de las novelas. Para poder ver el orden de forma más precisa representaremos los bigramas de cada libro del más al menos frecuente según el TF_IDF. 46 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.4. EXTRACCIÓN DE INFORMACIÓN book bigram n tf idf tf_idf 68745 don latino 223 0.0614664 1.3862944 0.0852105 68745 pisa bien 67 0.0184675 1.3862944 0.0256014 2000 don quijote 2061 0.0350880 0.6931472 0.0243212 68745 madama collet 54 0.0148842 1.3862944 0.0206339 68745 don filiberto 49 0.0135061 1.3862944 0.0187234 68745 pica lagartos 32 0.0088203 1.3862944 0.0122275 68745 don gay 25 0.0068908 1.3862944 0.0095527 2000 respondió sancho 303 0.0051585 1.3862944 0.0071512 2000 dijo don 296 0.0050393 1.3862944 0.0069860 68745 don max 18 0.0049614 1.3862944 0.0068780 2000 sancho panza 281 0.0047840 1.3862944 0.0066320 2000 respondió don 265 0.0045116 1.3862944 0.0062543 18005 don eugenio 9 0.0041744 1.3862944 0.0057869 60464 hermano juan 7 0.0041667 1.3862944 0.0057762 68745 don latí 15 0.0041345 1.3862944 0.0057316 2000 dijo sancho 236 0.0040178 1.3862944 0.0055699 68745 max estrella 13 0.0035832 1.3862944 0.0049674 68745 vieja pintada 13 0.0035832 1.3862944 0.0049674 68745 basilio soulinake 12 0.0033076 1.3862944 0.0045853 2000 vuesa merced 180 0.0030645 1.3862944 0.0042482 Aquí podemos ver los 20 bigramas con mejor frecuencia relativa, los más frecuentes son los nombres de personajes en general y en particular los del esperpento. Al tratarse de una obra de teatro cada intervención de los personajes recoge su nombre por lo que aumenta la proporción con la que aparecen. Ausente de esto queda su coprotagonista, Max Estrella, ya que sus intervenciones vienen marcadas simplemente por “Max”. Por otro lado también vemos que las combinaciones de un verbo que indica el habla junto a un nombre de personaje son comunes dado que aparecen con mucha frecuencia en los diálogos de las novelas. Podemos representar los términos de cada obra por separado obteniendo el siguiente resultado: CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 47
3.5. CONCLUSIONES don filiberto don gay don latí don latino don max madama collet max estrella pica lagartos pisa bien vieja pintada 0.00 0.02 0.04 0.06 0.08 tf_idf bigram Aquí observamos de nuevo que las combinaciones más comunes son los honoríficos seguidos del nombre de un personaje así como verbos que indican el habla seguidos por personajes. La única combinación que rompe este patrón en El Quijote es “caballeros andantes” al ser un bigrama bastante inusual en general pero muy repetido en esta obra. Si realizamos un análisis con las otras obras podemos observar que tenemos un caso similar en el resto de obras, teniendo expresiones como “dos cuartos” en “El Árbol de la ciencia” y “pisa bien” en “el Esperpento” las excepciones. 3.5. Conclusiones En este capítulo hemos tratado con cuatro áreas de la minería de textos. Hemos empezando tratando con R el “resumen de texto”.Se puede decir que tiene métodos sólidos y la implementación de la teoría es sencilla y eficiente, pero necesita de conjuntos de textos en los idiomas específicos para poder realizar su labor de forma efectiva. Para tener buenos métodos para textos en español en R sería necesaria la elaboración de un repositorio adecuado. En segundo lugar hemos visto los métodos de clasificación. Estos consiguen buenos resultados con precisiones de hasta un 70%, pero los tiempos de ejecución son bastante altos comparados con el resto de las áreas. Tanto el método basado en la χ2 implementado en este trabajo como las comparaciones realizadas mediante “RTextTools” tardan un tiempo considerable para obtener resultados con un conjunto de 4000 textos y 50000 palabras distintas. En tercer lugar hemos trabajado con la reducción de dimensionalidad. Hemos hallado buenos resultados pero al mismo tiempo no hemos profundizado en la selección del número de temas con el LDA, este podría ser un aspecto en el que avanzar. Por otro lado el LSI 48 CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R
3.5. CONCLUSIONES hemos logrado encontrar similitudes en los programas pero la evaluación de esta misma es un tema más complicado por el hecho de falta de clasificación previa. Un posible análisis interesante sería correlar la distancia según el LSI con la longitud de los programas ya que los programas más cortos parecen tender a separarse de los demás al tener menos términos distintos. En cuarto y último lugar hemos tratado con la extracción de información. En el reconocimiento de entidades nombradas hemos utilizado un modelo ya creado para obtener resultados bastante precisos, una vía de avance sería implementar en R el método “Nymble” descrito en la sección de teoría. De esta forma también se podrían expandir el número de tipos de entidades que se estudian. La extracción de relaciones realizada ha servido para ilustrar los patrones de ocurrencia más comunes pero no se ha implementado parte de la base teórica para encontrar más tipos de relaciones específicas. Una buena forma de avanzar en este aspecto sería el estudio del paquete “x.ent” [?] el cual contiene funciones útiles para la extracción de información. Sobre otros aspectos de la minería de texto se podrían añadir aplicaciones y una base teórica sobre el análisis de sentimientos en textos. En este trabajo se ve una pequeña aplicación dentro del LDA pero el tema es suficientemente rico como para que tuviese su propia sección. De este tema además existe una amplia bibliografía tanto práctica como teórica [2],[9]. Finalmente hay aplicaciones específicas a temas como la biomedicina o las redes sociales que también tienen un estudio muy interesante pero que no hemos llegado a ver en este trabajo. CAPÍTULO 3. APLICACIÓN DE LA MINERÍA DE TEXTO EN R 49
A.2. CLASIFICACIÓN DE TEXTOS m=nrow(TDM) n=length(clases) matriz_chis=matrix(data=NA,nrow=n,ncol=m) for(i in 1:n){ for(j in 1:m){ matriz_chis[i,j]=chi_sq_clase_palabra(clases[i],TDM$dimnames$Terms[j]) } } matriz_chis=as.data.frame(t(matriz_chis)) colnames(matriz_chis)=clases rownames(matriz_chis)=TDM$dimnames$Terms matriz_chis%>% mutate(mean=rowMeans(.))%>% arrange(desc(mean))->matriz_ordenada #Nos quedamos con las palabras que lleguen al umbral establecido palabras_comparacion=matriz_ordenada%>% filter(mean>qchisq(0.99,1))%>% rownames() matriz_filtrada=TDM[c(palabras_comparacion),c(1:4000)]%>% as.matrix()%>% t()%>% as.data.frame()%>% mutate(clase=as.factor(data_train$major))->data_model_train matriz_filtrada_2=TDM_ampliada[c(palabras_comparacion),c(4001:4449)]%>% as.matrix()%>% t()%>% as.data.frame()%>% mutate(clase=as.factor(data_test$major))->data_model_test # Elegimos el mejor número de puntos para el algoritmo KNN grid <- expand.grid(.k=seq(1,20,by=1)) trainControl <- trainControl(method="repeatedcv",number=10,repeats=3) metric <- "Accuracy" variables=ncol(data_model_train)-1 fit.knn <- train(data_model_train[,1:variables], as.factor(data_model_train[,variables+1]), method="knn", tuneGrid=grid,metric = metric) knn.k2 <- fit.knn$bestTune print(fit.knn) plot(fit.knn) # Realizamos la predicción para knn y svm prediccion_knn <- predict(fit.knn, newdata = data_model_test) cf_knn <- confusionMatrix(prediccion_knn, data_model_test$clase) print(cf_knn) svm=svm(clase~.,data=data_model_train) 56 APÉNDICE A. APÉNDICE: SCRIPTS DE R
A.3. REDUCCIÓN DE DIMENSIONALIDAD E IDENTIFICACIÓN DE TEMAS prediccion_svm=predict(svm,data_model_test) #Obtenemos los resultados de la precisión de la predicción cf_SVM=confusionMatrix(prediccion_svm, data_model_test$clase) print(cf_SVM) A.3. Reducción de dimensionalidad e identificación de temas A.3.1. LDA library(tm) library(qdap) library(lda) library(dplyr) library(pbapply) library(LDAvis) library(treemap) library(car) options(stringsAsFactors = F) # Cargamos los artículos text<-read.csv( 'Guardian_articles_11_14_2015_12_1_2015.csv') # Limpiamos los textos articles <- iconv(text$body, "latin1","ASCII",sub="") articles <- gsub('http\\S+\\s*','', articles) articles <- bracketX(articles,bracket='all') articles <- gsub("[[:punct:]]","",articles) articles <- removeNumbers(articles) articles <- tolower(articles) removeWords(articles,c(stopwords('en'), 'pakistan','gmt','england')) # Limpiamos los espacios blank.removal<-function(x){ x<-unlist(strsplit(x,' ')) x<-subset(x,nchar(x)>0) x<-paste(x,collapse=' ') } articles<-pblapply(articles,blank.removal) # Aplicamos la funcion lexicalize del paquete lda # para crear el corpus y el vocabulario documents <- lexicalize(articles) wc <- word.counts(documents$documents, documents$vocab) doc.length<- document.lengths(documents$documents) APÉNDICE A. APÉNDICE: SCRIPTS DE R 57
A.3. REDUCCIÓN DE DIMENSIONALIDAD E IDENTIFICACIÓN DE TEMAS # Utilizamos la lda con muestreo gibbs para crear el modelo k <- 4# numero de temas a identificar num.iter <- 25 # numerod e repeticiones de muestreos alpha <- 0.02 eta <- 0.02 set.seed(1234) fit = lda.collapsed.gibbs.sampler(documents = documents$documents, K=k, vocab = documents$vocab, num.iterations = num.iter, alpha = alpha, eta = eta, initial = NULL,burnin = 0, compute.log.likelihood = TRUE) # Aquí podemos ver que según iteramos mejora la verosimilitud plot(fit$log.likelihoods[1,]) # calculamos la distribución de temas en los documentos theta <- t(pbapply(fit$document_sums +alpha, 2, function(x) x/sum(x))) phi <- t(pbapply(t(fit$topics) +eta, 2,function(x) x/sum(x))) # Convertimos los artículos en JSON ya que la función que # sumaremos lo requiere article.json <- createJSON(phi = phi,theta = theta, doc.length = doc.length, vocab = documents$vocab, term.frequency = as.vector(wc)) # funcion que asigna el tema a cada documento doc.assignment<-function(x){ x<-table(x)%>% as.matrix()%>% t()%>% max.col() } assignments<-unlist(pblapply(fit$assignments,doc.assignment)) # Al concoer los temas de antemano podemos darle el nombre assignments<-recode(assignments, "1='Cricket1'; 2='Paris Attacks'; 3='Cricket2';4='Unknown'") # Creamos un treemap para visualizar las clases de los articulos y # la polaridad de sentimientos con la funcion polarity article.ref<-seq(1:nrow(text)) article.pol<-polarity(articles)[[1]][3] article.tree.df<-cbind(article.ref, 58 APÉNDICE A. APÉNDICE: SCRIPTS DE R
A.3. REDUCCIÓN DE DIMENSIONALIDAD E IDENTIFICACIÓN DE TEMAS article.pol,doc.length,assignments) treemap(article.tree.df,index=c("assignments",'article.ref'), vSize="doc.length",vColor="polarity",type="value", title="Guardian Articles mentioning Pakistan", palette=c("red","white","green")) A.3.2. LSI en programas electorales library(pdftools) library(lsa) library(stringr) library(matlib) #Obtenemos los programas en pdf del directorio programas_pdf = list.files(pattern = "pdf$") programas_pdf = programas_pdf[-c(1,2,3,4,8)] programas_texto=lapply(programas_pdf,pdf_text) n_progs=length(programas_pdf) ## Realizamos la limpieza de texto vector_programas=numeric(n_progs) for( i in 1:n_progs){ vector_programas[i]=gsub("\\\n"," ", programas_texto[[i]])%>% paste0(collapse = " ")%>% str_squish() vector_programas[i]=gsub("[^[:alnum:][:space:]]","",vector_programas[i]) } programas_pdf=gsub(".pdf","",programas_pdf) data_programas=cbind(vector_programas,programas_pdf)%>% as.data.frame() # Creamos la matriz término documento TDM=TermDocumentMatrix(data_programas$vector_programas, control = list(removePunctuation = TRUE, stopwords = FALSE, tolower = TRUE, stemming = FALSE, removeNumbers = TRUE, bounds = list(global = c(1,Inf))))%>% weightTfIdf(normalize = TRUE) TDM$dimnames$Docs=programas_pdf a=as.matrix(TDM) set.seed(1237) filas=nrow(a) APÉNDICE A. APÉNDICE: SCRIPTS DE R 59
A.4. EXTRACCIÓN DE INFORMACIÓN # Realizamos el LSA lsa=lsa(TDM,dims=dimcalc_share()) # Proyectamos cada programa a un vector de dimensión 3 V=lsa$dk%>%as.data.frame() for(i in 1:n_progs){ V[i,]=V[i,]/sqrt(sum(V[i,]^2)) } ggplot(V, aes(V1,V2,label=rownames(V)))+ geom_label() A.4. Extracción de información #Carga de librerías library(openxlsx) library(rJava) library(NLP) library(openNLP) library(RWeka) library(openNLPmodels.en) library(coreNLP) library(readr) #Anotadores de openNLP person_ann = Maxent_Entity_Annotator(kind = "person") location_ann = Maxent_Entity_Annotator(kind = "location") organization_ann = Maxent_Entity_Annotator(kind = "organization") word_ann = Maxent_Word_Token_Annotator() sent_ann = Maxent_Sent_Token_Annotator() #Obtención del texto setwd("C:/Users/alelo/Desktop/TFG") text=gsub("\\\n"," ",read_file("NER_Blizzard.txt")) #Transfromación del texto en string text <- paste(text, collapse = " ") text<- as.String(text) pipeline = list(sent_ann, word_ann, person_ann, location_ann, organization_ann) 60 APÉNDICE A. APÉNDICE: SCRIPTS DE R
A.4. EXTRACCIÓN DE INFORMACIÓN text_annotations = NLP::annotate(text, pipeline) text_doc = AnnotatedPlainTextDocument(text, text_annotations) words(text_doc)[1:10] #Creación de la función a aplicar entities = function(doc, kind) { s = doc$content a = annotation(doc) if(hasArg(kind)) { k <- sapply(a$features, "[[","kind") s[a[k == kind]] }else { s[a[a$type == "entity"]] } } #Se realiza el reconocimiento nombres=entities(text_doc,kind="person") print(paste0(c("La lista de los nombres extraída es: ") ,paste0( nombres,collapse=", "))) lugares=entities(text_doc,kind="location") print(paste0(c("La lista de los lugares extraída es: "), paste0( lugares,collapse=", "))) organizaciones=unique(entities(text_doc,kind="organization")) print(paste0(c("La lista de las organizaciones extraída es: ") ,paste0( organizaciones,collapse=", "))) APÉNDICE A. APÉNDICE: SCRIPTS DE R 61
Bibliografía [1] Aggarwal,Charu C yAggarwal,Charu C (2015). Mining text data. Springer. [2] Alaminos-Fernández,Antonio Francisco (2023). «Introducción a la minería de texto y análisis de sentimiento con R». [3] Bikel,Daniel M;Miller,Scott;Schwartz,Richard yWeischedel,Ralph (1998). «Nymble: a high-performance learning name-finder». arXiv preprint cmplg/9803003. [4] Blei,David M;Ng,Andrew Y yJordan,Michael I (2003). «Latent dirichlet allocation». Journal of machine Learning research,3(Jan), pp. 993–1022. [5] Carbonell,Jaime yGoldstein,Jade (1998). «The use of MMR, diversity-based reranking for reordering documents and producing summaries». En: Proceedings of the 21st annual international ACM SIGIR conference on Research and development in information retrieval, pp. 335–336. [6] Deerwester,Scott;Dumais,Susan T;Furnas,George W;Landauer, Thomas K yHarshman,Richard (1990). «Indexing by latent semantic analysis». Journal of the American society for information science,41(6), pp. 391–407. [7] Dunning,Ted (1994). «Accurate methods for the statistics of surprise and coincidence». Computational linguistics,19(1), pp. 61–74. [8] Filatova,Elena yHatzivassiloglou,Vasileios (2004). «A formal model for information selection in multi-sentence text extraction». [9] Flores-Ruiz,David;Elizondo-Salto,Adolfo yBarroso-González,María de la O. (2021). «Using Social Media in Tourist Sentiment Analysis: A Case Study of Andalusia during the Covid-19 Pandemic». Sustainability,13(7). ISSN 2071-1050. doi: 10.3390/su13073836. https://www.mdpi.com/2071-1050/13/7/3836. [10] Griffiths,Thomas L ySteyvers,Mark (2004). «Finding scientific topics». Proceedings of the National academy of Sciences,101(suppl_1), pp. 5228–5235. [11] Han,Eui-Hong;Karypis,George yKumar,Vipin (2001). «Text categorization using weight adjusted k-nearest neighbor classification». En: Advances in Knowledge Discovery and Data Mining: 5th Pacific-Asia Conference, PAKDD 2001 Hong Kong, China, April 16–18, 2001 Proceedings 5, pp. 53–65. Springer. [12] Joachims,Thorsten (1998). «Text categorization with support vector machines: 63
Bibliografía Learning with many relevant features». En: European conference on machine learning, pp. 137–142. Springer. [13] Jordan,Michael I (2010). «The conjugate prior for the normal distribution». Lecture notes on Stat260: Bayesian Modeling and Inference. [14] Kwartler,Ted (2017). Text mining in practice with R. John Wiley & Sons. [15] Mao,Yuning;Qu,Yanru;Xie,Yiqing;Ren,Xiang yHan,Jiawei (2020). «Multi-document Summarization with Maximal Marginal Relevance-guided Reinforcement Learning». [16] McCallum,Andrew yLi,Wei (2003). «Early results for named entity recognition with conditional random fields, feature induction and web-enhanced lexicons». [17] Oakes,Michael;Gaaizauskas,Robert;Fowkes,Helene;Jonsson,Anna; Wan,Vincent yBeaulieu,Micheline (2001). «A method based on the chi-square test for document classification». En: Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval, pp. 440–441. [18] Park,Heum;Kwon,Soonho yKwon,Hyuk-Chul (2010). «Complete gini-index text (git) feature-selection algorithm for text classification». En: The 2nd international conference on software engineering and data mining, pp. 366–371. IEEE. [19] Plackett,Robin L (1983). «Karl Pearson and the chi-squared test». International statistical review/revue internationale de statistique, pp. 59–72. [20] Ramshaw,Lance A yMarcus,Mitchell P (1999). «Text chunking using transformation-based learning». En: Natural language processing using very large corpora, pp. 157–176. Springer. [21] Silge,Julia yRobinson,David (2017). Text mining with R: A tidy approach. " O’Reilly Media, Inc.". [22] Storkey,AJ (2020). «Machine Learning and Pattern Recognition: Note on Dirichlet Multinomial». [23] Van Huffel,Sabine (1990). «Partial singular value decomposition algorithm». Journal of computational and applied mathematics,33(1), pp. 105–112. [24] Xu,Zhao;Yu,Kai;Tresp,Volker;Xu,Xiaowei yWang,Jizhi (2003). «Representative sampling for text classification using support vector machines». En: Advances in Information Retrieval: 25th European Conference on IR Research, ECIR 2003, Pisa, Italy, April 14–16, 2003. Proceedings 25, pp. 393–407. Springer. 64