guilhermelmagalhaes / EstruturaDeDadosA3

Integrantes do grupo 6: Gabriely Camile - 821238953 Guilherme Malavolta - 82328049 Guilherme Magalhães - 319214926 Nathan Siman Teixeira - 320126372
0 stars 0 forks source link

1- Identificação de Tópicos Principais (5 de novembro - 20 pontos): #6

Open guilhermelmagalhaes opened 1 year ago

guilhermelmagalhaes commented 1 year ago

Construir um grafo de tópicos a partir dos resumos. Cada nó no grafo deve representar um tópico identificado nos resumos. Usar técnicas de modelagem de tópicos para identificar os tópicos. As arestas no grafo devem indicar a similaridade entre os tópicos com base na frequência de palavras-chave compartilhadas.

guilhermelmagalhaes commented 1 year ago

import gensim from gensim import corpora import networkx as nx

import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize

import os

def pegarParagrafo(diretorio, arquivo): local = diretorio + "\" + arquivo try: with open(local, 'r') as arqV: conteudo = arqV.read()

    paragrafos = conteudo.split('\n')

    titulo = paragrafos[0]
    texto = paragrafos[1]
    topico = paragrafos[2]

except FileNotFoundError:
    return "O arquivo não foi encontrado."
return titulo, texto, topico

def pegarTopicos(topicos): x = 0 for topico in topicos: x += 1 txt = topico.split(';') print(f"{x}: ", txt)

return topico

resumos = [] texto = [] topico = []

diretorio = 'C:\Users\natha\OneDrive\Área de Trabalho\BaseDadosResumos'

arquivos_txt = [f for f in os.listdir(diretorio) if f.endswith('.txt')]

for arquivo in arquivos_txt: caminho_arquivo = os.path.join(diretorio, arquivo)

with open(caminho_arquivo, 'r') as arquivo_txt:
    conteudo = arquivo_txt.read()

resumos.append(conteudo)
paragrafo = pegarParagrafo(diretorio, arquivo)
texto.append(paragrafo[1])
topico.append(paragrafo[2])

print(topico)

pt = pegarTopicos(topico) ''' nltk.download('stopwords') nltk.download('punkt')

Suponha que 'resumos' seja uma lista de strings representando seus resumos

Pré-processamento: tokenização, remoção de stopwords e criação de um corpus

corpus = [] stop_words = set(stopwords.words('portuguese'))

for resumo in resumos: words = [word.lower() for word in word_tokenize(resumo) if word.isalpha() and word.lower() not in stop_words] corpus.append(words)

dictionary = corpora.Dictionary(corpus) corpus_bow = [dictionary.doc2bow(text) for text in corpus]

Treinamento do modelo LDA

lda_model = gensim.models.LdaModel(corpus_bow, num_topics=10, id2word=dictionary, passes=15)

topics = [] for topic_id, words in lda_model.print_topics(): topic_words = words.split("+") topics.append([word.split("*")[1].strip() for word in topic_words])

Criar um grafo vazio

G = nx.Graph()

Adicionar nós ao grafo representando os tópicos

for i, topic_words in enumerate(topics): G.add_node(i, label=" ".join(topic_words))

Calcular a similaridade entre tópicos com base nas palavras-chave compartilhadas

for i in range(len(topics)): for j in range(i + 1, len(topics)): common_words = set(topics[i]).intersection(topics[j]) similarity = len(common_words) / min(len(topics[i]), len(topics[j])) if similarity > 0.2: # Ajuste o valor de similaridade conforme necessário G.add_edge(i, j, weight=similarity)

Você pode ajustar o valor de similaridade para controlar a conexão entre os tópicos.

import matplotlib.pyplot as plt

pos = nx.spring_layout(G, k=0.2) labels = nx.get_node_attributes(G, 'label') nx.draw(G, pos, labels=labels, with_labels=True, node_size=5000, font_size=10) plt.show() '''

guilhermelmagalhaes commented 11 months ago

main (1).txt archive (1).txt

GMalavolta commented 11 months ago

Gabriely Camile - 821238953 Guilherme Malavolta - 82328049 Guilherme Magalhães - 319214926 Nathan Siman Teixeira - 320126372