Advertisement
kirtep

Untitled

Jan 17th, 2017
4,378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.81 KB | None | 0 0
  1. """Introdução
  2.  
  3. John é monitor na matéria de Introdução à Produção Textual I na Penn State University (PSU). Durante esse período, John descobriu que uma epidemia de COH-PIAH estava se espalhando pela PSU. Esses doença rara e altamente contagiosa faz com que as pessoas contaminadas produzam textos extremamente semelhantes de forma involuntária. Após a entrega da primeira redação, John desconfiou que alguns alunos estavam sofrendo de COH-PIAH. John, se preocupando com a saúde da turma, resolveu buscar um método para identificar os casos de COH-PIAH. Para isso, ele necessita da sua ajuda para desenvolver um programa que o auxilie a identificar os alunos contaminados.
  4.  
  5. Detecção de autoria
  6.  
  7. Utilizando diferentes estatísticas do texto, é possível identificar aspectos que funcionam como uma “assinatura” do autor. Diferentes pessoas possuem diferentes estilos de escrita, algumas preferindo sentenças mais curtas, outras preferindo sentenças mais longas.
  8.  
  9. Essas “assinatura” pode ser utilizada para detecção de plágio, evidência forense, ou nesse caso, para detectar a grave doença COH-PIAH.
  10.  
  11. Traços linguísticos
  12.  
  13. Nesse exercício utilizaremos as seguintes estatísticas para detectar a doença:
  14.  
  15. Tamanho médio de palavra: Média simples do número de caracteres por palavra.
  16. Relação Type-Token: Número de palavras diferentes utilizadas em um texto divididas pelo total de palavras.
  17. Razão Hapax Legomana: Número de palavras utilizadas uma vez dividido pelo número total de palavras.
  18. Tamanho médio de sentença: Média simples do número de caracteres por sentença.
  19. Complexidade de sentença: Média simples do número de frases por sentença.
  20. Tamanho médio de frase: Média simples do número de caracteres por frase.
  21. Funcionamento do programa
  22.  
  23. Diversos estudos foram compilados e hoje se conhece precisamente a assinatura de um portador de COH-PIAH. Seu programa deverá receber diversos textos e calcular diferentes os valores dos diferentes traços linguísticos da seguinte forma:
  24.  
  25. Tamanho médio de palavra é a soma dos tamanhos das palavras dividida pelo número total de palavras.
  26. Relação Type-Token é a soma do número de palavras únicas dividida pelo número total de palavras. Por exemplo, na frase "O gato caçava o rato", temos 5 palavras no total (o, gato, caçava, o, rato) mas somente 4 diferentes (o, gato, caçava, rato). Nessa frase, a relação Type-Token vale 45=0.8
  27. Razão Hapax Legomana é a soma do número de palavras que aparecem uma única vez dividida pelo total de palavras. Por exemplo, na frase "O gato caçava o rato", temos 5 palavras no total (o, gato, caçava, o, rato) mas somente 3 que aparecem só uma vez (gato, caçava, rato). Nessa frase, a relação Hapax Legomana vale 35=0.6
  28. Tamanho médio de sentença é a soma dos números de caracteres em todas as sentenças dividida pelo número de sentenças.
  29. Complexidade de sentença é o número de frases em uma sentença divido pelo número de sentenças.
  30. Tamanho médio de frase é a soma do número de caracteres em cada frase dividida pelo número de frases no texto.
  31. Após calcular esses valores para cada texto, você deve comparar com a assinatura fornecida para os infectados por COH-PIAH. O grau de similaridade entre dois textos, a e b, é dado pela fórmula:
  32.  
  33. [[[Fórmula do exercicio]]] não consigo copiar aqui
  34.  
  35. Sab é o grau de similaridade entre os textos a e b;
  36. fi,a é o valor de cada traço linguístico i no texto a; e
  37. fi,b é o valor de cada traço linguístico i no texto b.
  38. Perceba que quanto mais similares a e b forem, menor Sab será. Para cada texto, você deve imprimir o grau de similaridade com a assinatura do portador de COH-PIAH e no final exibir qual o texto que mais provavelmente foi escrito por algum aluno infectado.
  39.  
  40. Exemplo:
  41.  
  42. Bem-vindo ao detector automático de COH-PIAH.
  43.  
  44.  
  45. Entre o tamanho medio de palavra: 4.79
  46. Entre a relação Type-Token: 0.72
  47. Entre a Razão Hapax Legomana: 0.56
  48. Entre o tamanho médio de sentença: 80.5
  49. Entre a complexidade média da sentença: 2.5
  50. Entre o tamanho medio de frase: 31.6
  51.  
  52. Digite o texto 1 (aperte enter para sair):
  53. Navegadores antigos tinham uma frase gloriosa:'''"Navegar é preciso; viver não é preciso".
  54. Quero para mim o espírito [d]esta frase, transformada a forma para a casar como eu sou:
  55. Viver não é necessário; o que é necessário é criar. Não conto gozar a minha vida; nem em gozá-la penso.
  56. Só quero torná-la grande,ainda que para isso tenha de ser o meu corpo e a (minha alma) a lenha desse fogo.
  57. Só quero torná-la de toda a humanidade;ainda que para isso tenha de a perder como minha.
  58. Cada vez mais assim penso.Cada vez mais ponho da essência anímica do meu sangueo propósito impessoal de
  59. engrandecer a pátria e contribuirpara a evolução da humanidade.É a forma que em mim tomou o misticismo da
  60. nossa Raça.'''
  61.  
  62. Digite o texto 2 (aperte enter para sair):
  63. Voltei-me para ela; Capitu tinha os olhos no chão. Ergueu-os logo, devagar, e ficamos a olhar um para o
  64. outro... Confissão de crianças, tu valias bem duas ou três páginas, mas quero ser poupado. Em verdade,
  65. não falamos nada; o muro falou por nós. Não nos movemos, as mãos é que se estenderam pouco a pouco, todas
  66. quatro, pegando-se, apertando-se, fundindo-se. Não marquei a hora exata daquele gesto.
  67. Devia tê-la marcado; sinto a falta de uma nota escrita naquela mesma noite,
  68. e que eu poria aqui com os erros de ortografia que trouxesse, mas não traria nenhum,
  69. tal era a diferença entre o estudante e o adolescente. Conhecia as regras do escrever,
  70. sem suspeitar as do amar; tinha orgias de latim e era virgem de mulheres.
  71.  
  72. Digite o texto 3 (aperte enter para sair):
  73. NOSSA alegria diante dum sistema metafisico, nossa satisfação em
  74. presença duma construção do pensamento, em que a organização espiritual do
  75. mundo se mostra num conjunto lógico, coerente a harmônico, sempre
  76. dependem eminentemente da estética; têm a mesma origem que o prazer, que
  77. a alta satisfação, sempre serena afinal, que a atividade artística nos
  78. proporciona quando cria a ordem e a forma a nos permite abranger com a vista
  79. o caos da vida, dando-lhe transparência.
  80.  
  81. Digite o texto 4 (aperte enter para sair):
  82.  
  83. O autor do texto 2 esta infectado com COH-PIAH
  84.  
  85. Funções de suporte
  86.  
  87. As seguintes funções devem ser utilizadas no seu programa, algumas já estão implementadas, outras devem ser completadas por vocês. Sinta-se livre para criar funções adicionais, caso necessário.
  88.  
  89. Dica: aproveite as funções pré-prontas do esqueleto, como "separa_sentenca", "separa_frase" etc.! Como há mais de uma maneira de pensar a separação entre frases/palavras/sentenças, usando essas funções você vai fazer o cálculo da maneira esperada pelo corretor automático.
  90. """
  91. import re
  92.  
  93. def le_assinatura():
  94.     print("Bem-vindo ao detector automático de COH-PIAH.")
  95.  
  96.     wal = float(input("Entre o tamanho medio de palavra:"))
  97.     ttr = float(input("Entre a relação Type-Token:"))
  98.     hlr = float(input("Entre a Razão Hapax Legomana:"))
  99.     sal = float(input("Entre o tamanho médio de sentença:"))
  100.     sac = float(input("Entre a complexidade média da sentença:"))
  101.     pal = float(input("Entre o tamanho medio de frase:"))
  102.  
  103.     return [wal, ttr, hlr, sal, sac, pal]
  104.  
  105. def le_texto():
  106.     i = 1
  107.     textos = []
  108.     texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
  109.     while texto:
  110.         textos.append(texto)
  111.         i += 1
  112.         texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
  113.  
  114.     return textos
  115.  
  116. def separa_sentenca(texto):
  117.   '''A funcao recebe um texto e retorna uma lista das sentencas dentro do texto'''
  118.     sentencas = re.split(r'[.!?]+', texto)
  119.     if sentencas[-1] == '':
  120.         del sentencas[-1]
  121.     return sentencas
  122.  
  123. def separa_frase(sentenca):
  124.   '''A funcao recebe uma sentenca e retorna uma lista das frases dentro do texto'''
  125.     return re.split(r'[,:;]+', sentenca)
  126.  
  127.  
  128. def n_palavras_unicas(lista_palavras):
  129.   '''Essa funcao recebe uma lista de palavras e retorna o numero de palavras que aparecem uma unica vez'''
  130.     freq = dict()
  131.     unicas = 0
  132.     for palavra in lista_palavras:
  133.         p = palavra.lower()
  134.         if p in freq:
  135.             if freq[p] == 1:
  136.                 unicas -= 1
  137.             freq[p] += 1
  138.         else:
  139.             freq[p] = 1
  140.             unicas += 1
  141.  
  142.     return unicas
  143.  
  144. def n_palavras_diferentes(lista_palavras):
  145.   '''Essa funcao recebe uma lista de palavras e retorna o numero de palavras diferentes utilizadas'''
  146.     freq = dict()
  147.     for palavra in lista_palavras:
  148.         p = palavra.lower()
  149.         if p in freq:
  150.             freq[p] += 1
  151.         else:
  152.             freq[p] = 1
  153.  
  154.     return len(freq)
  155.  
  156. def compara_assinatura(as_a, as_b):
  157.     '''IMPLEMENTAR. Essa funcao recebe duas assinaturas de texto e
  158.    deve retornar o grau de similaridade nas assinaturas.'''
  159.     pass
  160.  
  161. def calcula_assinatura(texto):
  162.     '''IMPLEMENTAR. Essa funcao recebe um texto e
  163.    deve retornar a assinatura do texto.'''
  164.     pass
  165.  
  166. def avalia_textos(textos, ass_cp):
  167.     lista_assinatura = []
  168.     for texto in textos:
  169.         TamanhoMedioDePalavra = ?
  170.         RelacaoTypeToken = ?
  171.         RelacaoHapaxLegomana = ?
  172.         TamanhoMedioDeSentenca = ?
  173.         ComplexidadeMediaDeSentenca = ?
  174.         TamanhoMedioDeFrase = ?
  175.         lista_assinatura.append([TamanhoMedioDePalavra, RelacaoTypeToken, RelacaoHapaxLegomana, TamanhoMedioDeSentenca, ComplexidadeMediaDeSentenca, TamanhoMedioDeFrase])
  176.     for assinatura in lista_assinatura:
  177.  
  178.  
  179.  
  180.     '''IMPLEMENTAR. Essa funcao recebe uma lista de textos e
  181.    deve retornar o numero (0 a n-1) do texto com maior
  182.    probabilidade de ter sido infectado por COH-PIAH.'''
  183.     pass
  184. ass_cp = le_assinatura()
  185.  
  186. textos = le_texto()
  187.  
  188. n = avalia_textos(textos, ass_cp)
  189.  
  190. print("O autor do texto", n + 1, "esta infectado com COH-PIAH")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement