<jupyter_start><jupyter_text>Algoritmo de Luhn  Preprocessamento<jupyter_code># !pip install spacy
# !python -m spacy download pt_core_news_sm
import spacy
import re
import nltk
import string
import heapq
pln = spacy.load('pt_core_news_sm')
nltk.download('stopwords')
def preprocessamento(texto):
  stopwords = nltk.corpus.stopwords.words('portuguese')
  texto = texto.lower()
  texto = re.sub(r" +", ' ', texto)
  documento = pln(texto)
  tokens = []
  for token in documento:
    tokens.append(token.lemma_)
  tokens = [palavra for palavra in tokens if palavra not in stopwords and palavra not in string.punctuation]
  texto_formatado = ' '.join([str(elemento) for elemento in tokens if not elemento.isdigit()])
  return texto_formatado
texto_original = """A inteligência artificial é a inteligência similar à humana máquinas. 
                    Definem como o estudo de agente artificial com inteligência. 
                    Ciência e engenharia de produzir máquinas com inteligência. 
                    Resolver problemas e possuir inteligência. 
                    Relacionada ao comportamento inteligente. 
                    Construção de máquinas para raciocinar. 
                    Aprender com os erros e acertos. 
                    Inteligência artificial é raciocinar nas situações do cotidiano."""
preprocessamento_lematizacao(texto_original)
def calcula_nota_sentenca(sentencas, palavras_importantes, distancia):
  notas = []
  indice_sentenca = 0
  for sentenca in [nltk.word_tokenize(sentenca.lower()) for sentenca in sentencas]:
    indice_palavra = []
    for palavra in palavras_importantes:
      try:
        indice_palavra.append(sentenca.index(palavra))
      except ValueError:
        pass
    indice_palavra.sort()
    if len(indice_palavra) == 0:
      continue
    lista_grupos = []
    grupo = [indice_palavra[0]]
    i = 1
    while i < len(indice_palavra):
      if indice_palavra[i] - indice_palavra[i - 1] < distancia:
        grupo.append(indice_palavra[i])
      else:
        lista_grupos.append(grupo[:])
        grupo = [indice_palavra[i]]
      i += 1
    lista_grupos.append(grupo)
    nota_maxima_grupo = 0
    for g in lista_grupos:
      palavras_importantes_no_grupo = len(g)
      total_palavras_no_grupo = g[-1] - g[0] + 1
      nota = 1.0 * palavras_importantes_no_grupo**2 / total_palavras_no_grupo
      if nota > nota_maxima_grupo:
        nota_maxima_grupo = nota
    notas.append((nota_maxima_grupo, indice_sentenca))
    indice_sentenca += 1
  return notas
def sumarizar(texto, top_n_palavras, distancia, quantidade_sentencas):
  sentencas_originais = [sentenca for sentenca in nltk.sent_tokenize(texto)]
  sentencas_formatadas = [preprocessamento_lematizacao(sentenca_original) for sentenca_original in sentencas_originais]
  palavras = [palavra.lower() for sentenca in sentencas_formatadas for palavra in nltk.tokenize.word_tokenize(sentenca)]
  frequencia = nltk.FreqDist(palavras)
  top_n_palavras = [palavra[0] for palavra in frequencia.most_common(top_n_palavras)]
  notas_sentencas = calcula_nota_sentenca(sentencas_formatadas, top_n_palavras, distancia)
  melhores_sentencas = heapq.nlargest(quantidade_sentencas, notas_sentencas)
  melhores_sentencas = [sentencas_originais[i] for (nota, i) in melhores_sentencas]
  
  return sentencas_originais, melhores_sentencas, notas_sentencas<jupyter_output><empty_output><jupyter_text>Teste da Função de Sumarização<jupyter_code>sentencas_originais, melhores_sentencas, notas_sentencas = sumarizar(texto_original, 5, 3, 3)
melhores_sentencas<jupyter_output><empty_output><jupyter_text>Sumarização de Artigos de Blog usando o Algoritmo de Luhn<jupyter_code>from goose3 import Goose
g = Goose()
url = 'https://www.inovacaotecnologica.com.br/noticias/noticia.php?artigo=inteligencia-artificial-descobre-leis-fisica-ocultas-dados&id=010150211230'
artigo = g.extract(url)
sentencas_originais, melhores_sentencas, notas_sentencas = sumarizar(artigo.cleaned_text, 5, 3, 5)
melhores_sentencas<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08165797964755522, 'fraction_numerical': 0.008438818565400843, 'mean_word_length': 4.254237288135593, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 14, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '26941', 'license': 'MIT', 'n_tokens_mistral': 1523, 'n_tokens_neox': 1493, 'n_words': 294, 'path': 'notebooks_with_custom_algorithms/1 - Algoritmo de Luhn.ipynb', 'repo_name': 'vitordutra/automatic-text-summarization', 'size': '4029'}