Ir para conteúdo
Fórum Script Brasil

Luiz Felipe Leite

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Luiz Felipe Leite

Luiz Felipe Leite's Achievements

0

Reputação

  1. O meu diz que tem similaridade entre textos, o que devo fazer? meu código import re def main(): ass_main = le_assinatura() textos_main = le_textos() matriz_ass = calcula_assinatura(textos_main) ass_comparadas = compara_assinatura(ass_main, matriz_ass) copiah = avalia_textos(textos_main, ass_comparadas) + 1 return print("O autor do texto", copiah, "está infectado com COH-PIAH.") 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("Seja bem-vindo ao detector automático de COH-PIAH. Identifique a assinatura de um aluno infectado por COH-PIA: ") tam_m_pal = float(input("Entre o tamanho medio de palavra: ")) type_token = float(input("Entre a relação Type-Token: ")) h_lego = float(input("Entre a Razão Hapax Legomana: ")) tam_m_sent = float(input("Entre o tamanho médio de sentença: ")) compx_med = float(input("Entre a complexidade média da sentença: ")) tam_m_frase = float(input("Entre o tamanho medio de frase: ")) return [tam_m_pal, type_token, h_lego, tam_m_sent, compx_med, tam_m_frase] 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 calcula_assinatura(texto): """ Essa funcao recebe um texto e deve devolver a assinatura do texto. """ if type(texto) != list: aux = texto texto = [] texto.append(aux) matriz_ass_input = [] for i in texto: sentencas = [] sentencas = separa_sentencas(i) # sent.. = lista comum, ~matriz frases = [] num_tot_sentencas = 0 soma_cat_sentencas = 0 for i in range(len(sentencas)): frase_i = separa_frases(sentencas) frases.append(frase_i) # frases = matriz, lista de listas num_tot_sentencas += 1 soma_cat_sentencas = soma_cat_sentencas + len(sentencas) palavras = [] num_tot_frases = 0 soma_cat_frases = 0 for lin in range(len(frases)): for col in range(len(frases[lin])): palavra_i = separa_palavras(frases[lin][col]) palavras.append(palavra_i) # palav.. = matriz, lista de listas num_tot_frases += 1 soma_cat_frases = soma_cat_frases + len(str(frases[lin][col])) mtrx_para_lista = [] # transform.. palavras de matriz para lista for lin in range(len(palavras)): for col in range(len(palavras[lin])): mtrx_para_lista.append(palavras[lin][col]) palavras = mtrx_para_lista[:] soma_comp_palavras = 0 num_tot_palavras = 0 for lin in range(len(palavras)): for col in range(len(palavras[lin])): soma_comp_palavras = soma_comp_palavras + len(str(palavras[lin][col])) num_tot_palavras += 1 ass_txt = [] ass_txt.append(tam_m_pal(soma_comp_palavras, num_tot_palavras)) ass_txt.append(type_token(palavras, num_tot_palavras)) ass_txt.append(h_lego(palavras, num_tot_palavras)) ass_txt.append(tam_m_sent(soma_cat_sentencas, num_tot_sentencas)) ass_txt.append(compx_med(num_tot_frases, num_tot_sentencas)) ass_txt.append(tam_m_frase(soma_cat_frases, num_tot_frases)) matriz_ass_input.append(ass_txt) return matriz_ass_input # matriz, lista de listas dos valores das assina.. def tam_m_pal(soma_comp_palavras, num_tot_palavras): if num_tot_palavras != 0: tam_m_pal = soma_comp_palavras / num_tot_palavras else: tam_m_pal = 0 return tam_m_pal def type_token(lista_palavras, num_tot_palavras): num_pal_dif = n_palavras_diferentes(lista_palavras) if num_tot_palavras != 0: type_token = num_pal_dif / num_tot_palavras else: type_token = 0 return type_token def h_lego(lista_palavras, num_tot_palavras): num_pal_uni = n_palavras_unicas(lista_palavras) if num_tot_palavras != 0: h_lego = num_pal_uni / num_tot_palavras else: h_lego = 0 return h_lego def tam_m_sent(soma_num_cat, num_sent): if num_sent != 0: tam_m_sent = soma_num_cat / num_sent else: tam_m_sent = 0 return tam_m_sent def compx_med(num_tot_frases, num_tot_sentencas): if num_tot_sentencas != 0: compx_med = num_tot_frases / num_tot_sentencas else: compx_med = 0 return compx_med def tam_m_frase(soma_cat_frases, num_tot_frases): if num_tot_frases != 0: tam_m_frase = soma_cat_frases / num_tot_frases else: tam_m_frase = 0 return tam_m_frase 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(ass_main, matriz_ass_input): """ Essa função recebe as duas assinaturas de texto e tem que devolver o grau de similaridade nas assinaturas. """ lista_Sab = [] soma_mod = 0 if type(matriz_ass_input[0]) is list: for lin in range(len(matriz_ass_input)): for col in range(len(matriz_ass_input[lin])): soma_mod += abs(ass_main[col] - matriz_ass_input[lin][col]) Sab = soma_mod / 6 lista_Sab.append(Sab) return lista_Sab else: for i in range(len(matriz_ass_input)): soma_mod += abs(ass_main - matriz_ass_input) Sab = soma_mod / 6 return Sab def avalia_textos(textos_main, ass_comparadas): """ Essa funcao recebe uma lista de textos e deve devolver o numero (0 a n-1) do texto com maior probabilidade de ter sido infectado por = COH-PIAH. """ aux_ass_com = ass_comparadas[:] aux_ass_com.sort() for indice in range(len(ass_comparadas)): if aux_ass_com[0] == ass_comparadas[indice]: copiah = indice return copiah
×
×
  • Criar Novo...