Advertisement
elcocodrilotito

Práctica 1 (incompleta)

Mar 20th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.04 KB | None | 0 0
  1. #Daniel Bedialauneta y Athenea Beltrán
  2. #Práctica 1
  3. from string import punctuation
  4. from math import sqrt
  5. def histograma(email):
  6.     letras="abcdefghijklmnopqrstuvwxyz"
  7.     d=dict()
  8.     fp=open(email,"r",encoding='utf-8')
  9.     linea=fp.readline()
  10.     while linea!="\n":
  11.         linea=fp.readline()
  12.     linea=fp.readline()
  13.     while linea:
  14.         for i in linea.split():
  15.             i=i.lower().strip(punctuation)
  16.             if i=="":
  17.                 continue
  18.             bien=True
  19.             for j in i:
  20.                 if j not in letras:
  21.                     bien=False
  22.                     break
  23.             if bien:
  24.                 if i in d:
  25.                     d[i]+=1
  26.                 else:
  27.                     d[i]=1
  28.         linea=fp.readline()
  29.     return d
  30.  
  31. def suma_histogramas(dp,d): #dp=diccionario principal (diccionario suma), d=diccionario parcial
  32.     for i in d:
  33.         if i in dp:
  34.             dp[i]+=d[i]
  35.         else:
  36.             dp[i]=d[i]
  37.     return dp
  38.  
  39. def normalizacion(d): #d=diccionario
  40.     sumatorio=0
  41.     for i in d:
  42.         sumatorio+=d[i]
  43.     for i in d:
  44.         d[i]=d[i]/sumatorio
  45.     return d
  46.  
  47. def frecuentes(d):
  48.     media=0
  49.     sumatorio=0
  50.     for i in d:
  51.         sumatorio+=d[i]
  52.     media=sumatorio/len(d)
  53.     lista=[]
  54.     for i in d:
  55.         if d[i]>=3*media:
  56.             lista.append(i)
  57.     return lista
  58.    
  59. def raras(d,n=4):
  60.     lista=[]
  61.     for i in d:
  62.         if d[i]<=n:
  63.             lista.append(i)
  64.     return lista
  65.  
  66. def borrar_palabras(d,lista1,lista2):
  67.     for i in lista1+lista2:
  68.         if i in d:
  69.             del d[i]
  70.     return d
  71.  
  72. def d_euclidea(hx,hc,suma):
  73.     for w in hx:
  74.         if w in c:
  75.             suma-=hc[w]**2
  76.             suma+=(hx[w]-hc[w])**2
  77.         else:
  78.             suma+=hx[w]**2
  79.     return sqrt(suma)
  80.  
  81. def d_superposicion(hx,hc):
  82.     suma=0
  83.     for w in hx:
  84.         if w in hc:
  85.             suma=suma+min(hx[w],hc[w])
  86.     return 1-suma
  87.  
  88. def d_correlacion(hx,hc):
  89.     suma=0
  90.     for w in hx:
  91.         if w in hc:
  92.             suma+=hx[w]*hc[w]
  93.     return 1-suma
  94.  
  95. #Programa
  96. fp=open("metalista_train.txt","r")
  97. d_clases=dict()
  98. for clase in fp:
  99.     fp2=open(clase[:-1],"r")
  100.     d_clase=dict()
  101.     for linea2 in fp2:
  102.         d_parcial=histograma(linea2[:-1])
  103.         d_clase=suma_histogramas(d_clase,d_parcial)
  104.     d_clases[clase[:-1]]=d_clase
  105.     fp2.close()
  106. fp.close()
  107. d_lengua=dict()
  108. for clase in d_clases:
  109.     d_lengua=suma_histogramas(d_lengua,d_clases[clase])
  110. lista1=frecuentes(d_lengua)
  111. lista2=raras(d_lengua)
  112. del d_lengua
  113. for clase in d_clases:
  114.     d_clases[clase]=normalizacion(borrar_palabras(d_clases[clase],lista1,lista2))
  115. #Hasta aquí obtenemos el diccionario de cada clase, d_clases[clase], guardados en un diccionario de cada clase llamado d_clases
  116.    
  117. fp=open("metalista_test.txt","r")
  118. errores=[]
  119. for clase in fp:
  120.     fp2=open(clase[:-1],"r")
  121.     for email in fp2:
  122.         lista=[]
  123.         d_email=histograma(email[:-1])
  124.         for clase in d_clases:
  125.             lista.append(d_superposicion(d_email,d_clases[clase]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement