import re
def le_assinatura():
'''A funcao le os valores dos tracos linguisticos do modelo e devolve uma assinatura a ser comparada com os textos fornecidos'''
print("Bem-vindo ao detector automático de COH-PIAH.")
wal = float(input("Entre o tamanho medio de palavra:"))
ttr = float(input("Entre a relação Type-Token:"))
hlr = float(input("Entre a Razão Hapax Legomana:"))
sal = float(input("Entre o tamanho médio de sentença:"))
sac = float(input("Entre a complexidade média da sentença:"))
pal = float(input("Entre o tamanho medio de frase:"))
return [wal, ttr, hlr, sal, sac, pal]
def le_textos():
i = 1
textos = []
texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
while texto:
textos.append(texto)
i += 1
texto = input("Digite o texto " + str(i) +" (aperte enter para sair):")
return textos
def separa_sentencas(texto):
'''A funcao recebe um texto e devolve uma lista das sentencas dentro do texto'''
sentencas = re.split(r'[.!?]+', texto)
if sentencas[-1] == '':
del sentencas[-1]
return sentencas
def separa_frases(sentenca):
'''A funcao recebe uma sentenca e devolve uma lista das frases dentro da sentenca'''
return re.split(r'[,:;]+', sentenca)
def separa_palavras(frase):
'''A funcao recebe uma frase e devolve uma lista das palavras dentro da frase'''
return frase.split()
def n_palavras_unicas(lista_palavras):
'''Essa funcao recebe uma lista de palavras e devolve o numero de palavras que aparecem uma unica vez'''
freq = dict()
unicas = 0
for palavra in lista_palavras:
p = palavra.lower()
if p in freq:
if freq[p] == 1:
unicas -= 1
freq[p] += 1
else:
freq[p] = 1
unicas += 1
return unicas
def n_palavras_diferentes(lista_palavras):
'''Essa funcao recebe uma lista de palavras e devolve o numero de palavras diferentes utilizadas'''
freq = dict()
for palavra in lista_palavras:
p = palavra.lower()
if p in freq:
freq[p] += 1
else:
freq[p] = 1
return len(freq)
def compara_assinatura(as_a, as_b):
'''IMPLEMENTAR. Essa funcao recebe duas assinaturas de texto e deve devolver o grau de similaridade nas assinaturas.'''
soma_temp = 0
for i in range(0,6):
soma_temp = soma_temp + (abs(as_a[i] - as_b[i]))
return soma_temp / 6
def calcula_assinatura(texto):
'''IMPLEMENTAR. Essa funcao recebe um texto e deve devolver a assinatura do texto.'''
sentencas = separa_sentencas(texto)
frases = []
palavras = []
meia_palavras = 0
meio_sentencas = 0
comp_sentenca = 0
rel_type_token = 0
hapax = 0
soma_car_sentenca = 0
soma_pal = 0
soma_car_frase = 0
tam_meio_frase = 0
for sentenca in sentencas:
soma_car_sentenca = soma_car_sentenca + len(sentenca)
l_frases = separa_frases(sentenca)
for f in l_frases:
frases.append(f)
for frase in frases:
soma_car_frase = soma_car_frase + len(frase)
l_pal = separa_palavras(frase)
for palavra in l_pal:
palavras.append(palavra)
for palavra in palavras:
soma_pal = soma_pal + len(palavra)
meia_palavras = soma_pal/len(palavras)
rel_type_token = n_palavras_diferentes(palavras)/len(palavras)
hapax = n_palavras_unicas(palavras)/len(palavras)
meio_sentencas = soma_car_sentenca / len(sentencas)
comp_sentenca = len(frases) / len(sentencas)
tam_meio_frase = soma_car_frase / len(frases)
return [meia_palavras, rel_type_token, hapax, meio_sentencas, comp_sentenca, tam_meio_frase]
def avalia_textos(textos, ass_cp):
'''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.'''
inf = []
for texto in textos:
ass_texto = calcula_assinatura(texto)
inf.append(compara_assinatura(ass_texto, ass_cp))
menor = inf[0]
c = 1
for i in range(1, len(inf)):
if (menor > inf[i]):
c = i
return c
def main():
assinatura = le_assinatura()
textos = le_textos()
c = avalia_textos(textos, assinatura)
print("O autor do texto {} está infectado com COH-PIAH".format(c))
main()
Postei meu codigo que implementei pro curso da USP - Coursera
ta funcionando e já consegui fazer valer nota 10..
valeu, espero ter ajudado..