Guest User

Untitled

a guest
Sep 13th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.14 KB | None | 0 0
  1. # -*- coding: utf8 -*-
  2. import pandas as pd
  3. import psycopg2
  4. import numpy as np
  5. import re
  6. import string
  7. import sklearn
  8. from nltk.corpus import stopwords
  9. from sklearn.externals import joblib
  10. from sklearn.pipeline import Pipeline
  11. from sklearn.linear_model import LogisticRegression
  12. from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
  13. from sklearn.naive_bayes import GaussianNB
  14. from sklearn.naive_bayes import MultinomialNB
  15. from sklearn.neighbors import NearestNeighbors
  16. import pickle
  17. from sklearn.externals import joblib
  18.  
  19. conn = psycopg2.connect(host="10.1....", port="5432", database="aplicationNames", user="aplicationNames", password="aplicationNames")
  20.  
  21. # dataframe com o texto dos sintomas e a categoria do cat
  22. df = pd.read_sql(
  23. "SELECT dsobservacaoclinica1, cdcatcategoria AS cat FROM iaconsultas limit 500",
  24. conn)
  25. # criação das colunas do dataframe
  26. df.columns = ['texto', 'cat']
  27. # print(df) #imprimindo o dataframe
  28. # Pegando os textos puros da coluna texto, para normalização.
  29. # textos puros terão de ter um índice
  30. df['texto'] = df['texto'].astype(str).str.replace('-', '')
  31. df['texto'] = df['texto'].astype(str).str.replace('/', '')
  32. df['texto'] = df['texto'].astype(str).str.replace('+', '')
  33. df['texto'] = df['texto'].astype(str).str.replace('ões', '')
  34. df['texto'] = df['texto'].astype(str).str.replace(';', '')
  35. df['texto'] = df['texto'].astype(str).str.replace('#', '')
  36. df['texto'] = df['texto'].astype(str).str.replace('~', '')
  37. df['texto'] = df['texto'].astype(str).str.replace(':', '')
  38. df['texto'] = df['texto'].astype(str).str.lower().str.split()
  39. stop = stopwords.words("portuguese")
  40. textosPuros = df['texto'].apply(lambda x: [w for w in x if not w in stop])
  41.  
  42.  
  43. # textosPuros = df['texto'].astype(str).str.replace('n', '')
  44.  
  45. # print(textosPuros)
  46.  
  47. def remove(string):
  48. novo = []
  49. for x in string:
  50. item = x
  51. for y in ['n', 't', '/', '.', '-', '(', ')']:
  52. item = item.replace(y, "")
  53. novo.append(item)
  54. return novo
  55.  
  56.  
  57. # print(textosPuros)
  58.  
  59. textoMinusculo = textosPuros
  60.  
  61. # print(textoMinusculo)
  62.  
  63. textoLimpo = textoMinusculo # [item for item in textoMinusculo if item not in ['n', 't']]
  64.  
  65. # textoLimpo = re.sub()
  66. dicionario = set()
  67. for lista in textoLimpo:
  68. dicionario.update(lista)
  69. # imprime dicionario
  70. print("Dicioonario")
  71. # dicionario = {y.strip('tn.,/1234567890();:-_') for y in dicionario}
  72. print(dicionario)
  73. # imprime as palavras limpas
  74. print(textoLimpo)
  75.  
  76. # Atribui cada palavra a uma posicao no dicionario
  77. totalDePalavras = len(dicionario)
  78. tuplas = zip(dicionario, np.arange(totalDePalavras))
  79. tradutor = {palavra: indice for palavra, indice in tuplas}
  80.  
  81. # Mostra a quantidade total de palavras
  82. print("Total de palavras: ")
  83. print(totalDePalavras)
  84.  
  85.  
  86. def vetorizar_texto(texto, tradutor):
  87. vetor = [0] * len(tradutor)
  88.  
  89. for palavra in texto:
  90. if palavra in tradutor:
  91. posicao = tradutor[palavra]
  92. vetor[posicao] += 1
  93.  
  94. return vetor
  95.  
  96.  
  97. # Vincula os textos quebrados a posicao no vetor
  98. vetoresDeTexto = [vetorizar_texto(texto, tradutor) for texto in textoLimpo]
  99. marcas = df['cat']
  100. # Define o conjunto de dados X
  101. X = np.array(vetoresDeTexto)
  102. # Define o conjunto de dados Y (labels)
  103. Y = np.array(marcas.tolist())
  104.  
  105. # Define porcentagem do treino
  106. porcentagem_de_treino = 0.8
  107.  
  108. # Separa o tamanho do treino a partir da porcentagem
  109. tamanho_do_treino = int(porcentagem_de_treino * len(Y))
  110. # O restante fica para a validacao
  111. tamanho_de_validacao = (len(Y) - tamanho_do_treino)
  112.  
  113. print("Frases disponiveis: ")
  114. # print(len(Y))
  115. print("Frases para treino: ")
  116. # print(tamanho_do_treino)
  117. print("Frase para validacao: ")
  118. # print(tamanho_de_validacao)
  119.  
  120. # Separa os dados de treino
  121. treino_dados = X[0:tamanho_do_treino]
  122. # Separa as marcacoes de treino
  123. treino_marcacoes = Y[0:tamanho_do_treino]
  124. # Separa os dados de validacao
  125. validacao_dados = X[tamanho_do_treino:]
  126. # Separa as marcacoes de validacao
  127. validacao_marcacoes = Y[tamanho_do_treino:]
  128.  
  129. print("Textos usados na validacao: ")
  130. # print(textoLimpo[tamanho_do_treino:])
  131. print("Validacao Marcacoes: ")
  132. print(validacao_marcacoes)
  133.  
  134. clf = LogisticRegression() # MultinomialNB() obtive 62% de acerto#GaussianNB()
  135. clf.fit(treino_dados, treino_marcacoes)
  136. # resp = clf.predict(validacao_dados)
  137.  
  138. accuracy = clf.score(validacao_dados, validacao_marcacoes)
  139.  
  140. print("Indice de acerto do algoritmo: ")
  141. print("%.2f " % round(accuracy * 100) + "%n")
  142. # salvando treino com pickle
  143. file_name = 'treino.sav'
  144. pickle._dump(clf, open(file_name, 'wb'))
  145. # salvando treino com joblib
  146. file_name_joblib = 'treino_joblib.sav'
  147. joblib.dump(clf, file_name_joblib)
  148. '''for cat in resp:
  149. print("cat {:16s}".format(cat))
  150. '''
  151.  
  152. def predict():
  153. pr = pd.read_csv('csv_to_predict.csv', sep=';', header=0, usecols=[0])
  154. pred_cols = list(pr.columns.values)[0]
  155. test = ['buscar resultado']
  156. tvect = TfidfVectorizer(min_df=1, max_df=1)
  157. X_test = test #vetoresDeTexto(test, tradutor) # tvect.transform(test)
  158. # carregar modelo salvo para predição com pickle
  159. loaded_model = pickle.load(open(file_name, 'rb'))
  160. # carregando modelo salvo para predição com joblib
  161. loaded_model_joblib = joblib.load(file_name_joblib)
  162. result = loaded_model_joblib.predict(X_test)
  163. print(result)
  164.  
  165.  
  166. predict()
  167.  
  168. Traceback (most recent call last):
  169. File "C:/Python/categoriesTest/DataBases.py", line 167, in <module>
  170. predict()
  171. File "C:/Python/categoriesTest/DataBases.py", line 163, in predict
  172. result = loaded_model_joblib.predict(X_test)
  173. File "C:Program Files (x86)Python37-32libsite-packagessklearnlinear_modelbase.py", line 324, in predict
  174. scores = self.decision_function(X)
  175. File "C:Program Files (x86)Python37-32libsite-packagessklearnlinear_modelbase.py", line 300, in decision_function
  176. X = check_array(X, accept_sparse='csr')
  177. File "C:Program Files (x86)Python37-32libsite-packagessklearnutilsvalidation.py", line 441, in check_array
  178. "if it contains a single sample.".format(array))
  179. ValueError: Expected 2D array, got 1D array instead:
  180. array=['buscar resultado'].
  181. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
  182.  
  183. result = loaded_model_joblib.predict(X_test)
  184.  
  185. result = loaded_model_joblib.predict(X_test.reshape(1,-1))
Add Comment
Please, Sign In to add comment