Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. import re
  2.  
  3. def le_assinatura():
  4. '''A funcao le os valores dos tracos linguisticos do modelo e devolve uma assinatura a ser comparada com os textos fornecidos'''
  5. print("Bem-vindo ao detector automático de COH-PIAH.")
  6.  
  7. wal = float(input("Entre o tamanho medio de palavra:"))
  8. ttr = float(input("Entre a relação Type-Token:"))
  9. hlr = float(input("Entre a Razão Hapax Legomana:"))
  10. sal = float(input("Entre o tamanho médio de sentença:"))
  11. sac = float(input("Entre a complexidade média da sentença:"))
  12. pal = float(input("Entre o tamanho medio de frase:"))
  13.  
  14. return [wal, ttr, hlr, sal, sac, pal]
  15.  
  16. def le_textos():
  17. i = 1
  18. textos = []
  19. texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
  20. while texto:
  21. textos.append(texto)
  22. i += 1
  23. texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
  24.  
  25. return textos
  26.  
  27. def separa_sentencas(texto):
  28. '''A funcao recebe um texto e devolve uma lista das sentencas dentro do texto'''
  29. sentencas = re.split(r'[.!?]+', texto)
  30. if sentencas[-1] == '':
  31. del sentencas[-1]
  32. return sentencas
  33.  
  34. def separa_frases(sentenca):
  35. '''A funcao recebe uma sentenca e devolve uma lista das frases dentro da sentenca'''
  36. return re.split(r'[,:;]+', sentenca)
  37.  
  38. def separa_palavras(frase):
  39. '''A funcao recebe uma frase e devolve uma lista das palavras dentro da frase'''
  40. return frase.split()
  41.  
  42. def n_palavras_unicas(lista_palavras):
  43. '''Essa funcao recebe uma lista de palavras e devolve o numero de palavras que aparecem uma unica vez'''
  44. freq = dict()
  45. unicas = 0
  46. for palavra in lista_palavras:
  47. p = palavra.lower()
  48. if p in freq:
  49. if freq[p] == 1:
  50. unicas -= 1
  51. freq[p] += 1
  52. else:
  53. freq[p] = 1
  54. unicas += 1
  55.  
  56. return unicas
  57.  
  58. def n_palavras_diferentes(lista_palavras):
  59. '''Essa funcao recebe uma lista de palavras e devolve o numero de palavras diferentes utilizadas'''
  60. freq = dict()
  61. for palavra in lista_palavras:
  62. p = palavra.lower()
  63. if p in freq:
  64. freq[p] += 1
  65. else:
  66. freq[p] = 1
  67.  
  68. return len(freq)
  69.  
  70. def compara_assinatura(as_a, as_b):
  71. '''IMPLEMENTAR. Essa funcao recebe duas assinaturas de texto e deve devolver o grau de similaridade nas assinaturas.'''
  72.  
  73. # Sab=∑i=16||fi,a−fi,b||6
  74. somatoria = 0
  75. for traco_linguistico in range(len(as_a)):
  76. somatoria = somatoria + abs(as_a[traco_linguistico] - as_b[traco_linguistico])
  77. return somatoria / 6
  78.  
  79. def calcula_assinatura(texto):
  80. '''IMPLEMENTAR. Essa funcao recebe um texto e deve devolver a assinatura do texto.'''
  81. sentencas = separa_sentencas(texto)
  82.  
  83. lista_frases = []
  84. for s in sentencas:
  85. frases_separadas = separa_frases(s)
  86. # separa_frases retorna um item de lista para cada sentença
  87. # e esses itens são unidos em uma única lista, frases
  88. for frases in frases_separadas:
  89. lista_frases.append(frases)
  90.  
  91. lista_palavras = []
  92. for f in lista_frases:
  93. palavras_separadas = separa_palavras(f)
  94. for palavras in palavras_separadas:
  95. lista_palavras.append(palavras)
  96. assinatura = []
  97.  
  98. assinatura.append(tamanho_medio_palavras(lista_palavras))
  99. assinatura.append(relacao_type_token(lista_palavras))
  100. assinatura.append(razao_hapax_legomana(lista_palavras))
  101. assinatura.append(tamanho_medio_de_sentenca(sentencas))
  102. assinatura.append(complexidade_de_sentenca(lista_frases, sentencas))
  103. assinatura.append(tamanho_medio_de_frase(lista_frases))
  104.  
  105. return assinatura
  106.  
  107. def avalia_textos(textos, ass_cp):
  108. '''IMPLEMENTAR. Essa funcao recebe uma lista de textos e deve devolver o numero (1 a n) do texto com maior probabilidade de ter sido infectado por COH-PIAH.'''
  109. print(ass_cp)
  110. valor = ass_cp[0]
  111. for x in range(len(ass_cp)):
  112. if ass_cp[x] < valor:
  113. valor = ass_cp[x]
  114. return x
  115.  
  116. # Tamanho médio de palavra é a soma dos tamanhos das palavras dividida pelo número total de palavras:
  117. def tamanho_medio_palavras(palavras):
  118. tamanho_das_palavras = 0
  119. total_de_palavras = len(palavras)
  120. for palavra in palavras:
  121. tamanho_das_palavras = tamanho_das_palavras + len(palavra)
  122.  
  123. return tamanho_das_palavras/total_de_palavras
  124.  
  125. # Relação Type-Token é o número de palavras diferentes dividido pelo número total de palavras.
  126. def relacao_type_token(palavras):
  127. return n_palavras_diferentes(palavras) / len(palavras)
  128.  
  129. # Razão Hapax Legomana é o número de palavras que aparecem uma única vez dividido pelo total de palavras.
  130. def razao_hapax_legomana(palavras):
  131. return n_palavras_unicas(palavras) / len(palavras)
  132.  
  133. # Tamanho médio de sentença é a soma dos números de caracteres em todas as sentenças dividida pelo número
  134. # de sentenças (os caracteres que separam uma sentença da outra não devem ser contabilizados como parte da sentença).
  135. def tamanho_medio_de_sentenca(sentencas):
  136. caracteres_sentenca = 0
  137. for sentenca in sentencas:
  138. caracteres_sentenca = caracteres_sentenca + len(sentenca)
  139. return caracteres_sentenca / len(sentencas)
  140.  
  141. # Complexidade de sentença é o número total de frases divido pelo número de sentenças.
  142. def complexidade_de_sentenca(lista_frases, sentencas):
  143. return len(lista_frases) / len(sentencas)
  144.  
  145. # Tamanho médio de frase é a soma do número de caracteres em cada frase dividida pelo
  146. # número de frases no texto (os caracteres que separam uma frase da outra não devem ser contabilizados como parte da frase).
  147. def tamanho_medio_de_frase(lista_frases):
  148. caracteres_frase = 0
  149. for frases in lista_frases:
  150. caracteres_frase = caracteres_frase + len(frases)
  151. return caracteres_frase / len(lista_frases)
  152.  
  153. def main():
  154. assinatura_principal = le_assinatura()
  155. textos = le_textos()
  156. assinaturas = []
  157. for texto in textos:
  158. assinaturas.append(calcula_assinatura(texto))
  159.  
  160. assinaturas_comparadas = []
  161. for assinatura in assinaturas:
  162. assinaturas_comparadas.append(compara_assinatura(assinatura_principal, assinatura))
  163.  
  164. infectado = avalia_textos(textos, assinaturas_comparadas)
  165. print("O autor do texto", infectado, "está infectado com COH-PIAH.")
  166.  
  167. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement