fork download
  1. #clasificador idiomas con naive bayes
  2. def lista_palabras(texto):
  3. palabras=[]
  4. palabras_tmp=texto.lower().split()
  5. for p in palabras_tmp:
  6. if p not in palabras and len(p)>2:
  7. palabras.append(p)
  8. return palabras
  9.  
  10. def entrenar (textos):
  11. c_palabras={}
  12. c_categorias={}
  13. c_textos=0
  14. c_tot_palabras=0
  15. #anadir al diccionario las categorias
  16. for t in textos:
  17. c_textos=c_textos+1
  18. if t[1] not in c_categorias:
  19. c_categorias[t[1]]=1
  20. else:
  21. c_categorias[t[1]]=c_categorias[t[1]]+1
  22. #anadir palabras al diccionario
  23. for t in textos:
  24. palabras=lista_palabras(t[0])
  25. for p in palabras:
  26. if p not in c_palabras :
  27. c_tot_palabras= c_tot_palabras +1
  28. c_palabras [p]={}
  29. for c in c_categorias:
  30. c_palabras[p][c]=0
  31. c_palabras [p][t[1]]= c_palabras [p][t[1]] +1
  32. return (c_palabras, c_categorias, c_textos, c_tot_palabras)
  33. def clasificar (texto, c_palabras, c_categorias, c_textos, c_tot_palabras):
  34. categoria=""
  35. prob_categoria=0
  36. for c in c_categorias:
  37. #probabilidad de la categoria
  38. prob_c=float(c_categorias[c]) / float(c_textos)
  39. palabras=lista_palabras(texto)
  40. prob_total_c=prob_c
  41. for p in palabras:
  42. #probabilidad de la palabra
  43. if p in c_palabras:
  44. prob_p=float(c_palabras [p] [c] ) / float (c_tot_palabras)
  45. # probabilidad P (categoria I palabra)
  46. prob_cond=prob_p/prob_c
  47. # probabilidad P (palabra I categoria)
  48. prob=(prob_cond*prob_p) / prob_c
  49. prob_total_c=prob_total_c*prob
  50. if prob_categoria<prob_total_c:
  51. categoria=c
  52. prob_categoria=prob_total_c
  53. return (categoria, prob_categoria)
  54. if __name__ == "__main__":
  55. textos=[
  56. ["Allez tout droit et prenez la prochaine rue", "frances"],
  57. ["Go straight and take the next street", "ingles"],
  58. ["Siga recto y gire en la siguiente calle", "espanol"],
  59. ["Intelligence Artificielle est une discipline tres interessante", "frances"],
  60. ["Artificial Intelligence is very interesting discipline", "ingles"],
  61. ["La Inteligencia Artificial es una disciplina muy interesante", "espanol"]
  62. ]
  63. p,c,t,tp= entrenar(textos)
  64. clase = clasificar("The straight lineto the Artificial Intelligence is a turn of our brain", p,c,t,tp)
  65. #La recta a la Inteligencia Artificial es un giro de nuestro cerebro
  66. #La ligne droite vers l'Intelligence Artificielle est un tour de notre cerveau
  67. print ("Texto clasificado como: "+ str(clase))
Success #stdin #stdout 0.02s 7080KB
stdin
Standard input is empty
stdout
Texto clasificado como: ('', 0)