graduado en ingeniería informáticaoa.upm.es/43530/1/tfg_roberto_moreu_rubio.pdf · abstract the...
TRANSCRIPT
Graduado en Ingeniería Informática
Universidad Politécnica de Madrid
Escuela Técnica Superior de Ingenieros Informáticos
TRABAJO FIN DE GRADO
Memoria Final
Prototipo de sistema de detección de tripletas en R para Text Mining
Autor: Roberto Moreu Rubio
Director: Juan Antonio Fernández del Pozo de Salamanca
MADRID, JUNIO 2016
Agradecimientos
Curiosamente esta podrıa ser la parte que mas le puede costar a una persona escribir,
porque siempre hay gente por todas partes que froma parte de la historia de una manera
o de otra. De todas formas a pesar de la cantidad de gente que me ha apoyado durante el
desarrollo del trabajo, serıa injusto no hacer algun tipo de distincion y destacar aquellas
personas que me han ayudado especialmente.
Primero quiero agradecer y destacar la labor que ha hecho mi tutor Juan Antonio
Fernandez. No solo acepto y presento la propuesta del trabajo con ganas, sino que
me ha ayudado constantemente y ha puesto especial interes durante todo el desarrollo,
recomendandome lecturas muy relevantes sobre el tema y ayudandome en la redaccion
de las entregas. Su ayuda me ha resultado imprescindible.
En segundo lugar quiero agradecer el apoyo moral de mi familia, que aun viviendo
lejos siempre han estado presentes y me han motivado a esforzarme, y el de Anita,
inspirandome todos estos anos a mejorar como persona, a aspirar a cosas que nunca
pense que merecıa, y a levantarme todos los dıas con una sonrisa.
Tambien quiero agradecer el apoyo ofrecido por mis amigos Kike, Beto y Juancho, que
siempre han estado dispuestos a ayudarme y me han animado cuando lo necesitaba. Y
por supuesto tambien quiero mencionar a mis companeros del equipo de analytics por
su ayuda y por hacer que mi estancia en la empresa haya sido cuanto menos amena y
divertida, ademas de haberme hecho crecer profesionalmente.
A todos los demas que han estado conmigo deben saber que tambien les tengo presentes
y doy mil gracias por su presencia.
i
Resumen
El mundo de la minerıa de texto esta poniendose de moda de una manera estrepitosa
debido a la cantidad de informacion contenida en textos que antes se pensaba no se
podıa extraer automaticamente. Esto junto con la creciente utilizacion de redes sociales
y medios por los que compartir informacion han hecho de la minerıa de texto un campo
en alto desarrollo, mediante el cual se puede extraer informacion realmente util en un
sinfın de ambitos.
En el momento existe un gran abanico de tecnicas comprendidas en la minerıa de
texto, como el analisis de sentimientos, extraccion y clasificacion de temas y el re-
conocimiento de patrones. Gracias a este tipo de tecnicas se hace posible automatizar
o semi-automatizar procesos como filtrar spam en el correo, hacer recomendaciones en
tiendas online, etiquetar documentos segun su contenido, detectar casos de fraude o ayu-
dar a luchar contra la ciberdelincuencia, entre muchos otros. Es por ello que la minerıa
de textos tiene sin duda un futuro prometedor.
Este trabajo documenta el desarrollo de una herramienta de minerıa de texto dedicada
a la deteccion de estructuras Sujeto + Verbo + Objeto directo, tambien denominadas
tripletas. Esta deteccion permite sacar ideas generales de un documento, resaltando
las acciones y las entidades relacionadas en ellas dentro de un texto, lo que se podrıa
interpretar como un resumen. A esta herramienta se le ha anadido ademas un modulo
de clasificacion mediante el cual dada una serie de frases y un ambito, se puede saber
cual de esas frases es la mas relevante.
A pesar de la dificultad de trabajar con el lenguaje natural se han obtenido unos resul-
tados prometedores que podrıan sentar las bases de un paquete de deteccion de tripletas
para R. Aunque ciertas mejoras serıan necesarias.
ii
Abstract
The world of text mining is catching on due to the amount of information contained
in texts that was previously thought to be impossible to extract automatically. This,
together with the ever increasing use of social networks and means of information sharing
have made text mining a field in rapid development, through which it is possible to
extract very useful information in a variety of areas.
At the moment there is a wide range of techniques involved in text mining, such as
sentiment analysis, topic extraction and classification, and pattern recognition. Thanks
to these kind of techniques it now becomes possible to automate or semi-automate
processes like filtering email spam, making online shoping recommendations, tagging
documents depending on their contents, detecting fraud, or helping to fight cybercrime,
as well as many others. That is why text mining has with no doubt a promising future.
This paper documents the development of a text mining tool dedicated to the detection
of Subject + Verb + Direct object structures in sentences, also known as triplets. This
detection allows drawing general ideas of a document by highlighting actions and the
entities related in them within the text, which could be interpreted as a summary. This
tool has also been added a classification module whereby given a series of sentences and
a scope it is possible to know which of the sentences is the most relevant.
Despite the difficulty of working with natural language the tool has returned very promis-
ing results that could form the basis of a triplet detection library in R. Although some
improvements would be needed.
iii
Indice
Agradecimientos i
Resumen ii
Abstract iii
Indice de Figuras vi
Indice de Tablas vii
1 INTRODUCCION 1
2 OBJETIVOS 3
3 ESTADO DEL ARTE 5
4 DESARROLLO 8
4.1 Modulo 1: Creacion del corpus y transformacion . . . . . . . . . . . . . . 15
4.1.1 Crear corpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.1.2 Preparar corpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Modulo 2: Tokenizacion y analisis . . . . . . . . . . . . . . . . . . . . . . 20
4.2.1 Analizar corpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.2 Transformar corpus . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Modulo 3: Deteccion de tripletas . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.1 Deteccion Fase1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.2 Deteccion Fase2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.3 Deteccion Fase3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.4 Detectar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 Modulo 4: Clasificacion de tripletas . . . . . . . . . . . . . . . . . . . . . . 36
4.4.1 Crear diccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
iv
Indice
4.4.2 Clasificar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.4.3 Exportar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5 HERRAMIENTAS EXTERNAS 44
5.1 FreeLing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2 Paquetes de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6 OBSERVACIONES 47
7 PROBLEMAS ENCONTRADOS 49
8 RESULTADOS 53
8.1 Prueba 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8.2 Prueba 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.3 Prueba 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.4 Prueba 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
9 CONCLUSIONES 63
A Manual de configuracion 66
B Manual de usuario 68
C Etiquetas de FreeLing 77
Bibliografıa 80
v
Indice de Figuras
4.0.0.1 Modelo conceptual de DCTR. . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.2.1 Ejemplo de entradas en ’sustituciones.txt’. . . . . . . . . . . . . . . . 18
4.3.1.1 Captura de la tabla infoDF. . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.1.2 Captura de analisisDF tras la ejecucion de Deteccion Fase1. . . . . . 28
4.3.2.1 Captura de contenido en el archivo ”verbos prep full.csv”. . . . . . . . 30
4.3.2.2 Captura de analisisDF tras la ejecucion de Deteccion Fase2. . . . . . 31
4.3.3.1 Captura de analisisDF tras la ejecucion de Deteccion Fase3. . . . . . 34
4.4.1.1 Captura de contenido en ”conflicto.xlsx” despues de Crear diccionario. 38
4.4.1.2 Captura de contenido en ”conflicto.xlsx” despues de modificacion depesos por el usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.4.3.1 Captura del contenido de ”salida.xlsx”. . . . . . . . . . . . . . . . . . 43
5.1.0.1 Comandos en R para la escritura del texto en ”entrada.txt”. . . . . . 45
5.1.0.2 Secuencia de comandos escrita desde R. . . . . . . . . . . . . . . . . . 45
5.1.0.3 Contenido de los comandos en ”freeling.bat”. . . . . . . . . . . . . . . 45
5.1.0.4 Captura del contenido en ”salida.txt”. . . . . . . . . . . . . . . . . . . 45
5.1.0.5 Comandos en R para leer el archivo de salida y convertirlo a una tabla. 45
5.1.0.6 Captura de la tabla data con el analisis morfologico. . . . . . . . . . . 46
8.1.0.1 Captura del resultado sobre ”prueba1.txt”. . . . . . . . . . . . . . . . 54
8.2.0.1 Captura del resultado sobre ”prueba2.txt”. . . . . . . . . . . . . . . . 57
8.3.0.1 Captura del resultado sobre ”prueba3.txt”. . . . . . . . . . . . . . . . 59
8.4.0.1 Captura del resultado sobre ”prueba4.txt”. . . . . . . . . . . . . . . . 62
A.0.0.1 Distribucion de carpetas y archivos de DCTR. . . . . . . . . . . . . . 66
vi
Indice de Tablas
4.1.1.1 Representacion de corpus, resultado de ejecutar Crear corpus sobre”ejemplo.xlsx”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.1.2.1 Representacion de corpusPreparado, resultado de ejecutar Preparar corpussobre corpus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.1.1 Representacion de corpusAnalizado, resultado de ejecutarAnalizar corpussobre corpusPreparado. . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.2.1 Representacion de corpusTransformado, resultado de Transformar corpussobre corpusAnalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.4.1 Representacion de corpusDetectado, resultado de ejecutar Detectarsobre corpusTransformado. . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4.2.1 Resultado de corpus tras aplicar dos clasificaciones consecutivas (de-portes y tecnologıa). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.0.0.1 Tiempos de ejecucion de FreeLing. . . . . . . . . . . . . . . . . . . . . 50
vii
Apartado 1
INTRODUCCION
La minerıa de texto es el proceso por el cual se extrae de informacion no estructurada con-
tenida en textos en lenguaje natural, datos estructurados que proporcionan informacion
util sobre los mismos. El termino es mas comunmente referido por su traduccion al ingles
Text Mining, y aparecio por primera vez a finales de la decada de los 90, derivandose
como una rama de la minerıa de datos. Su funcionamiento consiste basicamente en la
busqueda de patrones en el texto, lo cual es un proceso difıcil y costoso, y su gran rele-
vancia se debe a que la mayor parte de la informacion no esta estructurada (en torno a
un 80%) y esta contenida en textos.[1]
Este analisis de textos toma muchas formas diferentes, entre las que destacan el analisis
de sentimientos, clasificacion de documentos, resumen de textos y extraccion de enti-
dades. Sus aplicaciones aparecen en todo tipo de ambitos, aunque recibe un interes
especial en la parte de marketing debido a su potencial de extraer informacion acerca
de las preferencias de los clientes.
Esta memoria documenta la implementacion de una herramienta de Text Mining di-
rigida a analizar textos y sacar de ellos las partes mas relevantes. La herramienta recibe
el nombre de DCTR (Deteccion y Clasificacion de Tripletas en R), y esta implementada
con el fin principal de extraer de textos unas estructuras denominadas tripletas. Las
tripletas son estructuras gramaticales compuestas por una estructura sujeto + verbo +
objeto directo, y en casos concretos pueden representar las acciones mas importantes
descritas dentro de un documento, eliminando rellenos en la frase que no aportan tanta
informacion sobre una determinada accion. Todas estas estructuras extraıdas del texto
podrıan significar un resumen del documento, lo que harıa mucho mas sencilla la ex-
traccion de las ideas principales de un documento, que de otra manera serıa un proceso
largo y pesado.
1
Introduccion
Un ejemplo sencillo de esta deteccion serıa extraer de la frase ”En invierno los osos
pardos hibernaban para conservar energıas”, la tripleta ”Los osos pardo hibernaban”.
Ademas de extraer estas estructuras, como bien indica el nombre de la herramienta,
DCTR hace una clasificacion de las tripletas. Mediante esta clasificacion lo que se hace
es un analisis de relevancia de las tripletas extraıdas, de manera que se obtengan las
tripletas mas relevantes segun el tema del documento.
Un ejemplo de esta clasificacion serıa ver que en el ambito deportivo la frase ”Chuto
el balon a la porterıa” es mas relevante que la frase ”El IBEX 35 ha visto su primera
subida en el ultimo mes”.
La motivacion para el desarrollo de esta herramienta viene de un departamento de ana-
lytics dedicado a la minerıa de datos y minerıa de texto. El departamento ha requerido
esta herramienta para hacer analisis de comentarios de usuarios y clientes en paginas
web, y alternativamente para extraer ideas importantes de documentos mas extensos.
Aunque normalmente se trabaja con textos cortos del estilo de comentarios de Twitter,
foros de internet, y entradas de texto libre en formularios y cuestionarios.
La implementacion de la herramienta DCTR se ha llevado a cabo con R, un entorno de
desarrollo de libre uso dedicado a la computacion estadıstica . R proporciona una gran
variedad de tecnicas estadısticas y graficas y es altamente ampliable, lo que permite que
haya una gran comunidad y herramientas.
A pesar de la motivacion empresarial del desarrollo de la herramienta, debido al origen
de R, su gran comunidad, y las herramientas de libre uso utilizadas durante el desarrollo,
la herramienta DCTR se hara de uso libre, por lo que se hara publica tras la finalizacion
del prototipo.
2
Apartado 2
OBJETIVOS
Se necesita una herramienta implementada en R que sea capaz de extraer las tripletas
contenidas en textos. Como funcion adicional la herramienta tambien hace una clasi-
ficacion mediante la cual, dado un texto con un ambito, se analizan las tripletas y se
destacan aquellas que son mas relevantes dentro de ese ambito o tema.
Los objetivos que conforman la herramienta implementada son:
1. Preparar los textos entrantes: consiste en importar los textos contenidos en los
ficheros y prepararlos para facilitar la extraccion de las tripletas. La funcion prin-
cipal de esta preparacion es la de eliminar o sustituir terminos poco comunes o
con caracteres que podrıan confundir a la herramienta durante la extraccion.
2. Extraer estructuras sujeto + verbo + objeto directo (SVO): esta es la parte mas
importante de la herramienta. Se extraen las tripletas de cada uno de los textos
importados.
3. Analizar y clasificar las estructuras segun el ambito o clase del texto: Dado una
serie de textos con un ambito dado por un experto, se hace un analisis para ver
que tripletas son mas relevantes en ese ambito.
Los ambitos de uso de la herramienta son muchos, ya que el departamento que la ha
requerido trabaja en todo tipo de sectores. Pero los mas concurridos son los ambitos de
banca, seguros, salud y ciudadanıa. El objetivo es aplicar esta herramienta en todo tipo
de sectores, enfocandolo especialmente al analisis de satisfaccion de clientes y usuarios.
3
Objetivos
Los requisitos generales de su funcionamiento son:
• El codigo debe estar escrito en R, y su ejecucion debe ser a traves de RStudio.
• Debe permitir la importacion de textos contenidos en ficheros de formatos Excel,
CSV y texto plano.
• Debe ser una herramienta semiautomatica, en la que se requiera la intervencion
de un usuario que la adapte al ambito de uso y a los textos que se deseen analizar.
• La intervencion del usuario ha de ser por medio de ficheros en cualquiera de los
formatos anteriormente dichos.
• La exportacion de los resultados se hara a un fichero de formato Excel.
• Se debe utilizar la codificacion UTF-8 para la creacion de archivos.
• Ha de ser una herramienta auto contenida, que no requiera la instalacion de ningun
componente por parte del usuario.
• La herramienta debe detectar estructuras sujeto + verbo + objeto directo con-
tenidas en frases.
• El analisis ha de estar enfocado a textos de un tamano corto, del estilo de comen-
tarios en Twitter o foros.
• Tras la ejecucion se debe apreciar alguna diferencia entre frases dentro de un
ambito, con la que se pueda hacer un orden de relevancia.
Debido a la dificultad del analisis del lenguaje natural la herramienta no ha de ser 100%
exacta en la deteccion, pero consecuentemente debe servir como punto de partida para
futuras mejoras en su implementacion.
Como se ha indicado en la introduccion el nombre de la herramienta es DCTR, una
abreviacion con las iniciales de Deteccion y Clasificacion de Tripletas en R. A partir de
ahora se referira a la misma por su nombre.
4
Apartado 3
ESTADO DEL ARTE
Debido a la gran cantidad de datos no estructurados almacenados en textos los avances
en la minerıa de textos han sido enormes durante la ultima decada. Gracias a la minerıa
de texto es ahora posible sacar informacion util allı donde se pensaba que no era posible,
y es por ello que la cantidad de herramientas de minerıa de texto es cada vez mayor,
aunque se pueden destacar ciertas herramientas por su mayor utilizacion.
Estas son algunas de las herramientas frecuentemente utilizadas en la minerıa de texto:
• SAS Text Analytics (de pago). Comprende una suite de herramientas de minerıa
de texto que utilizan procesamiento del lenguaje natural y tecnicas linguisticas
avanzadas para analizar automaticamente grandes volumenes de contenido [2].
Sus componentes son: SAS Text Miner, SAS Enterprise Content Categorization,
SAS Sentiment Analysis y SAS Ontology Management.
• GATE (gratuita). General Architecture for Text Engineering [3]. Es una suite de
herramientas para el procesamiento del lenguaje natural e ingenierıa del lenguaje.
Incluye un sistema de extraccion de informacion llamado ANNIE (A Nearly-New
Information Extraction System) compuesto por una serie de modulos para usos
como tokenizar textos, dividir por frases y detectar entidades entre otros.
• tm (gratuita) [4]. Paquete de minerıa de texto en R. Ofrece funcionalidades para
el manejo y manipulacion de documentos de texto, haciendo mas facil trabajar con
textos en formatos heterogeneos.
• IBM SPSS Text Analytics (de pago). Proporciona las soluciones de procesamiento
del lenguaje natural LanguageWare e IBM Content Analytics. Incluye un entorno
facil de usar para crear diccionarios y hacer reglas semanticas, y permite una
extraccion de informacion personalizable.
5
Estado del Arte
• RapidMiner (gratuita o de pago) [5]. Entorno integrado para machine learning,
text y data mining, analıtica predictiva y analisis de negocio.
• OpenNLP (gratuita) [6]. Librerıa de Apache para procesar textos en lenguaje
natural. Incluye las tareas mas comunes dentro de la minerıa de texto, como el
etiquetado, tokenizacion y extraccion de entidades en el texto.
Estas son solo algunas de las mas conocidas, y cada una de ellas presenta sus ventajas y
sus desventajas. Lo primero a destacar es la diferencia en cuanto a ser una herramienta
de pago o de uso gratuito. Mientras que las herramientas de pago normalmente tienen
la ventaja de un mejor soporte tecnico y de ayuda, las herramientas gratuitas suelen
tener una comunidad mas grande detras, lo que hace que sea facil encontrar ayuda para
resolver problemas.
Ademas, las herramientas gratuitas pueden contentarse con mayores contribuciones por
parte de la comunidad, especialmente si son herramientas de codigo abierto (Ej: Rapid-
Miner), lo cual es una gran forma de mejorar los productos que ofrecen. Tambien es
verdad que las herramientas de pago son, por lo general, mas completas en cuanto a los
componentes y servicios que ofrecen (Ej: SAS).
Cada una de las herramientas destaca en un ambito diferente, y es por ello que es muy
difıcil hacer una distincion o un ranking claro que las clasifique. Podrıa ser incluso
ventajoso utilizar un conjunto de ellas para cumplir un mismo objetivo. Sı que es del
todo relevante destacar entre las herramientas mencionadas a tm por ser un paquete de
R, el lenguaje de programacion de la herramienta DCTR hecha en este trabajo.
A pesar de todas las herramientas existentes hay una gran cantidad de investigacion y
trabajo pendiente en el campo de la minerıa de texto.
Como se ha podido ver hasta ahora, dentro de la minerıa de texto existen muchas apli-
caciones y tecnicas diferentes, y es ahı donde esta la deteccion de tripletas, estructuras
compuestas por un sujeto, un verbo, y un objeto directo. Visto ası la deteccion de triple-
tas se parece mucho a un analisis sintactico pero con un filtrado (en el que se eliminan
partes de la frase al final), y mientras que hay herramientas existentes que hacen analisis
sintactico, no es ası en R.
La propia herramienta externa FreeLing [7], dedicada al lenguaje natural y utilizada
aquı para hacer un analisis morfologico, proporciona en su nueva version 4.0 un analisis
sintactico con forma de arbol. Desgraciadamente para sacar las tripletas es necesario
recorrer manualmente ese arbol, lo que puede ser un proceso lento dependiendo del texto.
6
Estado del Arte
El fin principal de la herramienta DCTR no es simplemente tener un modo de deteccion
de tripletas, que ya de por sı es un proceso poco documentado a la hora de automatizarlo,
sino tener una herramienta implementada en R. Esto sı que es algo nuevo, ya que
por el momento no existen herramientas en R que hagan este tipo de tareas, aunque
esta la ayuda de algunas librerıas para hacer minerıa de texto (como tm mencionado
anteriormente y stringr [8]) que pueden facilitar mucho la tarea, y el paquete de R
openNLP, que proporciona una interfaz en R para OpenNLP, una librerıa de Apache
con multitud de herramientas de procesamiento de textos en lenguaje natural, incluıdo
un analisis sintactico.
7
Apartado 4
DESARROLLO
En este apartado se detallan las partes implementadas para conformar la herramienta
de minerıa de texto DCTR.
El desarrollo de DCTR se ha dividido en 4 modulos con objetivos claramente diferentes
y que trabajan secuencialmente del modulo 1 al modulo 4. Cada modulo esta compuesto
por un conjunto de metodos, algunos de los cuales son de uso opcional para ayudar al
usuario, que juntos cumplen el objetivo del modulo al que pertenecen. Los objetivos de
cada modulo son, por orden:
• Modulo 1: Creacion del corpus y transformacion. La principal funcion de este
modulo es la importacion de los textos y su limpieza para poder ser procesados
en las etapas siguientes. Como primera funcion importa y almacena los textos a
un objeto de R capaz de almacenar la informacion de muchos documentos, para
lo que se ha utilizado el objeto Corpus o VCorpus del paquete ‘tm’(text mining).
Su segundo objetivo es el de limpiar los textos de caracteres no deseados, o aplicar
sustituciones de palabras por otras mas comunes y de acronimos por las palabras
que representan. Esto evitara muchos problemas mas adelante.
• Modulo 2: Tokenizacion y analisis. Este modulo se ocupa de preparar el texto
resultante del modulo 1 contenido en el corpus para que sea posible su analisis
sintactico, por el cual se detectaran las tripletas. En concreto esa preparacion
consiste en hacer un analisis morfologico sobre el texto mediante la herramienta
FreeLing comentada mas adelante, y la separacion de todas las frases contenidas
en el texto, las cuales seran despues ordenadas y organizadas segun el documento
o parrafo al que pertenecen.
8
Desarrollo
• Modulo 3: Deteccion de tripletas. Su funcion es parecida a la de un analisis
sintactico, con la principal diferencia siendo la eliminacion de todos los compo-
nentes de la frase que no formen parte de una estructura de Sujeto + Verbo +
Objeto directo, tambien llamada tripleta. Para cada una de las frases contenidas
en el corpus el modulo 3 debe detectar su estructura SVO con la ayuda del analisis
morfologico.
• Modulo 4: Clasificacion de tripletas. se encarga de diferenciar las frases entre sı,
pudiendo ver despues que frases son las mas relevantes en un tema concreto (se
tiene ”tema” y ”ambito” como sinonimos). En definitiva, su objetivo es aplicar
una puntuacion a cada frase por cada tema aplicado para saber que frase es la mas
relevante del texto dentro del tema deseado. Siendo tambien el ultimo modulo se
encargara de exportar el resultado final a un archivo externo, en el que se tendran
las tripletas de cada frase y sus puntuaciones en los diferentes temas.
Figura 4.0.0.1: Modelo conceptual de DCTR.
9
Desarrollo
La figura 4.0.0.1 pretende mostrar el funcionamiento de la herramienta, de manera que
se pueda entender de que forma y en que orden trabajan los metodos de cada uno de
los modulos para conseguir el objetivo final, que es la deteccion de estructuras Sujeto +
Verbo + Objeto (tripletas) y su clasificacion en temas.
Con la ayuda del modelo se explica ahora el funcionamiento principal de DCTR de una
manera global, describiendo el flujo a traves de todo el proceso sin entrar en detalle de
la implementacion de cada metodo, lo cual se explicara mas adelante.
El orden en el modelo conceptual viene mostrado de izquierda a derecha, empezando
con el metodo Crear corpus en el modulo 1 y terminando por el metodo Exportar en
el modulo 4. El proceso empieza exactamente con una serie de textos pertenecientes a
documentos, cuyo contenido se puede almacenar en tres formatos diferentes, texto plano,
Excel o fichero de valores separados por comas (CSV). En un mismo fichero se pueden
encontrar multiples textos, estando cada texto de origen diferente en una lınea, como
podrıa ser el contenido de un nuevo documento, o un nuevo parrafo que se ha deseado
separar del resto.
1. El metodo Crear corpus es el encargado de introducir el contenido de este fichero
a un formato soportado por el entorno de la herramienta, en concreto un entorno
de programacion en R. Crear corpus importa estos textos y los convierte a un
objeto de la clase Corpus o VCorpus, un objeto dedicado al almacenamiento de
documentos y otros datos de interes.
2. Una vez creado el corpus el usuario tiene la posibilidad de limpiar y preparar su
contenido, para lo cual se usa el metodo Preparar corpus. Si se decide por
prepararlo el usuario debe crear o modificar un archivo de texto plano ya existente
cuyo contenido es el de ciertas palabras y acronimos y las palabras por las que
se desean cambiar. En este paso es especialmente recomendable anadir acronimos
que lleven puntos, y palabras que se sepa esten posiblemente mal escritas a lo largo
de los textos. Preparar corpus aplica estos cambios sobre el contenido del corpus,
dando tambien la posibilidad de eliminar terminos no deseables.
Si el usuario se ha decidido por la utilizacion de Preparar corpus obtendra un
corpus con un contenido mas limpio, de otro modo puede seguir adelante con el
siguiente paso con el corpus inicial.
3. En ambos casos el siguiente paso pertenece al metodoAnalizar corpus del modulo
2. Este nuevo metodo hace uso de una herramienta externa y de uso libre llamada
FreeLing y desarrollada por el Centro de Investigacion TALP de la Universidad
Politecnica de Cataluna. En concreto Analizar corpus utiliza el servicio de analisis
10
Desarrollo
morfologico de FreeLing, mediante el cual despues de introducir un texto devuelve
el analisis morfologico de cada una de las palabras contenidas en el. El metodo
Analizar corpus introduce despues en el corpus el analisis morfologico junto a su
frase correspondiente.
4. El corpus pasa a ser propiedad ahora del metodo Tranformar corpus, tambien
del modulo 2. este metodo es el encargado de coger todos los textos y dividirlos en
frases, manteniendo la informacion del documento o parrafo al que pertenece. De
esta manera facilita la tarea de la deteccion de tripletas en cada frase mas adelante.
El corpus entra con una entrada para cada documento o parrafo, y sale teniendo
una entrada por cada frase. Ademas de dividir los textos en frases tambien se
encarga de repartir a cada frase su analisis morfologico correspondiente.
La razon por la que primero se analiza morfologicamente y despues se divide en
frases y no viceversa es por el hecho de que la herramienta FreeLing se ralentiza
en el momento en que tenga que analizar muchos textos individualmente. Siendo
el proceso mucho mas rapido cuando todas las frases pertenecientes a un mismo
parrafo o documento son analizadas de manera conjunta.
5. Ahora viene el proceso mas complicado, el de la deteccion de tripletas, mostrado en
el apartado del modelo conceptual dedicado al modulo 3. Este paso esta formado
por diferentes metodos que estan integrados en un metodo mas global llamado De-
tectar. Como se puede ver el metodo Detectar contiene un bucle en el cual para
cada iteracion se hace uso de otros tres metodos implementados y esenciales, lla-
mados Deteccion Fase1, Deteccion Fase2 y Deteccion Fase3. Este bucle se recorre
hasta que se haya completado la longitud del corpus, todas sus frases.
(a) Comienza cada iteracion extrayendo del corpus la frase n contenida, la cual
pasa a Deteccion Fase1 junto con su analisis morfologico. Este metodo es
el encargado de hacer uniones sencillas dentro de la frase tales como deter-
minantes con nombres y sustantivos, adverbios con adjetivos, o pronombres
con nombres. Este tipo de uniones y otras muchas son las que se asignan a
la frase durante Deteccion Fase1, la cual pasa esa informacion a la fase2 sin
hacer ningun cambio sobre los datos contenidos en el corpus.
(b) Deteccion Fase2 recibe esa informacion sobre las uniones dentro de la frase
y las utiliza para crear uniones mas complejas y completas. Para ello hace
uniones de uniones, como podrıa ser por ejemplo unir mediante una con-
juncion dos estructuras de nombres diferentes. La fase 2 tambien se encarga
de detectar todos los complementos circunstanciales de la frase (de lugar,
tiempo, modo, causa ,etc.), estructuras verbales, o frases subordinadas. Como
11
Desarrollo
se puede ver en el modelo conceptual, Deteccion Fase2 hace uso de un archivo
CSV que contiene una lista de verbos preposicionales, verbos que han de ir
acompanados por una preposicion para tener sentido. Mediante esta lista el
metodo tiene mas informacion sobre que partes forman parte de la estructura
SVO.
Una vez analizada de esta manera la frase, Deteccion Fase2 hace una dis-
tincion en la que indica que elementos no pertenecen a la tripleta o tripletas
(podrıa existir mas de una tripleta en una misma frase) y las marca para que
la siguiente fase sepa que elementos de la frase debe eliminar.
(c) Esta informacion es ahora transmitida al metodo Deteccion Fase3, cuyo
fin principal es la eliminacion de todos los elementos que no formen parte
de la estructura sujeto + verbo + objeto directo. Tambien se encarga de
limitar la deteccion de tripletas de manera que se cojan dos como maximo
por frase, algo relevante ya que en el castellano es muy comun tener muchas
frases subordinadas. Al final Deteccion Fase3 devuelve una estructura en la
que se contiene tan solo la tripleta.
Una vez obtenida la tripleta de la frase n del corpus (Deteccion Fase3 ), se anade
la tripleta al corpus en la posicion correspondiente a su frase original. Este proceso
se hace igual para cada iteracion del bucle de Detectar. En el momento en que se
hayan recorrido todas las frases y extraıdo sus correspondientes tripletas el metodo
Detectar terminara devolviendo el corpus que recibio de entrada, con la adiccion
de las tripletas para cada frase en un campo anadido.
6. Las tripletas ya han sido extraıdas y es ahora el momento de la clasificacion, que
es la finalidad del modulo 4. Antes de repasar el metodo Clasificar, se puede
identificar en el modulo 4 un metodo llamado Crear diccionario que no sigue el
flujo de la herramienta, sino que funciona individualmente. Y es que el metodo
Clasificar requiere un diccionario para cada tema que se quiera analizar.
Para ayudar al usuario a crear este diccionario se ha implementado Crear diccionario,
que crea un nuevo diccionario o glosario de terminos para un cierto ambito o tema
a partir de un archivo que contenga textos que se sepa pertenezcan al mismo,
por ejemplo deportes. Al igual que el metodo Crear corpus admite tres tipos de
formato diferente, texto plano, CSV y Excel.
Crear diccionario importa el fichero indicado y extrae los textos, de los cuales
saca las palabras y las introduce por filas en una tabla, con una columna para
la palabra y otra para su peso. Las palabras extraıdas son procesadas y filtradas
de manera que esten en singular, y no contengan artıculos, adverbios, y otros
12
Desarrollo
elementos comunes de cualquier tipo de texto. En la tabla que las contiene cada
termino ira acompanado de un peso por defecto igual a 1, el cual mide la relevancia
de ese termino en el tema deseado. Crear diccionario exporta despues esta tabla
a un fichero Excel.
Es este el momento en el que el usuario ha de intervenir abriendo el archivo expor-
tado por Crear diccionario y asignando a cada termino un peso mas realista segun
su relevancia dentro de ese tema. Tambien se le permite anadir nuevos terminos
si lo ve conveniente. Despues de esta intervencion el diccionario esta listo para la
clasificacion.
7. Volviendo atras, el metodo Clasificar recibe el corpus devuelto por Detectar, que
contiene ahora toda la informacion obtenida anteriormente, incluyendo las triple-
tas. Clasificar utiliza ahora el diccionario de terminos creado en Crear diccionario
para comprobar que palabras de cada frase aparecen en el. Para cada una de
las frases comprueba sus apariciones y suma los pesos de sus correspondientes
terminos, dividiendolo despues por el numero de palabras contenidas en la frase
y consiguiendo ası un peso medio de cada frase. La frase contrastada es la frase
original que contiene todos los terminos, ya que contiene mas informacion que su
tripleta extraıda. Cada peso es introducido en el corpus en la entrada correspon-
diente a su frase.
Clasificar devuelve al final el corpus con la nueva informacion de los pesos, y si
el usuario quiere puede aplicar el metodo sobre el corpus de salida las veces que
desee con otros temas.
8. El metodo Exportar recibe el corpus de salida y exporta su informacion valiosa a
un fichero Excel, independientemente del numero de clasificaciones aplicadas. En
el Excel de salida se tendran las frases originales, con sus correspondientes tripletas
y puntuacion para cada tema, terminando ası la ejecucion de la herramienta.
Cada uno de los pasos descritos ha de ser ejecutado individualmente, de manera que en
el evento de algun error sea mas facil corregir el problema donde se ha originado. De
esta manera se permite ademas una mejor adaptabilidad a los documentos analizados,
ya que el usuario tiene la oportunidad de intervenir en ciertos puntos, y se puede sacar
mayor provecho de esta intervencion si se conoce el recorrido y el avance de la deteccion
y clasificacion, haciendo especial hincapie en el metodo Preparar corpus.
13
Desarrollo
Ejemplo:
A continuacion se detalla el funcionamiento interno de cada uno de los metodos que
forman parte de DCTR. Para ayudar a su comprension se acompanan de un ejemplo
aplicado desde el principio hasta el final, en el cual se podran ver los cambios que realiza
cada metodo.
El texto que se va a analizar esta compuesto por una combinacion de textos pertenecientes
al diario El Paıs. El primer texto trata un tema de conflicto relacionado con Corea del
Norte, el segundo pertenece a un artıculo de tecnologıa relacionado con Google, y el
tercero pertenece a un artıculo de Moto GP.
El texto se ha almacenado en un Excel (ejemplo.xlsx), que contiene:
Pyongyang ha intensificado sus amenazas especialmente desde el comienzo, a principios
de este mes, de las principales maniobras conjuntas militares anuales entre EE.UU. y
Corea del Sur, que este ano son mayores que nunca. El 10 de marzo Corea del Norte ya
habıa lanzado dos misiles de corto alcance hacia el mar de Japon. [9]
“Puedes hacer una foto de un cartel en otro idioma y entender su significado en el tuyo”.
Google ha tenido un papel muy relevante en este avance. [10]
En carrera he intentado seguir a las Yamaha satelite al principio y me ha costado porque
perdıa mucho en las aceleraciones, no podıa recuperarlo en la frenada”, explicaba Pe-
drosa, que termino cuarto. [11]
Como se puede apreciar los textos no tienen nada que ver entre sı ni comparten un
mismo estilo de escritura. Lo que se ha hecho es una seleccion especıfica que permita
apreciar de mejor manera el funcionamiento sin ser un ejemplo demasiado extenso, por
lo que no es un escenario del todo real.
Todo el codigo ha sido escrito en el lenguaje de programacion R e implementado en
el entorno libre de RStudio. Por lo general se ha escrito un script diferente para cada
modulo, exceptuando el modulo 3 que esta compuesto por cuatro scripts debido a su
complejidad. Al final los metodos han sido introducidos en un archivo RData que hace
que sea un codigo mas auto contenido y simplifica su puesta en marcha.
14
Desarrollo
4.1 Modulo 1: Creacion del corpus y transformacion
El modulo 1 es el encargado de preparar el entorno para que los textos puedan ser
analizados. Importa los textos a un entorno de R y opcionalmente los prepara a fin de
evitar posibles problemas en las siguientes etapas de la herramienta. Este modulo esta
compuesto por dos metodos Crear corpus y Preparar corpus contenidos en un mismo
script llamado ”Modulo 1 Corpus.R”.
4.1.1 Crear corpus
Importa el fichero que contiene los textos y los convierte a un objeto de la clase Corpus
del paquete ‘tm’ que hace que sea mas rapido y facil de analizar que otros objetos de R,
como podrıa ser el mas utilizado Dataframe.
El metodo permite importar un fichero con tres formatos diferentes, puede ser un fichero
de texto plano (.txt), un Excel (.xlsx) o un fichero con valores separados por comas (.csv).
Se acordaron estos tres formatos por ser los mas utilizados en los proyectos de minerıa de
texto dentro del departamento para el que se esta haciendo DCTR. Para ser adaptable
a diferentes distribuciones del texto dentro de estos tres tipos de ficheros Crear corpus
admite ciertos parametros opcionales, haciendo la importacion mas comoda para el
usuario: fichero, indiceHoja, cabecera, separador y columna.
El parametro fichero debe contener la ruta completa del fichero, y es el unico parametro
obligatorio. La variable de entrada indiceHoja debe contener un entero con el ındice de
la hoja, siendo solo util cuando el fichero es un Excel y el texto se encuentra en una
hoja diferente a la primera. El parametro cabecera es un booleano que indica si el texto
que hay en el archivo contiene cabecera o no. separador es un parametro que contiene
el separador de valores en caso de que el archivo sea un CSV. Por ultimo el parametro
columna contiene el ındice de la columna en la que se encuentra el texto dentro de un
Excel.
Crear corpus detecta el tipo de fichero que se desea importar y utiliza los parametros
necesarios para hacerlo dependiendo de su formato, cada uno de los parametros ante-
riormente descritos contiene un valor por defecto. Una vez importado el fichero crea
una tabla en la que cada fila es una lınea del fichero (documento o parrafo diferente), y
elimina de la misma aquellas filas que esten vacıas. Una vez creada esta tabla convierte
la columna del texto a un vector y la introduce en un objeto R de la clase VCorpus
(volatile corpus) que contiene en cada entrada cada uno de los diferentes documentos
incluidos en el fichero.
15
Desarrollo
> corpus <- Crear_corpus("D:/Datos/ejemplo.xlsx", cabecera = FALSE,
columna = 1, indiceHoja = 1)
Corpus creado correctamente.
Tabla 4.1.1.1: Representacion de corpus, resultado de ejecutar Crear corpus sobre”ejemplo.xlsx”.
$content
1 ”Pyongyang ha intensificado sus amenazas especialmentedesde el comienzo, a principios de este mes, de las princi-pales maniobras conjuntas militares anuales entre EE.UU. yCorea del Sur, que este ano son mayores que nunca. El 10de marzo Corea del Norte ya habıa lanzado dos misiles decorto alcance hacia el mar de Japon.”
2 ”“Puedes hacer una foto de un cartel en otro idioma y en-tender su significado en el tuyo”. Google ha tenido un papelmuy relevante en este avance.”
3 ”En carrera he intentado seguir a las Yamaha satelite alprincipio y me ha costado porque perdıa mucho en las acel-eraciones, no podıa recuperarlo en la frenada”, explicabaPedrosa, que termino cuarto.”
A pesar de que se trata de un Corpus su representacion es parecida a la de una tabla,
por lo que los corpus se representaran de ahora en adelante con una tabla en la que se
incluyen los campos relevantes del objeto.
Como se puede ver en la ejecucion anterior, el resultado de Crear corpus es un objeto
que contiene para cada entrada uno de los parrafos contenidos dentro del archivo. El
texto se encuentra en el campo content, al que se accede con el sımbolo $.
16
Desarrollo
4.1.2 Preparar corpus
Es un metodo de uso opcional en caso de que el usuario quiera preparar el texto para
un mejor analisis. Esta enfocado a eliminar palabras abreviadas o acronimos que con-
tengan puntos, los cuales pueden crear problemas mas adelante a la hora de separar
los documentos por frases. Tambien se puede enfocar a la eliminacion o sustitucion de
palabras mal escritas o fuera de lugar. Es bueno que el usuario conozca bien el tipo de
texto con el que esta trabajando para saber que palabras podrıan estar mal escritas o
los acronimos que podrıan aparecer.
Preparar corpus aplica las sustituciones dentro de los documentos contenidos en el Cor-
pus mediante un fichero de sustitucion, un fichero de texto plano que contiene dos
columnas, termino y sustitucion, separados por un tabulador. Los parametros de en-
trada del metodo son el objeto VCorpus resultado del metodo Crear corpus, y la ruta
del fichero de sustitucion (ficheroSustitucion).
Lo primero que hace es importar el fichero de sustituciones y crear una tabla en R. Acto
seguido recorre cada una de las entradas del corpus, separando las palabras de cada texto
y comprobando si estan en la tabla de sustituciones, en el caso de estar se sustituyen
por el termino indicado en la tabla (si la sustitucion esta en blanco se entendera que el
termino se desea eliminar y se hara lo consecuente). Despues vuelve a unir las palabras
de cada frase para formar de nuevo el documento con las sustituciones, e introduce el
nuevo texto en el campo donde se encontraba el original.
La salida es el mismo objeto VCorpus que la entrada pero con los terminos procesados
segun el fichero de sustitucion.
> corpusPreparado <- Preparar_corpus(corpus = corpus,
ficheroSustitucion = "D:/data/sustituciones.txt")
Corpus preparado correctamente.
17
Desarrollo
Tabla 4.1.2.1: Representacion de corpusPreparado, resultado de ejecutarPreparar corpus sobre corpus.
$content
1 ”Pyongyang ha intensificado sus amenazas especialmente
desde el comienzo, a principios de este mes, de las principales
maniobras conjuntas militares anuales entre Estados Unidos
y Corea del Sur, que este ano son mayores que nunca. El 10
de marzo Corea del Norte ya habıa lanzado dos misiles de
corto alcance hacia el mar de Japon.”
2 ”“Puedes hacer una foto de un cartel en otro idioma y en-
tender su significado en el tuyo”. Google ha tenido un papel
muy relevante en este avance.”
3 ”En carrera he intentado seguir a las Yamaha satelite al
principio y me ha costado porque perdıa mucho en las acel-
eraciones, no podıa recuperarlo en la frenada”, explicaba
Pedrosa, que termino cuarto.”
Para ahorrar tiempo al usuario el script del modulo 1 viene acompanado de un fichero
”sustituciones.txt” escrito a mano con un total de 275 sustituciones de acronimos uti-
lizados comunmente. El usuario puede modificar este fichero anadiendo las entradas que
vea necesarias.
Debido al origen de los datos y a su correcta redaccion no ha sido necesaria la sustitucion
de terminos mal escritos o su eliminacion, pero se puede apreciar que sı que ha tenido
lugar la sustitucion de “EE.UU.” por “Estados Unidos”, cuya entrada se encontraba en
‘sustituciones.txt’.
Figura 4.1.2.1: Ejemplo de entradas en ’sustituciones.txt’.
18
Desarrollo
La figura 4.1.2 muestra una captura de parte del contenido que hay en “sustituciones.txt”,
lo cual puede ser modificado por el usuario. Como se ha dicho antes el archivo se com-
pone por dos columnas, en la primera esta el termino que se quiere cambiar (Ej: a.m.) y
en la segunda columna esta la sustitucion de ese termino (Ej: antes del mediodıa). Como
se puede observar el archivo esta principalmente enfocado a eliminar los acronimos del
texto, mas adelante en Transformar corpus se dara la razon.
En caso de encontrarse en blanco en la segunda columna, se le estarıa indicando al
metodo Preparar corpus que cada vez que encuentre ese termino lo elimine del texto, ya
podrıa ser por ser un termino inapropiado, mal escrito, etc.
19
Desarrollo
4.2 Modulo 2: Tokenizacion y analisis
Este modulo bien se podrıa llamar el de preparacion, ya que es el requisito esencial para
que el modulo 3 de deteccion funcione. El modulo 2 compone el proceso que se encarga
analizar morfologicamente cada uno de los terminos contenidos en los diferentes textos
del Corpus. Tambien hace una transformacion en la que se separan los parrafos en frases,
de manera que mas adelante sea mas facil detectar las tripletas o estructuras SVO frase
por frase.
El modulo 2 esta compuesto por dos metodos llamados Analizar corpus() y Transfor-
mar corpus(), y esta contenido ıntegramente en un script llamado ”Modulo 2 Analisis.R”.
4.2.1 Analizar corpus
Este metodo analiza morfologicamente todas las palabras de los textos contenidos en el
VCorpus para que se pueda hacer mas adelante la deteccion de las tripletas. Para cada
documento contenido en el VCorpus el metodo extrae su texto, se lo envıa a FreeLing
a traves de un fichero intermedio, y pone en marcha su ejecucion. Tras la ejecucion de
FreeLing la salida del analisis morfologico es escrita en un fichero llamado ‘salida.txt’
que se encuentra en la carpeta contenedora de la herramienta.
El contenido de dicho fichero es una tabla de valores separados por espacios, siendo cada
palabra analizada una fila, y teniendo cuatro columnas, el termino ”original”, su termino
“estandar” (Ej: en lugar de “un” o “una” devuelve “uno”, o en lugar de “debıa” devuelve
su infinitivo “deber”), su analisis morfologico, y la probabilidad de acierto en ese analisis.
Con termino original se refiere al termino que FreeLing recibio inicialmente pero que tras
la ejecucion ha podido cambiar, como puede ser la unificacion de “Corea de el Norte”,
que va junto y recibe un mismo analisis morfologico, o la separacion de “del” por las
palabras “de” “el”.
Analizar corpus importa despues el contenido de este fichero a una tabla en R y se
queda con todo pero ignorando la probabilidad. Como cada palabra es una fila de la
tabla se extraen las columnas enteras y se concatenan para tener el texto estandar, el
analisis morfologico y el texto ‘original’ completo de cada documento. Una vez extraıda
esta informacion se anade al corpus en la entrada correspondiente a cada texto, en los
campos description para el analisis, heading para el documento estandarizado, y frase
para el texto original con las posibles unificaciones o separaciones hechas por FreeLing.
Los parametros de entrada de Analizar corpus son el VCorpus resultado del modulo
anterior, el directorio donde se encuentra la herramienta FreeLing, y el lenguaje del texto
20
Desarrollo
(“es” por defecto). La salida es un VCorpus que contiene para cada entrada/documento
el texto original, el analisis morfologico, el texto estandarizado y el texto ”original” con
los cambios hechos por FreeLing.
A continuacion se muestra un ejemplo de ejecucion de Analizar corpus (Figura 4.2.1.1).
Como se puede observar el analisis morfologico en el campo $meta$description esta
formado por una serie de etiquetas compuestas por caracteres. El numero de caracteres
de cada analisis depende del tipo de termino que sea, por ejemplo el analisis de un verbo
esta representado por siete caracteres, mientras que el de un signo de puntuacion tan
solo necesita dos.
Ası por ejemplo en el tercer documento, el termino “termino” esta representado en su
analisis morfologico por “VMIS3S0”, que siguiendo las etiquetas asignadas por FreeLing
significa: Verb Main Indicative Past 3 Singular –. Lo que indica que es un verbo principal
en pasado indicativo y en tercera persona del singular. El ultimo caracter es 0 y no
representa nada en este caso porque el verbo no tiene genero. Para mas informacion
acerca del significado de cada una de las etiquetas se recomienda ir al Anexo C con las
referencias de etiquetas en FreeLing.
Como ultima observacion acerca del metodo Analizar corpus, el objetivo de almacenar
el texto estandar es el de ayudar al modulo 4, haciendo que la clasificacion sea mucho
mas sencilla reduciendo variedad en los terminos del texto.
> corpusAnalizado <- Analizar_corpus(corpus = corpusPreparado,
directorio = "D:/", lenguaje = "es")
Corpus analizado correctamente.
21
Desarrollo
Tabla 4.2.1.1: Representacion de corpusAnalizado, resultado de ejecutarAnalizar corpus sobre corpusPreparado.
$content $meta$description $meta$heading $meta$frase
1 ”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo,
a principios de este
mes, de las princi-
pales maniobras con-
juntas militares an-
uales entre Estados
Unidos y Corea del
Sur, que este ano son
mayores que nunca.
El 10 de marzo Corea
del Norte ya habıa
lanzado dos misiles
de corto alcance ha-
cia el mar de Japon.”
”NP00000 VAIP3S0
VMP00SM DP3CP0
NCFP000 RG SPS00
DA0MS0 NCMS000 Fc
SPS00 DD0MS0 NCMS000
Fc SPS00 DA0FP0 AQ0CP0
NCFP000 AQ0FP0
NCCP000 AQ0CP0 SPS00
NP00000 CC NP00000 Fc
CS DD0MS0 NCMS000
VSIP3P0 AQ0CP0 CS
RG Fp DA0MS0 Z SPS00
NCMS000 NP00000 RG
VAII1S0 VMP00SM Z
NCMP000 SPS00 AQ0MS0
NCMS000 SPS00 DA0MS0
NCCS000 SPS00 NP00000
Fp”
”pyongyang haber
intensificar su ame-
naza especialmente
desde el comienzo ,
a principios de este
mes , de el principal
maniobra conjunto
militar anual entre
estados unidos y
corea de el sur ,
que este ano ser
mayor que nunca
. el 10 de marzo
corea de el norte ya
haber lanzar 2 misil
de corto alcance
hacia el mar de
japon .”
”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo
, a principios de
este mes , de las
principales man-
iobras conjuntas
militares anuales en-
tre Estados Unidos
y Corea de el Sur
, que este ano son
mayores que nunca
. El 10 de marzo
Corea de el Norte
ya habıa lanzado
dos misiles de corto
alcance hacia el mar
de Japon .”
2 ”“Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo”. Google
ha tenido un papel
muy relevante en este
avance.”
”Fz NP00000 VMN0000
DI0FS0 NCFS000 SPS00
DI0MS0 NCMS000 SPS00
DI0MS0 NCMS000 CC
VMN0000 DP3CS0
NCMS000 SPS00 DA0MS0
PX2MS0S0 Fz Fp NP00000
VAIP3S0 VMP00SM
DI0MS0 NCMS000 RG
AQ0CS0 SPS00 DD0MS0
NCMS000 Fp”
”“ puedes hacer uno
foto de uno cartel en
otro idioma y enten-
der su significado en
el tuyo ” . google
haber tener uno pa-
pel muy relevante en
este avance .”
”“ Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo ” . Google
ha tenido un papel
muy relevante en este
avance .”
3 ”En carrera he
intentado seguir a
las Yamaha satelite
al principio y me
ha costado porque
perdıa mucho en
las aceleraciones, no
podıa recuperarlo
en la frenada”,
explicaba Pedrosa,
que termino cuarto.”
”SPS00 NCFS000 VAIP1S0
VMP00SM VMN0000
SPS00 DA0FP0 NP00000
NCMS000 SPS00 DA0MS0
NCMS000 CC PP1CS000
VAIP3S0 VMP00SM
CS VMII3S0 RG SPS00
DA0FP0 NCFP000 Fc
RN VMII3S0 VMN0000
PP3C00 SPS00 DA0FS0
VMP00SF Fz Fc VMII3S0
NP00000 Fc PR0CN000
VMIS3S0 NCMS000 Fp”
”en carrera haber in-
tentar seguir a el
yamaha satelite a el
principio y me haber
costar porque perder
mucho en el acel-
eracion , no poder re-
cuperar lo en el fre-
nar ” , explicar pe-
drosa , que terminar
cuarto .”
”En carrera he in-
tentado seguir a las
Yamaha satelite a
el principio y me
ha costado porque
perdıa mucho en las
aceleraciones , no
podıa recuperar lo en
la frenada ” , expli-
caba Pedrosa , que
termino cuarto .”
22
Desarrollo
4.2.2 Transformar corpus
Este metodo transforma el VCorpus de manera que se obtenga uno en el que cada
entrada sea una frase, a diferencia de los pasos anteriores en que cada entrada era un
documento. Ası se tiene una mejor organizacion de los datos a la hora de analizar las
frases y detectar sus tripletas.
Transformar corpus recibe el corpus ya analizado y para cada una de sus entradas coge
su texto original, su analisis, su texto estandar y su texto ”original” y los separa por
los lugares donde haya puntos. Este es un paso mas delicado de lo que parece, ya que
un punto no solo puede encontrarse en el final de cada frase, sino tambien en acronimos
(de ahı la razon para el metodo Preparar corpus) o en numeros decimales. Para ello el
metodo utiliza expresiones regulares [12], no permitiendo que la separacion se haga en
lugares incorrectos como podıan ser los numeros.
Para cada entrada se hace la separacion de su texto original y se introducen las frases por
filas a una nueva tabla, despues se hace lo mismo para el analisis sintactico (separando
por ”Fp”, que representa al punto) y se adjunta a sus frases correspondientes en la tabla.
Lo mismo se hace para la frase estandar y la frase ”original”. Tambien se le anade ahora
un nuevo campo que indica el ındice del documento al que pertenecen. Es decir, para
cada entrada inicial del corpus que podıa ser un documento compuesto por varias frases
se obtiene una tabla con sus diferentes frases distribuidas en filas.
Al final de cada iteracion (entrada del corpus inicial) la tabla actual se une con la tabla
anterior, obteniendo ası una tabla con todas las frases de los diferentes documentos que
es finalmente convertida a un objeto de la clase Corpus.
Como se puede observar en el siguiente comando de ejecucion, el metodo Transfor-
mar corpus tan solo recibe como parametro de entrada el corpus analizado en el paso
anterior.
> corpusTransformado <- Transformar_corpus(corpus = corpusAnalizado)
Corpus transformado correctamente.
23
Desarrollo
Tabla 4.2.2.1: Representacion de corpusTransformado, resultado de Transfor-mar corpus sobre corpusAnalizado.
$content $meta$description $meta$heading $meta$frase $orig
1 ”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo,
a principios de este
mes, de las princi-
pales maniobras con-
juntas militares an-
uales entre Estados
Unidos y Corea del
Sur, que este ano son
mayores que nunca.”
”NP00000 VAIP3S0
VMP00SM DP3CP0
NCFP000 RG SPS00
DA0MS0 NCMS000 Fc
SPS00 DD0MS0 NCMS000
Fc SPS00 DA0FP0 AQ0CP0
NCFP000 AQ0FP0
NCCP000 AQ0CP0 SPS00
NP00000 CC NP00000 Fc
CS DD0MS0 NCMS000
VSIP3P0 AQ0CP0 CS RG”
”pyongyang haber
intensificar su ame-
naza especialmente
desde el comienzo ,
a principios de este
mes , de el principal
maniobra conjunto
militar anual entre
estados unidos y
corea de el sur , que
este ano ser mayor
que nunca”
”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo
, a principios de
este mes , de las
principales man-
iobras conjuntas
militares anuales en-
tre Estados Unidos
y Corea de el Sur
, que este ano son
mayores que nunca”
1
2 ””El 10 de marzo
Corea del Norte ya
habıa lanzado dos
misiles de corto al-
cance hacia el mar de
Japon.”
”DA0MS0 Z SPS00
NCMS000 NP00000 RG
VAII1S0 VMP00SM Z
NCMP000 SPS00 AQ0MS0
NCMS000 SPS00 DA0MS0
NCCS000 SPS00 NP00000
Fp”
”el 10 de marzo
corea de el norte ya
haber lanzar 2 misil
de corto alcance
hacia el mar de
japon .”
”El 10 de marzo
Corea de el Norte ya
habıa lanzado dos
misiles de corto al-
cance hacia el mar de
Japon .”
1
3 ”“Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo”.”
”Fz NP00000 VMN0000
DI0FS0 NCFS000 SPS00
DI0MS0 NCMS000 SPS00
DI0MS0 NCMS000 CC
VMN0000 DP3CS0
NCMS000 SPS00 DA0MS0
PX2MS0S0 Fz”
”“ puedes hacer uno
foto de uno cartel en
otro idioma y enten-
der su significado en
el tuyo ””
”“ Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo ””
2
4 ”Google ha tenido un
papel muy relevante
en este avance.”
”NP00000 VAIP3S0
VMP00SM DI0MS0
NCMS000 RG AQ0CS0
SPS00 DD0MS0 NCMS000
Fp”
”google haber tener
uno papel muy rele-
vante en este avance
.”
”Google ha tenido un
papel muy relevante
en este avance .”
2
5 ”En carrera he
intentado seguir a
las Yamaha satelite
al principio y me
ha costado porque
perdıa mucho en
las aceleraciones, no
podıa recuperarlo
en la frenada”,
explicaba Pedrosa,
que termino cuarto.”
”SPS00 NCFS000 VAIP1S0
VMP00SM VMN0000
SPS00 DA0FP0 NP00000
NCMS000 SPS00 DA0MS0
NCMS000 CC PP1CS000
VAIP3S0 VMP00SM
CS VMII3S0 RG SPS00
DA0FP0 NCFP000 Fc
RN VMII3S0 VMN0000
PP3C00 SPS00 DA0FS0
VMP00SF Fz Fc VMII3S0
NP00000 Fc PR0CN000
VMIS3S0 NCMS000 Fp”
”en carrera haber in-
tentar seguir a el
yamaha satelite a el
principio y me haber
costar porque perder
mucho en el acel-
eracion , no poder re-
cuperar lo en el fre-
nar ” , explicar pe-
drosa , que terminar
cuarto .”
”En carrera he in-
tentado seguir a las
Yamaha satelite a
el principio y me
ha costado porque
perdıa mucho en las
aceleraciones , no
podıa recuperar lo en
la frenada ” , expli-
caba Pedrosa , que
termino cuarto .”
3
24
Desarrollo
4.3 Modulo 3: Deteccion de tripletas
En este modulo se hace la parte mas importante de la herramienta, la deteccion de las
tripletas o estructuras SVO (Sujeto + Verbo + Objeto directo). Consiste en detectar
dentro de cada frase contenida en el corpus su estructura SVO, tambien denominada
tripleta, y extraerla de la frase eliminando todo lo demas. Debido a la complejidad del
lenguaje natural, especialmente del castellano, se ha tenido que acotar este analisis. En
concreto, como limitacion importante y en caso de una frase seguida por frases subor-
dinadas, tan solo se cogera la tripleta de la frase principal, y como maximo tambien
la siguiente tripleta encontrada. Las limitaciones y problematicas relacionadas con el
modulo de extraccion se detallan en los capıtulos Observaciones y Problemas encontra-
dos.
El funcionamiento principal de este modulo es el de un analisis sintactico, siendo la
mayor diferencia una criba al final en la que se eliminan las partes no interesantes de la
frase. Este modulo contiene en realidad un solo metodo llamado Detectar, pero debido
a su complejidad se ha dividido en 3 metodos que se engloban en el primero, habiendo
un metodo para cada una de las tres fases de la deteccion.
El modulo 3 esta formado por cuatro scripts, uno para cada fase y otro para el metodo
Detectar que engloba al resto. Los scripts son ”Modulo 3 Fase1.R”, ”Modulo 3 Fase2.R”,
”Modulo 3 Fase3.R” y ”Modulo 3 Deteccion.R”.
Debido a la escala de este modulo y a su manera de funcionar, como ejemplo se va a
coger tan solo una de las frases anteriormente analizadas, ya que de otra manera serıan
ejemplos demasiado extensos.
La frase con la que se va a acompanar ahora la explicacion es la numero 2 de corpus-
Transformado: “El 10 de marzo Corea del Norte ya habıa lanzado dos misiles de corto
alcance hacia el mar de Japon.” .
25
Desarrollo
4.3.1 Deteccion Fase1
Consiste en hacer una serie de uniones “sencillas” que relacionen determinantes, ad-
jetivos, adverbios, numerales, nombres y pronombres entre sı siempre que haya una
relacion entre ellos.
Recibe como parametros de entrada una frase con su texto ”original” modificado por
FreeLing, su analisis morfologico y su frase estandarizada. Inicialmente el metodo hace
dos tablas de la clase DataFrame[13] con estas variables de entrada, una sobre la que
se ira introduciendo la informacion de la deteccion (analisisDF ), y otra estatica que
guardara el analisis morfologico y la frase estandarizada para acompanar al analisis de
los terminos (infoDF ). Las filas de ambas tablas seran cada uno de los terminos de la
frase.
La tabla creada infoDF sera la misma a traves de todo el proceso de deteccion para
la frase, y contiene para cada fila la palabra, su cadena de caracteres del analisis mor-
fologico, la palabra estandarizada y, para facilitar la lectura del analisis, una columna
para cada uno de los caracteres que componen la cadena, empezando por la clase y
seguido por set1 hasta set6.
Figura 4.3.1.1: Captura de la tabla infoDF.
La tabla analisisDF tiene tambien una fila para cada palabra, y contiene ademas de la
palabra otras dos columnas, fase1 y detalle fase1, la primera de las cuales originalmente
contendra el primer caracter de la cadena de analisis de cada palabra (equivalente a la
columna clase de infoDF ). Sobre las columnas fase1 y detalle fase1 se ira escribiendo
la informacion del analisis de esta fase.
Ya con estas dos tablas listas es cuando empieza el verdadero funcionamiento de De-
teccion Fase1. Recorriendo una a una las palabras contenidas en analisisDF se van
26
Desarrollo
analizando una serie de combinaciones basadas en reglas del castellano y comprobando
si dicha palabra las cumple con las palabras de su alrededor, haciendo una union entre
ellas en caso afirmativo. Las uniones realizadas en la fase 1 son siempre entre dos ele-
mentos, pero el proceso es reiterativo, de manera que se puede hacer una union de un
elemento individual con una union ya hecha en otra iteracion.
Las reglas basicas que se tienen en cuenta en esta fase son:
• Regla 1: determinante + determinante. D + D (Ej: “todos los”).
• Regla 2: determinante + nombre. D + N (Ej: “el oso”).
• Regla 3: determinante + adjetivo. D + A (Ej: “los grandes”).
• Regla 4: adjetivo + nombre. A + N (Ej: “viejo ayuntamiento”).
• Regla 5: nombre + adjetivo. N + A (Ej: “edificio alto”).
• Regla 6: adverbio + adjetivo. R + A (Ej: “muy alto”).
• Regla 7: determinante + pronombre. D + P (Ej: “el otro”).
• Regla 8: adverbio + adverbio. R + R (Ej: “mucho mas”).
• Regla 9: adverbio + nombre. R + N (Ej: “mas tiempo”)
• Regla 10: adjetivo + adjetivo. A + A (Ej: “rojo brillante”).
• Regla 11: determinante + numero. D + Z (Ej: “las cuatro”).
• Regla 12: numero + nombre. Z + N (Ej: “7 gatos”).
Para cada una de ellas se comprueba si la combinacion de las dos palabras va acompanada
por una correcta relacion de genero y numero, si es conveniente. Si no es el caso se ignora
la union de los terminos, pero si la combinacion es correcta se guarda un identificador
unico de la union en la columna fase1 para ambos elementos, y se almacena el detalle
de la union que se ha hecho en detalle fase1 (Ej: “D+N”). En caso de que uno de los
elementos ya se encuentre en una union, se saca el identificador de la union y se le asigna
tambien al nuevo elemento.
Al finalizar la ejecucion de Deteccion Fase1 el metodo devuelve un objeto de clase lista
conteniendo las dos tablas infoDF (mostrada anteriormente) y analisisDF.
27
Desarrollo
> fase1 <- Deteccion_Fase1(texto = corpusTransformado[[2]]$meta$frase,
analisis = corpusTransformado[[2]]$meta$description,
estandar = corpusTransformado[[2]]$meta$heading)
Figura 4.3.1.2: Captura de analisisDF tras la ejecucion de Deteccion Fase1.
La captura mostrada en la figura 4.3.1.2 muestra el resultado de la fase 1, en el que se
pueden ver las diferentes uniones que se han hecho y sus respectivas descripciones de
la relacion. Por ejemplo en las palabras “corto alcance”, filas 12 y 13, se ha hecho una
union de A+N (Adjetivo + Nombre) y se le ha asignado el identificador “Union13”.
28
Desarrollo
4.3.2 Deteccion Fase2
Con las uniones realizadas en la fase 1 y la tabla de analisis infoDF el metodo Detec-
cion Fase2 va un paso adelante y encuentra estructuras mas complejas que pueden estar
conformadas por diferentes uniones o por uniones y elementos individuales no analiza-
dos en la fase anterior. Tambien hace una union de estructuras verbales, y mediante
una lista de verbos preposicionales analiza cuales de ellos han de ir obligatoriamente
acompanados de una preposicion. Una vez encontrada su preposicion, enlaza esa estruc-
tura preposicional con el verbo.
Ademas de hacer estas uniones, la fase 2 marca algunas estructuras de la frase, ya
sean uniones o no, que no forman parte de una estructura SVO, como podrıan ser
complementos circunstanciales o frases subordinadas sin estructura verbal.
Inicialmente el metodo recibe como parametro de entrada la lista con las tablas in-
foDF y analisisDF del metodo anterior. Despues utiliza tambien un archivo “ver-
bos prep full.csv” que contiene una lista de verbos preposicionales con sus preposiciones,
verbos que solo tienen sentido si van acompanados de una preposicion. El archivo con-
tiene 3 columnas, el verbo, la preposicion, y si el verbo lleva “se” (Ej: levantarse) o
no.
El funcionamiento del metodo esta dividido en una serie de pasos, cada uno con sus
propias reglas y en el siguiente orden:
1. Hacer uniones de segundo nivel. En este paso el metodo recorre todas las palabras
y hace uniones de segundo grado conectadas por “y” y “de”. Estas nuevas uniones
estan regidas por nueve reglas y funcionan de forma similar a las reglas de la fase
1. En el caso de cumplirse sus condiciones se hara una nueva union que contenga
ambos elementos y su conector.
• Regla 1: union + “de” + union (Ej: “los caballeros de la mesa cuadrada”).
• Regla 2: union + “de” + nombre (Ej: “el cepillo de Sofıa”).
• Regla 3: nombre + “de” + union (Ej: “Reyes de la Edad Media”).
• Regla 4: nombre “de” nombre (Ej: “pincho de tortilla”).
• Regla 5: union + “y” + union (Ej: “los invitados y sus acompanantes”).
• Regla 6: nombre + “y” + nombre (Ej: “Pedro y Juan”).
• Regla 7: numero + “de” + union (Ej: “tres de los caballeros”).
• Regla 8: union + “y” + nombre (Ej: “los hermanos y Jose”).
29
Desarrollo
• Regla 9: nombre + “y” + union (Ej: “Francisco y sus primos”).
• Regla 10: todo nombre aislado.
2. Marcar para eliminar uniones. El metodo se basa en la idea de que toda union
liderada por una preposicion (a excepcion de “de”) es innecesaria si se quiere tan
solo la estructura SVO. Por este principio toda union de este estilo se marca en
un principio con la etiqueta de “ELIMINAR UNION” (Ej: “en los matorrales”).
3. Marcar para eliminar frases subordinadas sin estructura verbal. El metodo recorre
toda la frase y guarda dos vectores, uno con las posiciones de los signos de pun-
tuacion en la frase, y otro con las posiciones de los verbos. En el caso de encontrar
que entre dos signos de puntuacion hay una frase con dos o mas elementos y
que no contiene un verbo, el metodo marca toda esa estructura con la etiqueta
“ELIMINAR” (Ej: “Y el arbol, aunque muy fuerte, se cayo.”).
4. Enlazar verbos preposicionales con sus preposiciones. En el castellano es muy
comun utilizar verbos que deben ir acompanados de una preposicion para tener
un significado (Ej: “dar con algo”), y es por ello que no es justo que se eliminen
todas las uniones lideradas por una preposicion. Para resolver este problema se
ha creado un archivo (”verbos prep full.csv”) con los verbos preposicionales y las
preposiciones que les acompanan .
Figura 4.3.2.1: Captura de contenido en el archivo ”verbos prep full.csv”.
En esta parte el metodo recorre uno a uno los verbos que se encuentran en la frase
y los busca en la lista de verbos preposicionales, si estan extrae las preposiciones
30
Desarrollo
que permiten y las contrasta con las preposiciones que rodean al verbo dentro de
la frase (y dentro de la misma frase subordinada). En caso de coincidir alguna
de ellas, elimina la etiqueta “ELIMINAR UNION” asignada anteriormente a la
preposicion, y le asigna una nueva etiqueta “PREP SALVAR” para evitar que se
elimine. En caso de coincidir mas de una preposicion el metodo escoge la que se
encuentre mas cerca del verbo en terminos de numero de palabras.
5. Marcar para eliminar otros complementos circunstanciales. Aquı el metodo, con la
ayuda de una lista de terminos que implican circunstancia, modo, etc (Ej: cuando,
para, por, segun, etc.) marca, si no se ha hecho ya, otras uniones con la eti-
queta “ELIMINAR”, mediante la cual esta indicando que se va a eliminar todo lo
encontrado despues de dicho termino hasta el proximo signo de puntuacion.
Toda la informacion de las nuevas uniones y elementos a eliminar es guardada en la
tabla analisisDF en las nuevas columnas fase2 y detalle fase2 de la misma manera que
se hizo en la fase 1.
Tras la ejecucion el metodo Deteccion Fase2 devuelve tambien un objeto de la clase lista
con las tablas infoDF y analisisDF.
> fase2 <- Deteccion_Fase2(fase1)
Figura 4.3.2.2: Captura de analisisDF tras la ejecucion de Deteccion Fase2.
Como se puede ver en la captura (Figura 4.3.2.2), se han formado ahora cuatro uniones
de segundo nivel (Union21, Union22, Union23 y Union24). Parecen uniones bastante ac-
ertadas, aunque este es un ejemplo sencillo y no muestra el funcionamiento completo del
31
Desarrollo
metodo. Como era de esperar las uniones Union12 y Union13 se han enlazado para for-
mar Union22 (“dos misiles de corto alcance”), y se observa en la columna ‘detalle fase2’
que se trata de una union de uniones de primer nivel, unidas por “de”.
No todas las uniones han sido de varios elementos, por ejemplo en la fila 5 “Corea de el Norte”
ha sido asignado como una nueva union siguiendo la regla 10 del metodo.
Por otro lado se observa como la union Union23 (resultado de Union14 + “de” + nombre)
se ha marcado ahora con la etiqueta “ELIMINAR UNION”, debido a que va precedido
por la preposicion “hacia” y no es una preposicion que acompane a un verbo preposicional
de la frase.
Sin embargo tambien esta la union Union21 (“El 10 de marzo”), que obviamente deter-
mina un tiempo en la frase y no pertenece a una tripleta, pero que no se ha marcado
con “ELIMINAR UNION” por no ir precedido de una preposicion.
32
Desarrollo
4.3.3 Deteccion Fase3
Con el resultado de la fase 2, Deteccion Fase3 hace una eliminacion de todos los ele-
mentos marcados para eliminar dentro de la tabla analisisDF. Ademas de hacer estas
eliminaciones, la fase 3 hace una criba adicional por la que elimina uniones relacionadas
con tiempos, y por la que solo permite un total de dos estructuras SVO en una misma
frase.
El metodo recibe como parametro de entrada la lista devuelta por Deteccion Fase2, en la
que se encuentran las tablas infoDF y analisisDF. Con la informacion de las etiquetas
de analisisDF el metodo recorre la tabla entera eliminando las entradas de la tabla
etiquetadas para tal fin.
En caso de encontrar una etiqueta “ELIMINAR” borra su entrada dentro de la tabla. En
caso de encontrar una etiqueta “ELIMINAR UNION”, el metodo extrae el identificador
de la union de segundo nivel a la que se refiere la etiqueta, y borra todas las entradas
que formen parte de esa union.
Para quedarse con dos estructuras SVO el metodo crea un vector en el que guarda
las posiciones de los signos de puntuacion. Con esta informacion, si fuese el caso de
haber mas de dos estructuras SVO en la frase, descartarıa las siguientes asignandoles la
etiqueta “ELIMINAR” y eliminando sus entradas de la tabla.
Despues de esto recorre todas las uniones de segundo nivel, y busca entre ellas una serie
de palabras que las relacionen directamente con tiempos. Para ello utiliza una lista
interna de palabras (Ej: “lunes”, “febrero”, etc.), y en el momento en que una union
contenga una de dichas palabras se le asignara la etiqueta “ELIMINAR”, eliminandola
de la tabla despues. Por ultimo el metodo elimina las palabras que se hayan quedado
sin asignar etiqueta (si no se han asignado deberıa ser que no interesan), a excepcion de
algunas indicadas al metodo (Ej: “no”).
El resultado final es la tabla analisisDF en la que se han eliminado las entradas (terminos)
no necesarias dentro de la frase, es decir, la tabla contiene ahora la estructura o estruc-
turas SVO (tripletas).
33
Desarrollo
> fase3 <- Deteccion_Fase3(fase2)
Figura 4.3.3.1: Captura de analisisDF tras la ejecucion de Deteccion Fase3.
Como se observa en la captura final de analisisDF (Figura 4.3.3), en las columnas
fase3 y detalle fase3 no se encuentra ninguna etiqueta. Esto es debido a que el metodo
Deteccion Fase3 solo asigna etiquetas para eliminar, cuyas entradas luego elimina, por
lo que dejan de aparecer en la tabla. Se puede apreciar tambien que el termino “ya” no
aparece.
Al final, para el ejemplo se obtiene la tripleta “Corea de el Norte habıa lanzado dos mis-
iles de corto alcance”. Siendo el sujeto “Corea de el Norte”, el verbo “habıa lanzado”,
y el objeto directo “dos misiles de corto alcance”.
4.3.4 Detectar
El metodo ‘Detectar ’ engloba las tres fases anteriormente descritas y las aplica a cada
una de las frases contenidas en el corpus. Recibe como unico parametro de entrada el
corpus devuelto por Transformar corpus, que contiene una frase por cada entrada. Para
hacer esto basta con un simple bucle en el cual, mientras no se hayan recorrido todas
las frases (entradas del corpus) sigue avanzando. Para cada iteracion extrae primero del
corpus el texto ‘original’ de la frase n, su analisis morfologico, y su frase estandarizada,
aplica las fases 1, 2 y 3 (cada una sobre el resultado de la anterior), y de la ultima
fase extrae la frase contenida en la tabla analisisDF (tripleta). Dicha tripleta es luego
introducida en un nuevo campo del corpus llamado ‘meta$deteccion’.
Como salida devuelve el VCorpus con toda la informacion de los modulos anteriores y
las nuevas tripletas extraıdas y contenidas en el nuevo campo. Debido a la poca utilidad
que tiene ahora el campo ‘$meta$description’ con el analisis morfologico de cada palabra
y a su consecuente aumento de espacio requerido, en la representacion del resultado se
ha eliminado su columna. A pesar de que en el corpus realmente siga estando.
34
Desarrollo
> corpusDetectado <- Detectar(corpusTransformado)
Tripletas detectadas correctamente.
Tabla 4.3.4.1: Representacion de corpusDetectado, resultado de ejecutar Detectarsobre corpusTransformado.
$content $meta$heading $meta$frase $orig $deteccion
1 ”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo,
a principios de este
mes, de las princi-
pales maniobras con-
juntas militares an-
uales entre Estados
Unidos y Corea del
Sur, que este ano son
mayores que nunca.”
”pyongyang haber
intensificar su ame-
naza especialmente
desde el comienzo ,
a principios de este
mes , de el principal
maniobra conjunto
militar anual entre
estados unidos y
corea de el sur , que
este ano ser mayor
que nunca”
”Pyongyang ha in-
tensificado sus ame-
nazas especialmente
desde el comienzo
, a principios de
este mes , de las
principales man-
iobras conjuntas
militares anuales en-
tre Estados Unidos
y Corea de el Sur
, que este ano son
mayores que nunca”
1 ”Pyongyang ha
intensificado sus
amenazas , que
son mayores que
nunca”
2 ””El 10 de marzo
Corea del Norte ya
habıa lanzado dos
misiles de corto al-
cance hacia el mar de
Japon.”
”el 10 de marzo
corea de el norte ya
haber lanzar 2 misil
de corto alcance
hacia el mar de
japon .”
”El 10 de marzo
Corea de el Norte ya
habıa lanzado dos
misiles de corto al-
cance hacia el mar de
Japon .”
1 ”Corea de el Norte
habıa lanzado
dos misiles de
corto alcance .”
3 ”“Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo”.”
”“ puedes hacer uno
foto de uno cartel en
otro idioma y enten-
der su significado en
el tuyo ””
”“ Puedes hacer una
foto de un cartel en
otro idioma y enten-
der su significado en
el tuyo ””
2 ”Puedes hacer
una foto de un
cartel y entender
su significado ””
4 ”Google ha tenido un
papel muy relevante
en este avance.”
”google haber tener
uno papel muy rele-
vante en este avance
.”
”Google ha tenido un
papel muy relevante
en este avance .”
2 ”Google ha
tenido un papel
muy relevante .”
5 ”En carrera he
intentado seguir a
las Yamaha satelite
al principio y me
ha costado porque
perdıa mucho en
las aceleraciones, no
podıa recuperarlo
en la frenada”,
explicaba Pedrosa,
que termino cuarto.”
”en carrera haber in-
tentar seguir a el
yamaha satelite a el
principio y me haber
costar porque perder
mucho en el acel-
eracion , no poder re-
cuperar lo en el fre-
nar ” , explicar pe-
drosa , que terminar
cuarto .”
”En carrera he in-
tentado seguir a las
Yamaha satelite a
el principio y me
ha costado porque
perdıa mucho en las
aceleraciones , no
podıa recuperar lo en
la frenada ” , expli-
caba Pedrosa , que
termino cuarto .”
3 ”he intentado
seguir a las
Yamaha satelite
y me ha costado
, no podıa re-
cuperar lo en la
frenada”
35
Desarrollo
4.4 Modulo 4: Clasificacion de tripletas
Consiste en hacer una clasificacion de los textos sobre ciertos ambitos o temas para ası
saber si un documento es mas probable que pertenezca a uno u otro, y saber cual de las
tripletas contenidas en el es la mas relevante dentro de dicho ambito.
esta comparacion entre diferentes temas se puede hacer con la cantidad de temas que
se desee, de manera que al final se tenga un peso para cada uno de los textos y tema
y se pueda ver cual ha sido el mas relevante de ellos. El modulo de clasificacion esta
compuesto por tres metodos S4: Crear diccionario(), Clasificacion() y Exportar().
Todos ellos se encuentran en un mismo script llamado ”Modulo 4 Clasificacion.R”.
Para acompanar la explicacion de este modulo se va a analizar el ejemplo anterior con un
dos ambitos, un ambito deportivo y otro de tecnologıa. En cuanto a las representaciones
del corpus, a pesar de seguir conteniendo toda la informacion anteriormente almacenada,
tan solo se va a mostrar el texto original, el texto estandarizado, el origen (documento
al que pertenecen) y la tripleta detectada, ademas de los nuevos campos que se vayan
creando.
4.4.1 Crear diccionario
El metodo Crear diccionario es una ayuda para la creacion de un nuevo fichero que
contenga las palabras relevantes de un tema en concreto (diccionario de terminos). Para
ello hace uso de un fichero creado manualmente en el que se encuentran textos que
pertenezcan al tema del cual se quiere crear el diccionario (ej: conflicto, tecnologıa,
deportes, etc.).
Para aprovechar al maximo este diccionario y el trabajo realizado anteriormente, el
metodo Crear diccionario hace uso internamente de los metodos Crear corpus, Preparar corpus
y Analizar corpus.
Los parametros de entrada del metodo son tema (tema sobre el que se quiere hacer el
diccionario), ruta fichero (ruta completa al fichero que contiene los textos del tema),
ruta sustituciones (ruta al fichero de sustituciones que usa el metodo Preparar corpus)
y directorio freeling (indica el lugar donde se encuentra la herramienta FreeLing).
Lo primero que hace el metodo es importar el texto contenido en el fichero del que se van
a sacar los terminos. Para ello se utiliza el metodo Crear corpus, que permite importar
archivos de texto plano, Excel o CSV, aunque para hacer el metodo mas sencillo no se
36
Desarrollo
permiten los parametros opcionales para la importacion como se hacıa en Crear corpus.
Por esta razon es recomendable trabajar en este paso con un fichero de texto plano, y
en caso de utilizar CSV y Excel introducir el texto en la primera columna, sin cabecera
y con separador “;” en caso de haber mas de una columna para el CSV. Tambien se
recomienda trabajar siempre con UTF-8 para evitar problemas de codificacion derivados
de caracteres especiales como “n” o tildes, tal y como se especifica en los requisitos.
Una vez se ha importado el texto y se ha creado el corpus, el metodo utiliza Preparar corpus,
para lo que utiliza el fichero de sustituciones explicado en su apartado correspondiente.
Una vez preparado el corpus se pasa a la funcion Analizar corpus, cuyo fin no es el de
sacar un analisis morfologico, sino sacar las palabras ‘estandar’ (palabras sin numero y
verbos en infinitivo), que mas adelante haran mas efectiva la busqueda de palabras.
Cuando se ha sacado el texto estandar de cada entrada del corpus ($meta$heading) el
metodo crea, por medio del metodo TermDocumentMatrix del paquete tm, una matriz
en la que se tiene por filas cada uno de los terminos, y por columnas cada uno de los
documentos. En cada campo se encuentra el numero de apariciones del termino de su
fila en el documento de su columna. En este paso se aprovecha tambien para hacer
un filtrado para eliminar los terminos que nunca seran relevantes, como determinantes,
artıculos, conjunciones, etc.
La distribucion de frecuencias de los terminos no es del todo relevante, por lo que de
ahı se extrae solamente los nombres de filas (los terminos sin repetir). Esto se convierte
luego a una tabla en la que se tienen los terminos en una columna palabra, y en otra
columna peso sus pesos (por defecto 1). Esta tabla es finalmente exportada a un Excel
con el nombre del tema.
Para finalizar la creacion del diccionario es recomendable que una vez ejecutado este
metodo se mire a mano el fichero y se modifiquen los pesos de aquellas palabras que a
juicio del usuario sean mas importantes dentro de ese tema. Los pesos deberıan ir de 1
(sin relevancia) a 15 (altamente relevante).
37
Desarrollo
A continuacion se muestra un ejemplo de la creacion de un diccionario para el tema
”conflicto” (muy pequeno, simplemente para ilustrar). El texto sobre el que se va a
basar el diccionario, contenido en ”conflicto.txt” es:
Una serie de atentados terroristas han causado este lunes al menos 78 muertos y mas
de un centenar de heridos en las ciudades costeras sirias de Latakia y Tartous. El
Estado Islamico (ISIS por sus siglas en ingles) ha reivindicado poco despues la au-
torıa de esta cadena de ataques, los peores que ha sufrido este bastion alauı, con-
trolado por el regimen de Bachar el Asad desde el inicio del conflicto. El Obser-
vatorio Sirio para los Derechos Humanos, ha cifrado el numero de vıctimas en 142,
en el que se considera el ataque terrorista mas sangriento desde que el pasado 27 de
febrero se sello en Ginebra un alto el fuego parcial con la mediacion de la ONU. [14]
> Crear_diccionario(tema="conflicto",
ruta_fichero="D:/Codigo/data/conflicto.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling="D:/")
Corpus creado correctamente.
Corpus preparado correctamente.
Corpus analizado correctamente.
Fichero "conflicto.xlsx" creado correctamente en data.
Figura 4.4.1.1: Captura de contenido en ”conflicto.xlsx” despues deCrear diccionario.
38
Desarrollo
Figura 4.4.1.2: Captura de contenido en ”conflicto.xlsx” despues de modificacion depesos por el usuario.
39
Desarrollo
4.4.2 Clasificar
En este metodo se hace la clasificacion del corpus dentro de un tema concreto de manera
que se devuelva para cada una de las frases contenidas una puntuacion de relevancia de
0 a 15.
Como parametros de entrada el metodo Clasificar tan solo requiere el corpus devuelto
por Detectar, y el nombre del tema sobre el que se quiere clasificar.
Para hacer esto el metodo Clasificar lee el diccionario creado anteriormente con el nom-
bre del tema (Ej: ”conflicto.xlsx”) y comprueba para cada frase del corpus que palabras
se encuentran en ese diccionario. Para ello recorre el corpus, y para cada una de sus
entradas extrae su frase ”estandarizada” (campo $meta$heading), separa los terminos
contenidos en ella y los almacena en una lista. Con esta lista y el diccionario de terminos
comprueba que terminos se encuentran en ambos, y cada vez que encuentre un termino
de la frase en el diccionario extrae su peso. Al final el peso de todos los terminos encon-
trados es sumado para dar un total para la frase, cuyo valor es dividido por el numero
de palabras contenidas en ella. De esta manera se evita que una frase sea mas relevante
por el hecho de ser mas larga, consiguiendo ası una valoracion media de cada palabra.
Una vez hecho esto para cada frase, el metodo almacena en un nuevo campo del corpus
$meta$peso el tema correspondiente y peso de la frase (Ej: “conflicto-4.2”). Este nuevo
campo contiene una lista, por lo que si se decide clasificar el corpus sobre mas temas estas
nuevas puntuaciones se iran uniendo a las clasificaciones anteriores (Ej: “conflicto-4.2
deportes-11.5”).
El metodo devuelve al final el corpus con los pesos y sus temas para cada una de las
frases.
En el ejemplo mostrado a continuacion (Tabla 4.4.2.1) se puede ver como, a pesar de ser
puntuaciones relativamente bajas, existe una clara diferencia en las puntuaciones acorde
a los temas de los que trata cada frase. Se observa que tal y como se esperarıa, la frase
5 perteneciente a Moto GP tiene la mejor puntuacion de deportes, y las frases 3 y 4 que
hablan sobre Google tienen las mejores puntuaciones de tecnologıa.
Por otro lado se ve que la frase 2 tiene un 1.8 en deportes, lo que podrıa ser debido a
las palabras “lanzar” o “alcance”, aunque no es una puntuacion preocupante.
Hay que destacar que el metodo Clasificar no esta hecho para medir la relevancia global
de cada frase, sino hacer un contraste entre las mismas y ver cual es la mas relevante
dentro de un tema.
40
Desarrollo
> corpusClasificado <- Clasificar(corpusDetectado, tema="deportes")
Corpus clasificado correctamente.
> corpusClasificado <- Clasificar(corpusClasificado,tema="tecnologia")
Corpus clasificado correctamente.
Tabla 4.4.2.1: Resultado de corpus tras aplicar dos clasificaciones consecutivas (de-portes y tecnologıa).
$content $meta$heading $meta$orig
$meta$detec-cion
$meta$peso
1 ”Pyongyang ha inten-
sificado sus amenazas
especialmente desde el
comienzo, a principios de
este mes, de las prin-
cipales maniobras con-
juntas militares anuales
entre Estados Unidos y
Corea del Sur, que este
ano son mayores que
nunca.”
”pyongyang haber
intensificar su ame-
naza especialmente
desde el comienzo ,
a principios de este
mes , de el principal
maniobra conjunto
militar anual en-
tre estados unidos y
corea de el sur , que
este ano ser mayor que
nunca”
1 ”Pyongyang
ha intensi-
ficado sus
amenazas
, que son
mayores que
nunca”
”deportes-1”
”tecnologia-
1.57”
2 ””El 10 de marzo Corea
del Norte ya habıa lan-
zado dos misiles de corto
alcance hacia el mar de
Japon.”
”el 10 de marzo
corea de el norte ya
haber lanzar 2 misil de
corto alcance hacia el
mar de japon .”
1 ”Corea de el Norte
habıa lanzado
dos misiles de
corto alcance
.”
”deportes-1.8”
”tecnologia-1”
3 ”“Puedes hacer una foto
de un cartel en otro id-
ioma y entender su sig-
nificado en el tuyo”.”
”“ puedes hacer uno foto
de uno cartel en otro id-
ioma y entender su sig-
nificado en el tuyo ””
2 ”Puedes hacer
una foto de un
cartel y enten-
der su signifi-
cado ””
”deportes-1”
”tecnologia-
2.5”
4 ”Google ha tenido un pa-
pel muy relevante en este
avance.”
”google haber tener uno
papel muy relevante en
este avance .”
2 ”Google ha
tenido un
papel muy
relevante .”
”deportes-1”
”tecnologia-
3.33”
5 ”En carrera he inten-
tado seguir a las Yamaha
satelite al principio y me
ha costado porque perdıa
mucho en las acelera-
ciones, no podıa recuper-
arlo en la frenada”, ex-
plicaba Pedrosa, que ter-
mino cuarto.”
”en carrera haber inten-
tar seguir a el yamaha
satelite a el principio y
me haber costar porque
perder mucho en el acel-
eracion , no poder recu-
perar lo en el frenar ”
, explicar pedrosa , que
terminar cuarto .”
3 ”he inten-
tado seguir a
las Yamaha
satelite y me
ha costado
, no podıa
recuperar lo
en la frenada”
”deportes-
4.22”
”tecnologia-
0.86”
41
Desarrollo
4.4.3 Exportar
Tal y como indica su nombre, el metodo Exportar finaliza todo el proceso de preparacion,
extraccion y clasificacion de tripletas creando un fichero Excel final que contenga las
tripletas y sus pesos para cada tema. Ademas de exportar la informacion, le da un
repaso a las tripletas para que queden mejor presentables. Toda la informacion para la
exportacion viene del VCorpus resultado del metodo clasificar, por lo que el corpus es
el unico parametro de entrada, junto con el parametro ‘directorio’ que indica la ruta a
donde se desea exportar.
La salida final esta formada por un Excel que contiene una tabla con las siguientes
columnas para cada frase: Texto Original, Tripleta, N Documento, Tema 1, Tema 2,
etc. Las columnas de los temas seran dinamicas, por lo que no habra un numero fijo
sino que dependera del numero de clasificaciones que se hayan ejecutado sobre el corpus,
y no se llamaran ‘Tema n’ sino que contendran el nombre del tema.
El metodo primero crea una tabla, que es la que se va a exportar, y crea las columnas
Texto Original, Tripleta, N Documento, y cuenta el numero de clasificaciones que se han
hecho para crear una columna para tema. Despues recorre el corpus extrayendo para
cada frase su tripleta, eliminando puntuaciones y espacios innecesarios y asegurandose de
que comienza por letra mayuscula y termina por punto (todo con expresiones regulares).
Tambien extrae la lista de pesos para cada frase, separando las puntuaciones y los temas
con expresiones regulares e introduciendo cada peso en su columna correspondiente.
Toda esta informacion se guarda en la tabla para cada frase, para ser finalmente expor-
tada en un archivo llamado ”salida.xlsx”.
A continuacion se muestra una captura del resultado final (Figura 4.4.3.1) para el ejem-
plo con el que se ha acompanado la explicacion de los metodos desde el principio.
Este resultado representa la composicion secuencial de Crear corpus, Preparar corpus,
Analizar corpus, Transformar corpus, Detectar, Clasificar (junto a Crear diccionario) y
Exportar.
42
Desarrollo
> Exportar(corpusClasificado, "D:/Datos/")
Fichero "salida.xlsx" creado correctamente.
Figura 4.4.3.1: Captura del contenido de ”salida.xlsx”.
43
Apartado 5
HERRAMIENTAS EXTERNAS
En este apartado se detalla el uso de las herramientas externas utilizadas, en concreto
FreeLing, cuya ayuda ha sido vital para el desarrollo del modulo de deteccion de tripletas.
Tambien se hace mencion de los paquetes de R utilizados durante el proyecto.
5.1 FreeLing
FreeLing es una suite de herramientas de analisis de codigo abierto. Es una librerıa de
C++ que proporciona multitud de funcionalidades de analisis de lenguajes, entre las
que esta el analisis morfologico de una gran variedad de idiomas.
La herramienta es desarrollada y mantenida por el Centro de Investigacion TALP de la
Universidad Politecnica de Cataluna, y ha sido publicada bajo la licencia GNU de la
Fundacion de Software Abierto.
Entre las muchas funcionalidades que ofrece, la que ha interesado para el desarrollo
del proyecto es el analisis morfologico, en concreto del castellano, aunque ofrece mas
lenguajes. Su ejecucion se ha tenido que enfocar a R, por lo que ha sido necesario hacer
una comunicacion entre ambos entornos.
A continuacion se detalla la comunicacion que se ha hecho entre el metodoAnalizar corpus
y FreeLing para sacar el analisis morfologico de un texto dado (todo lo descrito esta in-
cluido en Analizar corpus y se hace con R). Para ayudar a la comprension o repeticion
del proceso, se incluyen las secciones de codigo.
1. Se crea un archivo ”entrada.txt”, con codificacion UTF-8, en el que se escribe el
texto que se desea analizar (contenido en la variable texto).
44
Herramientas Externas
Figura 5.1.0.1: Comandos en R para la escritura del texto en ”entrada.txt”.
2. Se crea un archivo ”freeling.bat”, en el que se escriben los comandos de cmd
necesarios para ejecutar el analisis morfologico, cuya secuencia se forma incluyendo
los directorios y otros parametros dados al ejecutar el metodo Analizar corpus, y
se ejecuta ”freeling.bat” (ejecucion de la herramienta).
Figura 5.1.0.2: Secuencia de comandos escrita desde R.
Figura 5.1.0.3: Contenido de los comandos en ”freeling.bat”.
Figura 5.1.0.4: Captura del contenido en ”salida.txt”.
3. Se lee el contenido de ”salida.txt” donde se ha guardado el resultado del analisis.
Figura 5.1.0.5: Comandos en R para leer el archivo de salida y convertirlo a unatabla.
45
Herramientas Externas
Figura 5.1.0.6: Captura de la tabla data con el analisis morfologico.
Despues de este ultimo paso ya se tiene la informacion del analisis morfologico en el
entorno de R, cuyo contenido es mas adelante separado para hacer lo conveniente con
cada parte.
5.2 Paquetes de R
Tan solo se ha necesitado la ayuda de tres librerıas de R, ya que la mayor parte del
proceso se ha hecho manualmente.
• Paquete tm: incluye una serie de metodos y clases para aplicaciones en R de
minerıa de texto. Este paquete ha sido fundamental por su implementacion de la
clase Corpus y VCorpus.
Ha sido creado por Ingo Feinerer, Kurt Hornik y Artifex Software Inc. y mantenido
por Ingo Feinerer. El paquete requiere las librerıas parallel, slam, stats, tolos, utils
y graphics para su funcionamiento.
• Paquete stringr : contiene metodos sencillos para la preparacion de texto en R. Ha
sido creado por Hadley Wickham y RStudio, y mantenido por Hadley Wickham.
Para el funcionamiento requiere los paquetes stringi y magrittr.
• Paquete xlsx [15]: incluye metodos para ayudar a leer y escribir ficheros de formato
Excel en R.
Ha sido creado y mantenido por Adrian A. Dragulescu, y requiere los paquetes
rJava y xlsxjars para su ejecucion.
46
Apartado 6
OBSERVACIONES
Por si la complejidad del lenguaje natural no fuera suficientemente problematica, esta
el anadido de la gran variedad de lenguajes en el mundo, que complica mucho mas la
tarea. Es por ello que tan solo se ha enfocado esta herramienta al estudio de un solo
idioma, el castellano.
Ha resultado especialmente util haber elegido el objeto VCorpus como el objeto por
excelencia para trabajar en R, ya que contiene muchos campos sin utilizar dentro de la
parte de metadatos que han resultando utiles para guardar informacion de cada frase,
como por ejemplo el analisis morfologico en el campo $meta$description ya existente.
De hecho se ha descubierto que no solo se pueden utilizar campos de un VCorpus que
estan sin utilizar, sino que es igual de facil anadir nuevos campos al objeto, lo cual
es una ventaja muy grande para mantener la consistencia en los datos sin tener que
crear diferentes objetos, o un objeto para cada frase. Un ejemplo de esto es el campo
$meta$peso anadido al corpus, el cual no existıa anteriormente.
Otra observacion es que se ha comprobado que el formato mas rapido del que importar
es un fichero de texto plano (.txt). El siguiente mas rapido serıa un CSV y el ultimo el
Excel. Por facilidad y velocidad se recomendarıa trabajar siempre con ficheros planos,
en el que cada lınea es un texto diferente. A pesar de que es mas rapido CSV que
Excel, entre los dos es recomendable trabar con el segundo por su simplicidad en la
importacion.
Tambien es altamente recomendable trabajar siempre con una codificacion de UTF-8 en
todos los documentos que se utilicen para evitar posibles problemas con tildes y otros
caracteres especiales como la “n”.
47
Observaciones
En cuanto a velocidad de ejecucion, es altamente recomendable que si se van a analizar
muchos textos o muchos documentos, y no es del todo relevante que esten separados
entre ellos para distinguir un documento de otro, que se anadan todos esos textos en
una misma lınea del fichero. De esta manera FreeLing tan solo tendra que hacer un
analisis y sera mucho mas rapido.
Es posible que extrane el hecho de que frases con los verbos “ser”, “estar” o “parecer”
aparezcan en las tripletas, a pesar de ser verbos que no van acompanados por un objeto
directo. Esto se debe a que hay muchas frases que contienen esos verbos, y si directa-
mente se eliminasen se podrıa perder informacion importante sobre el texto. Por ello se
ha hecho una excepcion, y no se eliminan.
Por ultimo como observacion, los metodos Deteccion Fase1, Deteccion Fase2 y Detec-
cion Fase3 son utilizados por el metodo Detectar, y no deben ser ejecutados por el
usuario, por lo que su funcionamiento deberıa ser transparente al utilizar Detectar.
Esta es la razon por la que estos tres metodos no se encuentran en el manual de usuario.
48
Apartado 7
PROBLEMAS ENCONTRADOS
Todo lo que se refiere al procesamiento del lenguaje natural esta relacionado con prob-
lemas derivados de su complejidad. Se podrıa decir que el lenguaje natural es uno de
los sistemas mas complejos que existen y no hay una forma unica de abarcarlo, y cada
una de esas formas acarrea sus propios problemas y limitaciones.
Durante la implementacion se han encontrado numerosos problemas, algunos relaciona-
dos con temas tecnicos como la importacion de documentos o el tiempo de ejecucion, y
otros relacionados con la complejidad del lenguaje natural.
1. Uno de los problemas relacionados con la importacion ha sido trabajar con el for-
mato de ficheros CSV porque todo depende del separador que utilice el usuario, el
numero de columnas y posibles huecos vacıos. Con los separadores de CSV es muy
comun encontrar problemas, ya que a menudo ese mismo separador coincide con
algun caracter que se encuentra en el propio texto, dividiendolo ası erroneamente y
haciendo que la importacion sea invalida o incluso que no se pueda realizar. Es por
esto que se anadio al metodo Crear corpus la posibilidad de introducir cualquier
separador. De todas formas no es del todo recomendable trabajar con CSV para
la deteccion y clasificacion de tripletas.
2. A la hora de implementar los metodos de importacion y preparacion del texto
hubo tambien problemas con entradas vacıas dentro de un fichero. Esto se tuvo
en cuenta y se ignoraron dichas entradas a la hora de importar el texto. Tambien
hubo problemas con los signos de puntuacion (especialmente el punto) y espacios
excesivos en el texto, ya que ponıan trabas al analisis morfologico y consecuente-
mente a la deteccion. Esto se resolvio siempre con la utilizacion de expresiones
regulares y sustituciones.
49
Problemas Encontrados
3. Otro problema en cuanto a la preparacion del texto tenıa que ver directamente con
los puntos, ya que son la principal guıa para dividir un documento o un parrafo
en frases. Por desgracia los puntos se pueden encontrar en cualquier parte, ya sea
por error, por acronimos o siglas, o por numeros decimales dentro del texto. Todo
esto supone problemas para hacer la separacion correctamente, y es la razon por la
que se incluyo el fichero de sustituciones dedicado especialmente a la eliminacion
de puntos. Ademas de ser un problema encontrarlos, requieren especial cuidado
cuando se trabaja con ellos por ser un caracter especial en las expresiones regulares
(representa cualquier caracter en un texto).
4. El primer problema realmente importante encontrado ha sido el tiempo de eje-
cucion de FreeLing, lo que llevo a realizar un cambio en el orden e implementacion
de algunos metodos. Y es que se veıa que la mayor parte del tiempo de ejecucion se
iba cuando FreeLing escribıa el fichero con la salida (”salida.txt”). Esto significa
que FreeLing tarda mucho mas cuando se analizan dos frases secuencialmente (se
analiza primero una, se termina, y se analiza otra) que cuando se analizan esas
frases de una sola vez, juntando el texto en uno solo.
Para comprobar esto se hizo una prueba en la que, con una serie de frases iguales,
se ejecutaba FreeLing con cada una secuencialmente vs juntas. Lo que resulto en
la siguiente tabla (Tabla 7.0.0.1):
Tabla 7.0.0.1: Tiempos de ejecucion de FreeLing.
Numero defrases
Segundos (analizadassecuencialmente)
Segundos (analizadasen conjunto)
2 9.59 4.40
3 13.42 4.53
4 17.98 4.57
5 22.52 4.58
6 26.51 4.62
7 31.23 4.68
Esto quiere decir que no merece la pena dividir los documentos en frases antes del
analisis y ejecutar FreeLing para cada una, sino que conviene dividirlas despues
del analisis, habiendolo hecho sobre el documento entero. Aquı por documento
uno se refiere a una de las entradas dentro del fichero de entrada, que puede llevar
varias frases dentro y puede representar a todo un documento o a un parrafo.
Por esta razon hubo que cambiar el orden de los metodos Analizar corpus y Trans-
formar corpus al orden en que estan ahora y hubo tambien que cambiar la imple-
mentacion de ambos a la implementacion descrita anteriormente.
50
Problemas Encontrados
5. Uno de los problemas encontrados mas relevantes a la hora de analizar es la depen-
dencia de un buen resultado en todas las herramientas utilizadas, mas en concreto
la necesidad de que FreeLing realice el analisis morfologico correctamente. Por des-
gracia no es ası, y FreeLing ha tenido bastantes limitaciones en cuanto al analisis
de ciertas palabras.
Uno de ellos ha sido la inconsistencia en la interpretacion de palabras pertenecientes
a fechas, como podrıa ser la palabra “viernes” o la palabra “sabado”, las cuales
analiza de diferente manera (Ej: “sabado” se analiza como fecha pero “sabados”
no). Como solucion hubo que investigar acerca del funcionamiento interno de
FreeLing y se encontro que modificando algunos parametros del archivo ”/freeling-
3.1-win/data/config/es.cfg” se pueden cambiar ciertos parametros de la herramienta,
y se podıa inhabilitar el detector de fechas.
Pero el problema mas relevante de FreeLing era confundir algunas palabras (es-
pecialmente sustantivos y adjetivos) por verbos, lo que ha supuesto fallos en la
deteccion de las tripletas, ya que si la descripcion de la palabra no era correcta,
las reglas que cumple tampoco lo son. Ante esto no se ha podido hacer nada que
no se fuese del tiempo y esfuerzo permitido para el desarrollo, aunque tal vez para
un futuro serıa una opcion entrar en el codigo de FreeLing y corregir el origen del
problema.
6. Estos problemas del analisis morfologico se han unido a la dificultad que ya tiene
hacer un analisis sintactico en castellano. El problema aquı es que en un analisis
sintactico hay muchas cosas en las que el factor humano ayuda mucho para la
interpretacion, mientras que escribirlo en reglas es una tarea complicada, por no
decir imposible. Especialmente en castellano son multiples las maneras de decir
una misma frase, por lo que las reglas que se deben escribir son muchas. Ası por
ejemplo, la frase “Yo invite a Pedro.” tambien se puede escribir como “Pedro fue
invitado por mı.” o “Invite a Pedro.”, y esta es la frase mas sencilla que a uno se
le puede ocurrir. Ya en esta simple frase el sujeto se ve cambiado, mientras que
en “Yo invite a Pedro” el sujeto es “Yo”, en “Pedro fue invitado por mı” el sujeto
es “Pedro”.
Este tipo de complicaciones son las que han llamado a hacer una implementacion
con reglas “simples”, de lo mas simples posible, en las que se van haciendo uniones
de palabras con sentido. Esto por supuesto que es una desventaja, ya que cuando la
complicacion de la frase aumenta, tambien lo hacen los fallos del Detector. Aunque
esta herramienta esta pensada especialmente para el analisis de tripletas en frases
cortas del estilo de comentarios en foros, o comentarios en redes sociales, y no esta
enfocada a funcionar en todo tipo de textos (aunque serıa lo ideal).
51
Problemas Encontrados
7. En cuanto a la clasificacion de las frases, inicialmente estaba la intencion de hacerla
con la ayuda de algun algoritmo de clasificacion, en concreto el LDA (Latent
Dirichlet Allocation), con el cual se entrenaba un modelo en base a textos y se le
indicaba el numero de temas que existıan en ellos.
Por desgracia este tipo de clasificacion dedicada a textos no permite forzar el
algoritmo para que cierto texto caiga solo en un tema (Ej: “deportes”), sino que
siempre busca el numero de temas que se desea en un mismo texto, y los porcentajes
de pertenencia de cada tema dependeran tambien de los demas temas. Mientras
que esto puede ser util en otras situaciones no es lo que se buscaba en este caso,
se buscaba un metodo por el que cada texto fuese clasificado individualmente, sin
tener que ver su puntuacion con las de los demas temas.
8. Por esta razon, y por la complicacion de tener que entrenar un modelo cada vez
que se anada un nuevo tema y/o textos, al final se decidio hacer una clasificacion
por medio de diccionarios de terminos. Con este metodo la clasificacion se hacıa
individualmente para cada tema y se podıa hacer una comparacion mas util para
un tema en diferentes textos.
De esta manera ademas se simplificaba al usuario la tarea de anadir o modificar
un nuevo tema (bastando ahora con hacer un simple fichero con terminos y pesos
de un tema), y se le daba mas importancia al factor humano (saber interpretar la
relevancia de una palabra dentro de cierto tema) para hacer la clasificacion.
52
Apartado 8
RESULTADOS
En este apartado se muestran frases y los resultados de ejecucion sobre las mismas con
comentarios. Se va a mostrar todo tipo de ejemplos y se iran comentando, aunque esta
especialmente enfocado a comentar los errores y estudiar por que ha fallado.
Los resultados de este apartado estan para comprobar el funcionamiento de la deteccion,
que es la parte mas relevante de la herramienta. Es por ello que la clasificacion se va a
dejar de lado, ya que ademas depende de los temas que se quieran estudiar y de otros
factores. Ademas los textos que vienen a continuacion son textos sobre todo tipo de
ambitos, por lo que no tiene mucho sentido hacer una clasificacion.
Por consecuencia se pide no se preste atencion a la clasificacion de ”Tecnologıa” que hay
en todos los resultados, tan solo se ha hecho para poder hacer la exportacion final al
fichero Excel ”salida.txt”.
Se puede observar que para todos los casos de pruebas aquı mostrados el archivo impor-
tado es un fichero de texto. No es por otra razon que ser el fichero mas facil de crear,
mas rapido de importar, y que menos argumentos necesita en su importacion.
53
Resultados
8.1 Prueba 1
> corpus <- Crear_corpus("D:/Datos/prueba1.txt")
Corpus creado correctamente.
> corpusPrep <- Preparar_corpus(corpus, "D:/Codigo/data/sustituciones.txt")
Corpus preparado correctamente.
> corpusAnaliz <- Analizar_corpus(corpusPrep, directorio = "D:/", lenguaje = "es")
Corpus analizado correctamente.
> corpusTrans <- Transformar_corpus(corpusAnaliz)
Corpus transformado correctamente.
> corpusDetectado <- Detectar(corpusTrans)
Tripletas detectadas correctamente.
> corpusClasificado <- Clasificar(corpusDetectado, tema ="tecnologia")
Corpus clasificado correctamente.
> Exportar(corpusClasificado, "D:/Datos/")
Fichero "salida.xlsx" creado correctamente.
Figura 8.1.0.1: Captura del resultado sobre ”prueba1.txt”.
54
Resultados
Los textos contenidos en ”prueba1.txt” son comentarios de usuarios de la pagina Xataka,
y por tanto son el tipo de textos para los que esta herramienta esta hecha. Frases cortas
y directas al grano, sin muchas frases subordinadas.
La primera frase ha tenido una deteccion perfecta, y la segunda tambien ha tenido exito a
pesar de que “Navegue en modo incognito” tal vez no tenga sentido sin “probablemente”.
Pero de nuevo, esta palabra no forma parte de la tripleta. Tambien se puede observar
como “en modo incognito” se ha incluido en la tripleta, al estar el verbo “navegar” en
la lista de verbos preposicionales con la preposicion “en”.
Una frase digna de estudiar por ejemplo es la numero cuatro, “Cuando llevas muchos
kilometros en la mochila, el cuentarrevoluciones ya no se mira, se escucha el motor.”, de
la que solo se ha extraıdo “El cuentarrevoluciones ya no se mira”. Aquı lo correcto serıa
que el detector cogiese tambien la ultima frase “se mira el motor”, ya que es la segunda
tripleta valida.
Esto se podrıa deber al orden en ciertos pasos de las fases de deteccion. Primero el al-
goritmo ha cogido las dos primeras frases subordinadas que contengan verbo, las cuales
serıan “Cuando llevas muchos kilometros en la mochila, el cuentarrevoluciones ya no se
mira”, eliminando ya directamente las siguientes. Una vez tenıa esas dos, y siguiendo
ciertas reglas, ha eliminado la primera de ellas, ya que claramente “Cuando llevas mu-
chos kilometros en la mochila” indica el tiempo en que sucede la accion de la segunda,
eliminandose ası del conjunto. Aun ası se podrıa interpretar como una tripleta bien
detectada.
En la frase numero 5 sin embargo sı que podrıa haber problemas, ya que el significado
de la frase ha cambiado completamente al sacar la tripleta. La tripleta extraıda es “Ir
en moto y ver lo que tienes, no es muy seguro”, algo totalmente erroneo y contrario a
lo que se pretende decir. Tambien hay que tener en cuenta que es una frase complicada,
por ejemplo la palabra “delante” es un adverbio que acompana al verbo “tener” e indica
una posicion, pero no por acompanarlo forma parte de la estructura SVO.
Tambien se complica la frase por el hecho de tener cuatro estructuras verbales dentro de
una misma: “Ir en moto y ver a la vez lo que tienes delante y por una pantalla lo que
tienes detras. . . ”. Por supuesto con este tipo de frases surgen problemas de todo tipo,
incluso a una persona le podrıa ser difıcil encontrar aquı el sujeto + verbo + objeto
directo.
Es por este tipo de dificultades que se ha tenido que limitar mucho el analisis, cogiendo
tan solo las primeras estructuras, a pesar de la posible mal interpretacion.
55
Resultados
Por ultimo, mirando a la frase numero 6 destaca el hecho de que “Menos mal” siga en la
tripleta detectada sin pertenecer a una estructura SVO. Y es que el detector ha hecho
entre las dos palabras una union pero no ha tenido los requisitos para cumplir las reglas
de eliminacion, ya que estas han sido bastante basicas y limitadas a ciertos casos.
56
Resultados
8.2 Prueba 2
> corpus <- Crear_corpus("D:/Datos/prueba2.txt")
Corpus creado correctamente.
> corpusPrep <- Preparar_corpus(corpus, "D:/Codigo/data/sustituciones.txt")
Corpus preparado correctamente.
> corpusAnaliz <- Analizar_corpus(corpusPrep, directorio = "D:/", lenguaje = "es")
Corpus analizado correctamente.
> corpusTrans <- Transformar_corpus(corpusAnaliz)
Corpus transformado correctamente.
> corpusDetectado <- Detectar(corpusTrans)
Tripletas detectadas correctamente.
> corpusClasificado <- Clasificar(corpusDetectado, tema ="tecnologia")
Corpus clasificado correctamente.
> Exportar(corpusClasificado, "D:/Datos/")
Fichero "salida.xlsx" creado correctamente.
Figura 8.2.0.1: Captura del resultado sobre ”prueba2.txt”.
57
Resultados
Los textos contenidos en ”prueba2.txt” proceden de un artıculo de El Paıs, y son un
tipo de frases mas formales para las que se esperarıa una deteccion mas difıcil que con
frases provenientes de comentarios. La ventaja de este tipo de textos es una gramatica
y estructura correcta, que puede ayudar a una mejor deteccion.
La primera frase por ejemplo se ha detectado perfectamente, tal y como se harıa man-
ualmente. Se puede ver tambien como a pesar de que en la segunda estructura verbal
“que son mayores que nunca” el verbo es “ser”, que no va acompanado de objeto directo,
pero aun ası se ha anadido como tripleta para no perder informacion.
Las demas frases son del mismo estilo. En la segunda frase se puede ver que la tripleta
extraıda es casi tan larga como la frase original. Esto no es algo que indique algun
tipo de error durante la deteccion, si se estudia bien se ve como se han detectado dos
estructuras diferentes, y que la razon de la longitud es la longitud de un objeto directo
indivisible “nuevos lanzamientos de misiles balısticos de diferentes alcances y nuevas
pruebas atomicas”.
58
Resultados
8.3 Prueba 3
> corpus <- Crear_corpus("D:/Datos/prueba3.txt")
Corpus creado correctamente.
> corpusPrep <- Preparar_corpus(corpus, "D:/Codigo/data/sustituciones.txt")
Corpus preparado correctamente.
> corpusAnaliz <- Analizar_corpus(corpusPrep, directorio = "D:/", lenguaje = "es")
Corpus analizado correctamente.
> corpusTrans <- Transformar_corpus(corpusAnaliz)
Corpus transformado correctamente.
> corpusDetectado <- Detectar(corpusTrans)
Tripletas detectadas correctamente.
> corpusClasificado <- Clasificar(corpusDetectado, tema ="tecnologia")
Corpus clasificado correctamente.
> Exportar(corpusClasificado, "D:/Datos/")
Fichero "salida.xlsx" creado correctamente.
Figura 8.3.0.1: Captura del resultado sobre ”prueba3.txt”.
Las frases contenidas en ”prueba3.txt” son solo una pequena parte de las frases hechas
para comprobar la correcta deteccion de aquellos verbos que deben ir acompanados de
algo mas para tener sentido.
La primera frase incluye el verbo “sumar”, el cual no se puede dejar sin acompanar.
“Todas estas faltas se suman” no tendrıa sentido, se tendrıan que sumar a algo. Este
59
Resultados
tipo de frases (muy comunes en castellano) son la razon por la que hubo que hacer el
archivo de verbos preposicionales y su correspondiente procesamiento.
Lo mismo ocurre en la segunda frase con el verbo “acordarse” y su preposicion “de”, y
con el verbo “estar” y “con”. Curiosamente esta frase coincidıa perfectamente con sus
estructuras SVO, ya que no contenıa nada mas.
La tercera hace lo mismo pero con el verbo “acceder” y la preposicion “a”, y lo mismo
ocurre con la cuarta frase, en la que aparece el verbo “acercarse” y la preposicion “a”.
60
Resultados
8.4 Prueba 4
> corpus <- Crear_corpus("D:/Datos/prueba4.txt")
Corpus creado correctamente.
> corpusPrep <- Preparar_corpus(corpus, "D:/Codigo/data/sustituciones.txt")
Corpus preparado correctamente.
> corpusAnaliz <- Analizar_corpus(corpusPrep, directorio = "D:/", lenguaje = "es")
Corpus analizado correctamente.
> corpusTrans <- Transformar_corpus(corpusAnaliz)
Corpus transformado correctamente.
> corpusDetectado <- Detectar(corpusTrans)
Tripletas detectadas correctamente.
> corpusClasificado <- Clasificar(corpusDetectado, tema ="tecnologia")
Corpus clasificado correctamente.
> Exportar(corpusClasificado, "D:/Datos/")
Fichero "salida.xlsx" creado correctamente.
Las frases del archivo ”prueba4.txt” recuerdan a las frases con las que se aprendıa a
hacer analisis sintactico en la E.S.O. Simplemente se han hecho porque al ser cortas
es facil hacerlas variadas, y al ser frases sencillas es mucho mas rapido comprobar su
correcta deteccion.
A continuacion se muestra la captura de los resultados (Figura 8.4.0.1) con algunas de
esas frases, en las que se puede ver que ya siendo frases originales, las hay con objetos
directo y sin objeto directo, las hay con complementos circunstanciales de tiempo, de
lugar, etc.
61
Resultados
Figura 8.4.0.1: Captura del resultado sobre ”prueba4.txt”.
62
Apartado 9
CONCLUSIONES
En este proyecto se ha hecho un estudio del estado del arte, y se ha desarrollado la
herramienta DCTR para la deteccion de tripletas con la ayuda de una herramienta ya
existente (FreeLing). Ademas se ha hecho un metodo de clasificacion de las frases segun
un tema deseado.
Lo primero que se hizo fue preparar el entorno y las frases a analizar para allanar el
camino al detector de tripletas. Esto consistio en varios metodos por los que se importa-
ban los ficheros con sus contenidos, se limpiaban de terminos indeseados, se analizaban
morfologicamente y se separaban en frases para tener una deteccion individual para cada
una. De esta manera, guardando toda la informacion necesaria, se tenıan todos los req-
uisitos para el metodo importante, el de la deteccion de tripletas, y consecuentemente
su clasificacion.
El proceso ha sido muy largo, y al tratarse de un trabajo sobre el lenguaje natural se
han encontrado muchas dificultades por el camino, algunas de ellas que incluso en este
punto no ha sido posible resolver.
Para comprobar el correcto funcionamiento de cada uno de los modulos se han hecho
pruebas al final de cada uno, viendo ası los posibles errores que habıa derivados de la
gran variedad de textos, caracteres, codificaciones, etc.
Los primeros modulos de importacion/limpieza y analisis/transformacion no han sido
difıciles de implementar, y no se han visto demasiados problemas, lo cual ha sido muy
conveniente dada la dificultad del siguiente modulo, el de la deteccion de tripletas.
Como se ha explicado antes, el detector de tripletas se ha implementado en base a reglas
del castellano, reglas mediante las cuales se iban uniendo diferentes terminos de la frase
y se descartaban aquellas uniones que por lo normal no entran en la frase. Debido a la
63
Conclusiones
gran cantidad de reglas semanticas del castellano la tarea de hacer un sistema completo
que importe y prepare frases, detecte y clasifique tripletas, y exporte el resultado, es
como poco difıcil si se quiere conseguir una buena calidad de deteccion. Por esta razon
lo que se ha hecho es un sistema completo que incluye todos los procesos y deja las bases
para nuevas lıneas de investigacion y desarrollo en la deteccion de tripletas con R.
Por esto se entiende que las reglas que intervienen en la deteccion no estan completas y
no abarcan la plenitud del castellano, pero posiblemente se hayan hecho unos cimientos
sobre los que construir mejoras. Es necesario mencionar que el metodo por el cual se
ha llegado a las reglas definidas en el detector es el de ensayo y error. De esta manera
se hacıan pruebas con frases continuamente (cada vez mas difıciles) y se veıa que reglas
serıan mas importantes.
En cuanto a los resultados obtenidos se puede observar como el detector funciona bien
para frases sencillas y empieza a fallar segun su complejidad aumenta, aunque por lo
general se defiende bastante bien. El mayor reto son las frases en las que intervienen
muchas frases subordinadas, con muchas estructuras verbales distribuidas en una misma
frase. En ellas la manera de defenderse ante la complejidad es hacer una limitacion
mediante la cual solo se admiten las dos primeras frases subordinadas, directamente
eliminando todo lo que venga despues.
Esto puede ser un inconveniente por la perdida de informacion, pero ha sido una manera
eficaz de eliminar complejidad y hacer un trabajo a la altura de las capacidades del
trabajo.
Por otro lado ha resultado especialmente util utilizar una lista con verbos preposicionales
y sus preposiciones, ya que sin eso el metodo serıa muy propenso a eliminar partes
importantes de la frase y devolver tripletas sin sentido.
Tambien ha resultado muy util el archivo de sustituciones mediante el cual se prepara
el corpus, ya que sin las sustituciones de acronimos y siglas se podrıa dar lugar a fallos
frecuentes a la hora de separar los diferentes textos por frases. Sı es verdad sin embargo
que serıa mucho mas comodo que esta caracterıstica fuese invisible para el usuario, pero
de esta manera se le da la opcion de adaptarse a los textos. Tambien es ventajosa
la opcion de eliminar terminos no deseables, o la sustitucion de terminos por otros
sinonimos mas comunes.
Hablando ahora de la clasificacion, parece que fue una buena idea cambiar el enfoque
al de una clasificacion por medio de diccionarios, en lugar de crear un modelo que
clasificase todos los temas simultaneamente. Con los diccionarios es ahora posible hacer
clasificaciones individualmente para el numero de temas que se desee, pudiendo ademas
64
Conclusiones
intervenir (en caso de que la clasificacion no parezca correcta) modificando el diccionario
de terminos correspondiente.
Por lo que se ha visto un buen diccionario implica una buena clasificacion, o puntuacion,
sobre un tema en concreto. Por lo que el diccionario es del todo relevante y se recomienda
que el usuario lo revise siempre a fondo.
Por lo general, a pesar de todas las dificultades encontradas ha sido un trabajo prove-
choso, se ha podido ver como mediante reglas se puede llegar a una deteccion de tripletas
correcta y eficiente (aunque la implementacion no lo haya sido en todo momento).
En cuanto a la implementacion del detector, ademas de haberse dividido en diferentes
fases, cada una de ellas se ha dividido en diferentes procesos secuenciales que podıan
haberse hecho de otra manera, pero que se han hecho ası de manera que sea mucho mas
sencilla su comprension y mejora en el futuro. Es por esto que la implementacion no
ha sido del todo optima, lo que realmente se buscaba era una mayor modularidad, en el
que cada paso este bien delimitado a un objetivo concreto.
Gracias a esto los metodos pueden formar ahora un buen punto de partida para futuras
lıneas de investigacion y mejora sobre el tema.
Dicho esto hay que resaltar de nuevo que el sistema, aunque completo en cuanto a
pasos (extraccion, preparacion, deteccion, clasificacion y exportacion), no esta del todo
terminado por la gran cantidad de reglas necesarias en el detector. Y como siguientes
pasos para el futuro habrıa que mejorar las reglas que lo definen y anadir nuevas reglas
no detectadas, ya que solo se han anadido las mas generales y comunes dentro de las
pruebas realizadas a lo largo del desarrollo.
El DCTR es, por tanto, un prototipo de detector de tripletas que puede sentar las bases
de un paquete de R, teniendo en cuenta que serıan recomendables numerosas mejoras.
65
Anexo A
Manual de configuracion
Para facilitar el uso de esta herramienta se ha tenido en cuenta al usuario final durante
toda la implementacion de las funciones, un usuario con conocimiento basico en el en-
torno de RStudio. Al final, de modo complementario se ha redactado un manual de
usuario [B] que detalla el uso de los diferentes metodos, describiendo las variables de
entrada y salida.
Debido a la forma de trabajar en el departamento en los proyectos de minerıa de texto
(por medio de metodos en R ejecutados desde RStudio) no es del todo necesario tener
una interfaz grafica para el usuario. Lo que sı se ha hecho ha sido que la herramienta
sea lo mas auto contenida posible, de manera que no sea necesario instalar componentes
adicionales y que se pueda mover la herramienta de un sitio a otro sin problemas de
compatibilidad.
A continuacion se muestra la distribucion de los elementos que forman parte de la
herramienta.
Figura A.0.0.1: Distribucion de carpetas y archivos de DCTR.
66
Anexo
• DCTR: carpeta raız.
– Manual.pdf: detalla el uso de cada uno de los metodos contenidos en el codigo.
– Codigo
∗ DCTR.RData: archivo que contiene todos los metodos de la herramienta.
∗ data
· verbos prep full.csv: contiene la lista de todos los verbos preposi-
cionales junto a sus proposiciones.
· sustituciones.txt: contiene la lista de aquellas sustituciones de terminos
que se quieran aplicar sobre el texto.
· deportes.xlsx: diccionario de deportes.
· economıa.xlsx: diccionario de economıa.
· tecnologıa.xlsx: diccionario de tecnologıa.
– freeling-3.1-win: contiene la herramienta FreeLing. No tocar por dentro.
A pesar de que la carpeta ”freeling-3.1-win” aparezca contenida dentro de la herramienta,
es posible tenerla almacenada en cualquier otra ruta, siempre y cuando el usuario conozca
e introduzca esa ruta a la hora de utilizar el codigo.
Los diccionarios contenidos en data son solamente como orientacion para la creacion y
almacenamiento de nuevos diccionarios, y se pueden utilizar como ejemplo.
Para limitar la complejidad de los metodos y hacer su uso lo mas intuitivo posible para
el usuario se han acotado bien los parametros que utiliza cada uno de los metodos. La
descripcion detallada de cada uno de ellos se encuentra incluida en el manual de usuario.
67
Anexo B
Manual de usuario
Detector y clasificador de tripletas (DCTR)
Mayo 28, 2016
Tıtulo Detector y clasificador de tripletas en R para Text Mining (DCTR)
Version 0.1
Fecha 28 Mayo 2016
Dependencias R (>=3.2.2)
Librerıas tm, xlsx, stringr
RequisitosDelSistema FreeLing 3.1, Java
Descripcion Conjunto de metodos en R para detectar y clasificar tripletas.
Licencia GNU General Public License 3.0
URL https://github.com/robertomoreu/DCTR.git
Repositorios adicionales –
Requiere compilacion Sı
Autor Roberto Moreu Rubio <[email protected]>
Fecha/Publicacion 5 Junio 2016
68
Anexo
Crear corpus Crear un corpus a partir de un fichero
Descripcion
Crea un corpus a partir de texto en un fichero de texto plano, CSV o Excel.
Utilizacion
Crear corpus(fichero, indiceHoja=1, cabecera=FALSE, separador=”\n”,
columna=1)
Argumentos
fichero ruta completa al fichero que se pretende importar. Puede
ser .txt, .csv o .xlsx.
indiceHoja indica el ındice de la hoja en que se encuentra el texto
en caso de un fichero Excel. Por defecto 1.
cabecera valor booleano que indica si el fichero contiene cabecera.
Por defecto FALSE.
separador cadena con el separador utilizado para separar los cam-
pos del CSV. Por defecto ”\n”.
columna indica el ındice de la columna en la que se encuentra el
texto dentro del fichero. Solo necesario en Excel y CSV.
Por defecto 1.
Salida
Objeto de la clase VCorpus o Corpus con una entrada por cada lınea del
documento.
Ejemplos
corpusQuijoteXLSX <- Crear_corpus(\D:/Quijote.xlsx", cabecera=TRUE,
columna = 2, indiceHoja=1)
corpusQuijoteCSV <- Crear_corpus("D:/Quijote.csv", separador=";")
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusQuijoteCSV <- Crear_corpus("D:/Quijote.csv", separador=";",
cabecera=TRUE)
69
Anexo
Preparar corpus Aplica sustituciones sobre un corpus
Descripcion
Aplica una serie de sustituciones sobre el contenido de un corpus a partir
de un fichero de sustituciones.
Utilizacion
Preparar corpus(corpus, ficheroSustitucion)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
ficheroSustitucion ruta completa al fichero .txt donde se encuentran las
sustituciones. Fichero formado por dos columnas sepa-
radas por tabulador, la primera con el termino a susti-
tuir, y la segunda con la sustitucion. Si el segundo esta
vacıo el termino se elimina del corpus.
Salida
Objeto de la clase VCorpus o Corpus.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
Analizar corpus Analiza morfologicamente un corpus
Descripcion
Analiza morfologicamente las palabras de cada entrada de un corpus con
la ayuda de FreeLing.
70
Anexo
Utilizacion
Analizar corpus(corpus, directorio = getwd(), lenguaje = ”es”)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
directorio ruta al directorio donde se encuentra la herramienta
FreeLing. Por defecto getwd().
lenguaje cadena de caracteres representativa del lenguaje del analisis
morfologico permitido por FreeLing. Por defecto “es”
(castellano).
Salida
Objeto de la clase VCorpus o Corpus.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
corpusAnalizado <- Analizar_corpus(corpusPrep,
directorio="C:/Documents and Settings/", lenguaje="es")
Transformar corpus Separa el contenido de un corpus en frases
Descripcion
Separa el contenido de un corpus para obtener uno nuevo en el que cada
una de sus entradas represente una sola frase.
Utilizacion
Transformar corpus(corpus)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
71
Anexo
Salida
Objeto de la clase VCorpus o Corpus.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
corpusAnalizado <- Analizar_corpus(corpusPrep,
directorio="C:/Documents and Settings/", lenguaje="es")
corpusTransformado <- Transformar_corpus(corpusAnalizado)
Detectar Detecta las tripletas contenidas en un corpus
Descripcion
Detecta las tripletas (estructuras Sujeto + Verbo + Objeto directo) con-
tenidas en cada una de las entradas (frases) de un corpus con el analisis
morfologico.
Utilizacion
Detectar corpus(corpus)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
Salida
Objeto de la clase VCorpus o Corpus.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
corpusAnalizado <- Analizar_corpus(corpusPrep,
directorio="C:/Documents and Settings/", lenguaje="es")
corpusTransformado <- Transformar_corpus(corpusAnalizado)
72
Anexo
corpusDetectado <- Detectar(corpusTransformado)
Crear diccionario Crea un diccionario de terminos a partir de un fichero
Descripcion
Crea un diccionario de terminos sin repetir a partir de un fichero que con-
tiene textos sobre cierto tema.
Utilizacion
Crear diccionario(tema, ruta fichero, ruta sustituciones, directorio freeling)
Argumentos
tema string con el nombre del tema.
ruta fichero ruta al directorio donde se encuentra el fichero con los
textos. Puede ser .csv, .txt o .xlsx.
ruta sustituciones ruta completa al fichero .txt donde se encuentran las
sustituciones. Fichero formado por dos columnas sepa-
radas por tabulador, la primera con el termino a susti-
tuir, y la segunda con la sustitucion. Si el segundo esta
vacıo el termino se elimina del corpus.
directorio freeling ruta al directorio donde se encuentra la herramienta
FreeLing.
Salida
Fichero Excel con el nombre del tema introducido. Contiene un diccionario
de terminos con pesos de relevancia (1 por defecto).
Ejemplos
Crear_diccionario(tema ="conflicto",
ruta_fichero="D:/Codigo/data/conflicto.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling= directorio="C:/Documents and Settings/")
73
Anexo
Clasificar Clasifica un corpus segun un tema
Descripcion
Clasifica las entradas de un corpus con tripletas detectadas para un tema
dado a partir de un diccionario de terminos. Puntua cada entrada del
corpus segun su relevancia en dicho ambito.
Utilizacion
Clasificar(corpus, tema)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
tema string con el nombre del tema.
Salida
Objeto de la clase VCorpus o Corpus.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
corpusAnalizado <- Analizar_corpus(corpusPrep,
directorio="C:/Documents and Settings/", lenguaje="es")
corpusTransformado <- Transformar_corpus(corpusAnalizado)
corpusDetectado <- Detectar(corpusTransformado)
Crear_diccionario(tema ="conflicto",
ruta_fichero="D:/Codigo/data/conflicto.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling=directorio="C:/Documents and Settings/")
corpusClasificado <- Clasificar(corpusDetectado,
tema = " conflicto ")
Crear_diccionario(tema ="conflicto",
ruta_fichero="D:/Codigo/data/conflicto.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling=directorio="C:/Documents and Settings/")
74
Anexo
corpusClasificado <- Clasificar(corpusDetectado,
tema="conflicto")
Exportar Exporta el contenido de un corpus a un Excel
Descripcion
Exporta el contenido de un corpus detectado y clasificado a un fichero
Excel.
Utilizacion
Exportar(corpus, directorio)
Argumentos
corpus objeto de la clase Corpus o VCorpus.
directorio ruta del directorio donde se escribira el fichero de salida.
Salida
Fichero ‘salida.xlsx’ cuyo contenido son las frases originales, las tripletas y
los pesos de clasificacion.
Ejemplos
corpusQuijoteTXT <- Crear_corpus("D:/Quijote.txt")
corpusPrep <- Preparar_corpus(corpusQuijoteTXT,
"D:/sustituciones.txt")
corpusAnalizado <- Analizar_corpus(corpusPrep,
directorio="C:/Documents and Settings/", lenguaje="es")
corpusTransformado <- Transformar_corpus(corpusAnalizado)
corpusDetectado <- Detectar(corpusTransformado)
Crear_diccionario(tema="deportes",
ruta_fichero="D:/Codigo/data/deportes.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling= directorio="C:/Documents and Settings/")
corpusClasificado <- Clasificar(corpusDetectado, tema="deportes")
Crear_diccionario(tema ="conflicto",
75
Anexo
ruta_fichero="D:/Codigo/data/conflicto.txt",
ruta_sustituciones="D:/Codigo/data/sustituciones.txt",
directorio_freeling= directorio="C:/Documents and Settings/")
corpusClasificado <- Clasificar(corpusDetectado, tema="conflicto")
Exportar(corpusClasificado, "D:/Datos/")
76
Anexo C
Etiquetas de FreeLing
A continuacion se muestra la descripcion de los caracteres contenidos en las etiquetas
del analisis morfologico proporcionado por FreeLing. Cada clase viene dada por una
cadena de un numero determinado de caracteres. La posicion de cada caracter en su
cadena correspondiente viene dada por su posicion en la lista enumerada.
• Adjetivos (6 caracteres):
1. A
2. Tipo: calificativo (Q) u ordinal (O)
3. Grado: aumentativo (A), diminutivo (D), comparativo (C) o superlativo (S)
4. Genero: masculino (M), femenino (F) o comun (C)
5. Numero: singular (S), plural (P) o invariable (N)
6. Funcion: participio (P) o nada (0)
• Adverbios (2 caracteres):
1. R
2. Tipo: general (G) o negativo (N)
• Determinantes (6 caracteres):
1. D
2. Tipo: demostrativo (D), posesivo (P), interrogativo (T), exclamativo (E),
indefinido (I) o artıculo (A)
3. Persona: primera (1), segunda (2) o tercera (3)
4. Genero: masculino (M), femenino (F), comun (C) o neutro (0)
77
Anexo
5. Numero: singular (S), plural (P) o invariable (0)
6. Poseedor: singular (S), plural (P) o invariable (0)
• Nombres (7 caracteres):
1. N
2. Tipo: comun (C) o propio (P)
3. Genero: masculino (M), femenino (F) o comun (C)
4. Numero: singular (S), plural (P) o invariable (N)
5. Clasificacion semantica (2 char): persona (SP), lugar (G0), organizacion (O0)
u otros (V0)
6. Grado: aumentativo (A) o diminutivo (D)
• Verbos (7 caracteres):
1. V
2. Tipo: principal (M), auxiliar (A) o semiauxiliar (S)
3. Modo: indicativo (I), subjuntivo (S), imperativo (M), infinitivo (N), gerundio
(G) o participio (P)
4. Tiempo: presente (P), imperfecto (I), futuro (F), pasado (S), condicional (C)
o – (0)
5. Persona: primera (1), segunda (2) o tercera (3)
6. Numero: singular (S) o plural (P)
7. Genero: masculino (M) o femenino (F)
• Pronombres (8 caracteres):
1. P
2. Tipo: personal (P), demostrativo (D), posesivo (X), indefinido (I), interrog-
ativo (T), relativo (R) o exclamativo (E)
3. Persona: primera (1), segunda (2) o tercera (3)
4. Genero: masculino (M), femenino (F), comun (C) o neutro (N)
5. Numero: singular (S), plural (P) o impersonalMInvariable (N)
6. Caso: nominativo (N), acusativo (A), dativo (D) u oblicuo (O)
7. Poseedor: singular (S) o plural (P)
8. Politeness: polite (P)
• Conjunciones (2 caracteres):
78
Anexo
1. C
2. Tipo: Coordinada (C) o subordinada (S)
• Interjecciones (1 caracter):
1. I
• Preposiciones (5 caracteres):
1. S
2. Tipo: preposicion (P)
3. Forma: simple (S) o contraıda (C)
4. Genero: masculino (M) (solo para “al” y “del”)
5. Numero: singular (S) (solo para “al” y “del”)
• Puntuacion (1 caracter):
1. F
• Numerales (2 caracteres):
1. Z
2. Tipo: partitivo (d), moneda (m), porcentaje (p) o unidad (u)
• Fechas y horas (1 caracter):
1. W
79
Bibliografıa
[1] Seth Grimes. A brief history of text analytics. BeyeNETWORK, Octubre 2007.
URL http://www.b-eye-network.com/view/6311.
[2] SAS Institute Inc. Sas text analytics. URL http://www.sas.com/resources/
brochure/text-analytics-overview.pdf.
[3] Cunningham et al. Developing language processing components with gate version
8. University of Sheffield Department of Computer Science, Noviembre 2014. URL
https://gate.ac.uk/sale/tao/tao.pdf.
[4] Ingo Feinerer et al. Text mining package. Julio 2015. URL https://cran.
r-project.org/web/packages/tm/tm.pdf.
[5] RapidMiner GmbH. Operator reference manual. Mayo
2016. URL http://docs.rapidminer.com/studio/operators/
rapidminer-studio-operator-reference.pdf.
[6] Apache opennlp developer documentation. The Apache Software Founda-
tion, 2014. URL https://opennlp.apache.org/documentation/1.6.0/manual/
opennlp.html.
[7] Centro de Investigacion TALP. Analizadores multilingues en freeling. Universi-
dad Politecnica de Cataluna, Diciembre 2011. URL http://nlp.lsi.upc.edu/
publications/papers/padro11.pdf.
[8] Hadley Wickham. Simple, consistent wrappers for common string operations. Abril
2015. URL https://cran.r-project.org/web/packages/stringr/stringr.
pdf.
[9] El Paıs. Corea del norte lanza dos misiles balısticos tras anunciar pruebas nu-
cleares. Marzo 2016. URL http://internacional.elpais.com/internacional/
2016/03/17/actualidad/1458254375_426498.html.
80
Bibliografıa
[10] El Paıs. Es el mejor momento para ser emprendedor. Mayo 2016. URL
http://tecnologia.elpais.com/tecnologia/2016/05/10/actualidad/
1462880781_840217.html.
[11] El Paıs. Marquez: “¿errores? este ano no sera el unico”. Mayo
2016. URL http://deportes.elpais.com/deportes/2016/05/08/actualidad/
1462696235_640939.html.
[12] Package base version 3.3.0. Regular expressions as used in r. URL https://stat.
ethz.ch/R-manual/R-devel/library/base/html/regex.html.
[13] Package base version 3.4.0. Data frames. URL https://stat.ethz.ch/R-manual/
R-devel/library/base/html/data.frame.html.
[14] El Paıs. Un centenar de muertos en varios atentados del isis en siria. Mayo
2016. URL http://internacional.elpais.com/internacional/2016/05/23/
actualidad/1463996339_390023.html.
[15] Adrian A. Dragulescu. Read, write, format excel 2007 and excel 97/2000/xp/2003
files (v. 0.5.7). Febrero 2015. URL https://cran.r-project.org/web/packages/
xlsx/xlsx.pdf.
[16] Centro de Investigacion TALP. Freeling user manual. Universidad Politecnica
de Cataluna. URL https://talp-upc.gitbooks.io/freeling-user-manual/
content/index.html.
[17] Bogdan Patrut. Syntactic analysis based on morphological characteristic features
of the romanian language vol.1. Diciembre 2012. URL https://arxiv.org/ftp/
arxiv/papers/1301/1301.1950.pdf.
[18] Jonathan Chang. Collapsed gibbs sampling methods for topic models (v. 1.4.2).
Noviembre 2015. URL https://cran.r-project.org/web/packages/lda/lda.
pdf.
[19] Bettina Grun and Kurt Hornik. Topicmodels: An r package for fitting topic models.
Mayo 2011. URL https://cran.r-project.org/web/packages/topicmodels/
vignettes/topicmodels.pdf.
[20] Friedrich Leisch. Creating r packages: A tutorial. 2008. URL https://cran.
r-project.org/doc/contrib/Leisch-CreatingPackages.pdf.
[21] Robin K. S. Hankin. A step-by-step guide to writing a simple package that uses
s4 methods: a “hello world” example. 2007. URL https://cran.r-project.org/
web/packages/Brobdingnag/vignettes/brob.pdf.
81
Bibliografıa
[22] Friedrich Leisch. S4 classes and methods. Mayo 2004. URL https://www.
r-project.org/conferences/useR-2004/Keynotes/Leisch.pdf.
[23] Wikilengua. Lista de complementos de regimen. URL http://www.wikilengua.
org/index.php/Lista_de_complementos_de_r%C3%A9gimen_A.
[24] Ingo Feinerer et al. Text mining infrastructure in r. Marzo 2008. URL https:
//www.jstatsoft.org/article/view/v025i05/v25i05.pdf.
82
Este documento esta firmado porFirmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM,
C=ES
Fecha/Hora Mon Jun 06 10:55:49 CEST 2016
Emisor delCertificado
[email protected], CN=CA Facultad deInformatica, O=Facultad de Informatica - UPM, C=ES
Numero de Serie 630
Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (AdobeSignature)