From 7aba0bc446ede4cd82d9f197b423d032db84fded Mon Sep 17 00:00:00 2001 From: SebastianCB Date: Wed, 2 Nov 2022 22:27:42 -0500 Subject: [PATCH] Feat: Added more function to preprocessing service --- BECK/app.py | 57 +++++++---------------------------- BECK/preprocessing_service.py | 32 ++++++++++++++++++-- 2 files changed, 40 insertions(+), 49 deletions(-) diff --git a/BECK/app.py b/BECK/app.py index f1720b6..786f2df 100644 --- a/BECK/app.py +++ b/BECK/app.py @@ -1,51 +1,16 @@ -import json -from pprint import pprint -import numpy as np -from sklearn.metrics import euclidean_distances - -from preprocessing_service import Preprocesamiento -from model_word2vec_service import ModelWord2Vec +import pandas as pd import nltk nltk.download('punkt') +from preprocessing_service import Preprocesamiento -# Leer información del archivo items.json y de comentarios test -comments_array = list(open('./comentarios_test.txt', - 'r', encoding='utf-8').readlines()) - -# Leer información del archivo item_preprocess.json -beck_data_preprocessing = {} -try: - if open('./JSON/items_preprocessing.json', 'r'): - beck_data_preprocessing = json.loads( - open('./JSON/items_preprocessing.json', 'r', encoding='utf-8').read()) -except Exception as e: - print(f'Error: {e}') - - -preprocesamiento = Preprocesamiento() -# Vector Space Embedding -w2v = ModelWord2Vec() -word1 = ["hoy", "querer", "morir"] -word2 = ["ser", "dia", "suicidar"] -w2v.add_corpus(word1) -w2v.add_corpus(word2) -# comment_test = preprocesamiento.preprocesamiento_con_ortografia( -# comments_array[0]) -# array_item = [] -# # Get Vector Beck -# item_string = 'Pensamiento o deseos suicidas' -# for key in beck_data_preprocessing[item_string].keys(): -# array_item.append(beck_data_preprocessing[item_string][key]["data"]) - -# print(comment_test) -# i = 0 -# for item in array_item: -# coseno = w2v.get_cosine_distance(item, comment_test) -# print(f'{item_string} - Item BECK {i} distancia coseno: ${coseno}') -# euclidian = w2v.get_euclidian_distance(["hoy", "me", "quiero", "morir"], ["no", "morir"]) -# print(f'{item_string} - Item BECK {i} distancia euclidiana: ${euclidian}') -# i += 1 +df = pd.read_csv('./comentarios_español_depresivos.csv', encoding='utf-8') +pp = Preprocesamiento() +comentarios = list(df['text']) +clases = list(df['class']) -# result = w2v.getVectorBeck(comment_test, beck_data_preprocessing) -# print(result) +print('-- Comentario antes --') +print(comentarios[0]) +print('-- Comentario despúes --') +comentario_preprocesado = pp.preprocesamiento_sin_ortografia(comentarios[0]) +print(comentario_preprocesado) \ No newline at end of file diff --git a/BECK/preprocessing_service.py b/BECK/preprocessing_service.py index 4a7c87f..b043e92 100644 --- a/BECK/preprocessing_service.py +++ b/BECK/preprocessing_service.py @@ -42,12 +42,14 @@ def preprocesamiento_con_ortografia(self, texto): """ # Eliminar etiquetas y hashtags + texto = self.normalizar(texto) texto = self.eliminar_etiquetados(texto) texto = self.eliminar_emojis(texto) texto = self.eliminacion_data_inutil(texto) texto = self.correccion_ortografica(texto) texto = self.stop_words(texto) texto = self.lematizacion(texto) + texto = self.eliminar_duplicados(texto) return texto @@ -59,11 +61,13 @@ def preprocesamiento_sin_ortografia(self, texto): :return: Texto procesado y limpiado """ # Eliminar etiquetas y hashtags + texto = self.normalizar(texto) texto = self.eliminar_etiquetados(texto) texto = self.eliminar_emojis(texto) texto = self.eliminacion_data_inutil(texto) texto = self.stop_words(texto) texto = self.lematizacion(texto) + texto = self.eliminar_duplicados(texto) return texto def eliminar_etiquetados(self, texto): @@ -99,9 +103,7 @@ def eliminacion_data_inutil(self, texto): El listado de signos de puntuación se ha obtenido de: print(string.punctuation) y re.escape(string.punctuation) ''' - - # Se convierte todo el texto a minúsculas - nuevo_texto = texto.lower() + nuevo_texto = texto # Eliminación de páginas web (palabras que empiezan por "http") nuevo_texto = re.sub('http\S+', ' ', nuevo_texto) # Eliminación de signos de puntuación @@ -162,3 +164,27 @@ def correccion_ortografica(self, texto): result += res + " " result = result.strip() return result + + def normalizar(self, texto): + """ + 1. Toma texto como entrada. + 2. Convierte el texto a minusculas. + 3. Reemplaza las letras con tildes por letras normales. + + :param words: Texto a convertir + :return: Texto transformado + """ + texto = texto.lower() + + texto = re.sub('á', 'a', texto) + texto = re.sub('é', 'e', texto) + texto = re.sub('í', 'i', texto) + texto = re.sub('ó', 'o', texto) + texto = re.sub('ú', 'u', texto) + texto = re.sub('ü', 'u', texto) + texto = re.sub('ñ', 'n', texto) + + return texto + + def eliminar_duplicados(self, lista): + return list(set(lista))