Menu iconMenu icon
Procesamiento de Lenguaje Natural con Python Edición Actualizada

Capítulo 12: Proyecto: Agregador de Noticias

12.3 Implementación de Resumen de Texto y Modelado de Temas

Implementaremos técnicas avanzadas de resumen de texto y modelado de temas para procesar eficazmente los artículos de noticias recopilados. El resumen de texto nos permitirá generar resúmenes concisos y coherentes de los artículos de noticias, facilitando que los usuarios comprendan rápidamente los puntos principales.

Por otro lado, el modelado de temas categorizará los artículos en diferentes temas, ayudando a organizar la información de manera más sistemática. Al emplear estas técnicas, buscamos mejorar la capacidad del chatbot para proporcionar a los usuarios noticias relevantes, bien organizadas y resumidas, asegurando que tengan acceso a la información más pertinente sin tener que pasar por artículos extensos.

12.3.1 Resumen de Texto

El resumen de texto implica la creación de una versión corta y coherente de un documento de texto más largo. Hay dos enfoques principales para el resumen de texto: resumen extractivo y resumen abstractivo.

1. Resumen Extractivo

El resumen extractivo selecciona frases o oraciones importantes directamente del texto original para crear un resumen. Este enfoque es más simple y a menudo produce resúmenes coherentes.

Ejemplo: Resumen Extractivo usando NLTK

Usaremos la biblioteca NLTK para implementar un método de resumen extractivo basado en la puntuación de oraciones.

summarizer.py

import nltk
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
import string

# Download NLTK resources
nltk.download('punkt')
nltk.download('stopwords')

def summarize_text(text, num_sentences=3):
    # Tokenize the text into sentences
    sentences = sent_tokenize(text)

    # Tokenize the text into words
    words = word_tokenize(text.lower())
    words = [word for word in words if word not in string.punctuation and word not in stopwords.words('english')]

    # Calculate word frequencies
    freq_dist = FreqDist(words)

    # Score sentences based on word frequencies
    sentence_scores = {}
    for sentence in sentences:
        for word in word_tokenize(sentence.lower()):
            if word in freq_dist:
                if sentence not in sentence_scores:
                    sentence_scores[sentence] = freq_dist[word]
                else:
                    sentence_scores[sentence] += freq_dist[word]

    # Select the top N sentences with the highest scores
    summarized_sentences = sorted(sentence_scores, key=sentence_scores.get, reverse=True)[:num_sentences]

    # Combine the selected sentences into a summary
    summary = ' '.join(summarized_sentences)
    return summary

# Test the summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

summary = summarize_text(text)
print(f"Summary: {summary}")

En este script, implementamos un método de resumen extractivo tokenizando el texto en oraciones y palabras, calculando frecuencias de palabras y puntuando las oraciones en función de estas frecuencias. Se seleccionan las oraciones principales con las puntuaciones más altas para formar el resumen.

2. Resumen Abstractivo

El resumen abstractivo genera un resumen interpretando las ideas principales del texto y expresándolas de una nueva manera. Este enfoque es más complejo y requiere técnicas avanzadas de generación de lenguaje natural.

Ejemplo: Resumen Abstractivo usando Hugging Face Transformers

Usaremos la biblioteca Hugging Face Transformers para implementar un modelo de resumen abstractivo basado en un modelo transformador preentrenado.

summarizer.py (continuación):

from transformers import pipeline

# Initialize the summarization pipeline
summarizer = pipeline("summarization")

def abstractive_summarize_text(text, max_length=130, min_length=30):
    summary = summarizer(text, max_length=max_length, min_length=min_length, do_sample=False)
    return summary[0]['summary_text']

# Test the abstractive summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

abstract_summary = abstractive_summarize_text(text)
print(f"Abstractive Summary: {abstract_summary}")

En este script, inicializamos una canalización de resumen usando un modelo transformador preentrenado de Hugging Face e implementamos una función de resumen abstractivo que genera un resumen basado en las ideas principales del texto.

12.3.2 Modelado de Temas

El modelado de temas es una técnica utilizada para identificar los temas principales presentes en una colección de documentos. Uno de los algoritmos más populares para el modelado de temas es la Asignación Latente de Dirichlet (LDA).

Ejemplo: Modelado de Temas usando Gensim

Usaremos la biblioteca Gensim para implementar LDA para el modelado de temas.

nlp_engine.py (continuación):

import gensim
from gensim import corpora

# Load preprocessed articles
with open('data/preprocessed_articles.json', 'r') as file:
    preprocessed_articles = json.load(file)

# Extract content from articles
contents = [article["content"] for article in preprocessed_articles]

# Tokenize the content
tokenized_contents = [nltk.word_tokenize(content) for content in contents]

# Create a dictionary representation of the documents
dictionary = corpora.Dictionary(tokenized_contents)

# Filter out rare and common tokens
dictionary.filter_extremes(no_below=5, no_above=0.5)

# Create a bag-of-words representation of the documents
corpus = [dictionary.doc2bow(text) for text in tokenized_contents]

# Train the LDA model
lda_model = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=15)

# Print the topics
topics = lda_model.print_topics(num_words=4)
for topic in topics:
    print(topic)

# Save the LDA model and dictionary
lda_model.save('models/lda_model')
dictionary.save('models/dictionary.gensim')

En este script, utilizamos la biblioteca Gensim para implementar LDA para el modelado de temas. Preprocesamos los artículos, creamos un diccionario y una representación de bolsa de palabras de los documentos, y entrenamos el modelo LDA para identificar los temas principales. Los temas se imprimen, y el modelo LDA y el diccionario se guardan para su uso futuro.

En esta sección, implementamos técnicas de resumen de texto y modelado de temas para procesar los artículos de noticias recopilados. Discutimos dos enfoques para el resumen de texto: el resumen extractivo utilizando puntuación de oraciones con NLTK y el resumen abstractivo utilizando un modelo transformador preentrenado de Hugging Face. También implementamos el modelado de temas utilizando el algoritmo de Asignación Latente de Dirichlet (LDA) con la biblioteca Gensim.

Estas técnicas mejoran la capacidad del chatbot para proporcionar a los usuarios noticias relevantes y resumidas, categorizadas en diferentes temas.

12.3 Implementación de Resumen de Texto y Modelado de Temas

Implementaremos técnicas avanzadas de resumen de texto y modelado de temas para procesar eficazmente los artículos de noticias recopilados. El resumen de texto nos permitirá generar resúmenes concisos y coherentes de los artículos de noticias, facilitando que los usuarios comprendan rápidamente los puntos principales.

Por otro lado, el modelado de temas categorizará los artículos en diferentes temas, ayudando a organizar la información de manera más sistemática. Al emplear estas técnicas, buscamos mejorar la capacidad del chatbot para proporcionar a los usuarios noticias relevantes, bien organizadas y resumidas, asegurando que tengan acceso a la información más pertinente sin tener que pasar por artículos extensos.

12.3.1 Resumen de Texto

El resumen de texto implica la creación de una versión corta y coherente de un documento de texto más largo. Hay dos enfoques principales para el resumen de texto: resumen extractivo y resumen abstractivo.

1. Resumen Extractivo

El resumen extractivo selecciona frases o oraciones importantes directamente del texto original para crear un resumen. Este enfoque es más simple y a menudo produce resúmenes coherentes.

Ejemplo: Resumen Extractivo usando NLTK

Usaremos la biblioteca NLTK para implementar un método de resumen extractivo basado en la puntuación de oraciones.

summarizer.py

import nltk
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
import string

# Download NLTK resources
nltk.download('punkt')
nltk.download('stopwords')

def summarize_text(text, num_sentences=3):
    # Tokenize the text into sentences
    sentences = sent_tokenize(text)

    # Tokenize the text into words
    words = word_tokenize(text.lower())
    words = [word for word in words if word not in string.punctuation and word not in stopwords.words('english')]

    # Calculate word frequencies
    freq_dist = FreqDist(words)

    # Score sentences based on word frequencies
    sentence_scores = {}
    for sentence in sentences:
        for word in word_tokenize(sentence.lower()):
            if word in freq_dist:
                if sentence not in sentence_scores:
                    sentence_scores[sentence] = freq_dist[word]
                else:
                    sentence_scores[sentence] += freq_dist[word]

    # Select the top N sentences with the highest scores
    summarized_sentences = sorted(sentence_scores, key=sentence_scores.get, reverse=True)[:num_sentences]

    # Combine the selected sentences into a summary
    summary = ' '.join(summarized_sentences)
    return summary

# Test the summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

summary = summarize_text(text)
print(f"Summary: {summary}")

En este script, implementamos un método de resumen extractivo tokenizando el texto en oraciones y palabras, calculando frecuencias de palabras y puntuando las oraciones en función de estas frecuencias. Se seleccionan las oraciones principales con las puntuaciones más altas para formar el resumen.

2. Resumen Abstractivo

El resumen abstractivo genera un resumen interpretando las ideas principales del texto y expresándolas de una nueva manera. Este enfoque es más complejo y requiere técnicas avanzadas de generación de lenguaje natural.

Ejemplo: Resumen Abstractivo usando Hugging Face Transformers

Usaremos la biblioteca Hugging Face Transformers para implementar un modelo de resumen abstractivo basado en un modelo transformador preentrenado.

summarizer.py (continuación):

from transformers import pipeline

# Initialize the summarization pipeline
summarizer = pipeline("summarization")

def abstractive_summarize_text(text, max_length=130, min_length=30):
    summary = summarizer(text, max_length=max_length, min_length=min_length, do_sample=False)
    return summary[0]['summary_text']

# Test the abstractive summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

abstract_summary = abstractive_summarize_text(text)
print(f"Abstractive Summary: {abstract_summary}")

En este script, inicializamos una canalización de resumen usando un modelo transformador preentrenado de Hugging Face e implementamos una función de resumen abstractivo que genera un resumen basado en las ideas principales del texto.

12.3.2 Modelado de Temas

El modelado de temas es una técnica utilizada para identificar los temas principales presentes en una colección de documentos. Uno de los algoritmos más populares para el modelado de temas es la Asignación Latente de Dirichlet (LDA).

Ejemplo: Modelado de Temas usando Gensim

Usaremos la biblioteca Gensim para implementar LDA para el modelado de temas.

nlp_engine.py (continuación):

import gensim
from gensim import corpora

# Load preprocessed articles
with open('data/preprocessed_articles.json', 'r') as file:
    preprocessed_articles = json.load(file)

# Extract content from articles
contents = [article["content"] for article in preprocessed_articles]

# Tokenize the content
tokenized_contents = [nltk.word_tokenize(content) for content in contents]

# Create a dictionary representation of the documents
dictionary = corpora.Dictionary(tokenized_contents)

# Filter out rare and common tokens
dictionary.filter_extremes(no_below=5, no_above=0.5)

# Create a bag-of-words representation of the documents
corpus = [dictionary.doc2bow(text) for text in tokenized_contents]

# Train the LDA model
lda_model = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=15)

# Print the topics
topics = lda_model.print_topics(num_words=4)
for topic in topics:
    print(topic)

# Save the LDA model and dictionary
lda_model.save('models/lda_model')
dictionary.save('models/dictionary.gensim')

En este script, utilizamos la biblioteca Gensim para implementar LDA para el modelado de temas. Preprocesamos los artículos, creamos un diccionario y una representación de bolsa de palabras de los documentos, y entrenamos el modelo LDA para identificar los temas principales. Los temas se imprimen, y el modelo LDA y el diccionario se guardan para su uso futuro.

En esta sección, implementamos técnicas de resumen de texto y modelado de temas para procesar los artículos de noticias recopilados. Discutimos dos enfoques para el resumen de texto: el resumen extractivo utilizando puntuación de oraciones con NLTK y el resumen abstractivo utilizando un modelo transformador preentrenado de Hugging Face. También implementamos el modelado de temas utilizando el algoritmo de Asignación Latente de Dirichlet (LDA) con la biblioteca Gensim.

Estas técnicas mejoran la capacidad del chatbot para proporcionar a los usuarios noticias relevantes y resumidas, categorizadas en diferentes temas.

12.3 Implementación de Resumen de Texto y Modelado de Temas

Implementaremos técnicas avanzadas de resumen de texto y modelado de temas para procesar eficazmente los artículos de noticias recopilados. El resumen de texto nos permitirá generar resúmenes concisos y coherentes de los artículos de noticias, facilitando que los usuarios comprendan rápidamente los puntos principales.

Por otro lado, el modelado de temas categorizará los artículos en diferentes temas, ayudando a organizar la información de manera más sistemática. Al emplear estas técnicas, buscamos mejorar la capacidad del chatbot para proporcionar a los usuarios noticias relevantes, bien organizadas y resumidas, asegurando que tengan acceso a la información más pertinente sin tener que pasar por artículos extensos.

12.3.1 Resumen de Texto

El resumen de texto implica la creación de una versión corta y coherente de un documento de texto más largo. Hay dos enfoques principales para el resumen de texto: resumen extractivo y resumen abstractivo.

1. Resumen Extractivo

El resumen extractivo selecciona frases o oraciones importantes directamente del texto original para crear un resumen. Este enfoque es más simple y a menudo produce resúmenes coherentes.

Ejemplo: Resumen Extractivo usando NLTK

Usaremos la biblioteca NLTK para implementar un método de resumen extractivo basado en la puntuación de oraciones.

summarizer.py

import nltk
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
import string

# Download NLTK resources
nltk.download('punkt')
nltk.download('stopwords')

def summarize_text(text, num_sentences=3):
    # Tokenize the text into sentences
    sentences = sent_tokenize(text)

    # Tokenize the text into words
    words = word_tokenize(text.lower())
    words = [word for word in words if word not in string.punctuation and word not in stopwords.words('english')]

    # Calculate word frequencies
    freq_dist = FreqDist(words)

    # Score sentences based on word frequencies
    sentence_scores = {}
    for sentence in sentences:
        for word in word_tokenize(sentence.lower()):
            if word in freq_dist:
                if sentence not in sentence_scores:
                    sentence_scores[sentence] = freq_dist[word]
                else:
                    sentence_scores[sentence] += freq_dist[word]

    # Select the top N sentences with the highest scores
    summarized_sentences = sorted(sentence_scores, key=sentence_scores.get, reverse=True)[:num_sentences]

    # Combine the selected sentences into a summary
    summary = ' '.join(summarized_sentences)
    return summary

# Test the summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

summary = summarize_text(text)
print(f"Summary: {summary}")

En este script, implementamos un método de resumen extractivo tokenizando el texto en oraciones y palabras, calculando frecuencias de palabras y puntuando las oraciones en función de estas frecuencias. Se seleccionan las oraciones principales con las puntuaciones más altas para formar el resumen.

2. Resumen Abstractivo

El resumen abstractivo genera un resumen interpretando las ideas principales del texto y expresándolas de una nueva manera. Este enfoque es más complejo y requiere técnicas avanzadas de generación de lenguaje natural.

Ejemplo: Resumen Abstractivo usando Hugging Face Transformers

Usaremos la biblioteca Hugging Face Transformers para implementar un modelo de resumen abstractivo basado en un modelo transformador preentrenado.

summarizer.py (continuación):

from transformers import pipeline

# Initialize the summarization pipeline
summarizer = pipeline("summarization")

def abstractive_summarize_text(text, max_length=130, min_length=30):
    summary = summarizer(text, max_length=max_length, min_length=min_length, do_sample=False)
    return summary[0]['summary_text']

# Test the abstractive summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

abstract_summary = abstractive_summarize_text(text)
print(f"Abstractive Summary: {abstract_summary}")

En este script, inicializamos una canalización de resumen usando un modelo transformador preentrenado de Hugging Face e implementamos una función de resumen abstractivo que genera un resumen basado en las ideas principales del texto.

12.3.2 Modelado de Temas

El modelado de temas es una técnica utilizada para identificar los temas principales presentes en una colección de documentos. Uno de los algoritmos más populares para el modelado de temas es la Asignación Latente de Dirichlet (LDA).

Ejemplo: Modelado de Temas usando Gensim

Usaremos la biblioteca Gensim para implementar LDA para el modelado de temas.

nlp_engine.py (continuación):

import gensim
from gensim import corpora

# Load preprocessed articles
with open('data/preprocessed_articles.json', 'r') as file:
    preprocessed_articles = json.load(file)

# Extract content from articles
contents = [article["content"] for article in preprocessed_articles]

# Tokenize the content
tokenized_contents = [nltk.word_tokenize(content) for content in contents]

# Create a dictionary representation of the documents
dictionary = corpora.Dictionary(tokenized_contents)

# Filter out rare and common tokens
dictionary.filter_extremes(no_below=5, no_above=0.5)

# Create a bag-of-words representation of the documents
corpus = [dictionary.doc2bow(text) for text in tokenized_contents]

# Train the LDA model
lda_model = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=15)

# Print the topics
topics = lda_model.print_topics(num_words=4)
for topic in topics:
    print(topic)

# Save the LDA model and dictionary
lda_model.save('models/lda_model')
dictionary.save('models/dictionary.gensim')

En este script, utilizamos la biblioteca Gensim para implementar LDA para el modelado de temas. Preprocesamos los artículos, creamos un diccionario y una representación de bolsa de palabras de los documentos, y entrenamos el modelo LDA para identificar los temas principales. Los temas se imprimen, y el modelo LDA y el diccionario se guardan para su uso futuro.

En esta sección, implementamos técnicas de resumen de texto y modelado de temas para procesar los artículos de noticias recopilados. Discutimos dos enfoques para el resumen de texto: el resumen extractivo utilizando puntuación de oraciones con NLTK y el resumen abstractivo utilizando un modelo transformador preentrenado de Hugging Face. También implementamos el modelado de temas utilizando el algoritmo de Asignación Latente de Dirichlet (LDA) con la biblioteca Gensim.

Estas técnicas mejoran la capacidad del chatbot para proporcionar a los usuarios noticias relevantes y resumidas, categorizadas en diferentes temas.

12.3 Implementación de Resumen de Texto y Modelado de Temas

Implementaremos técnicas avanzadas de resumen de texto y modelado de temas para procesar eficazmente los artículos de noticias recopilados. El resumen de texto nos permitirá generar resúmenes concisos y coherentes de los artículos de noticias, facilitando que los usuarios comprendan rápidamente los puntos principales.

Por otro lado, el modelado de temas categorizará los artículos en diferentes temas, ayudando a organizar la información de manera más sistemática. Al emplear estas técnicas, buscamos mejorar la capacidad del chatbot para proporcionar a los usuarios noticias relevantes, bien organizadas y resumidas, asegurando que tengan acceso a la información más pertinente sin tener que pasar por artículos extensos.

12.3.1 Resumen de Texto

El resumen de texto implica la creación de una versión corta y coherente de un documento de texto más largo. Hay dos enfoques principales para el resumen de texto: resumen extractivo y resumen abstractivo.

1. Resumen Extractivo

El resumen extractivo selecciona frases o oraciones importantes directamente del texto original para crear un resumen. Este enfoque es más simple y a menudo produce resúmenes coherentes.

Ejemplo: Resumen Extractivo usando NLTK

Usaremos la biblioteca NLTK para implementar un método de resumen extractivo basado en la puntuación de oraciones.

summarizer.py

import nltk
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
import string

# Download NLTK resources
nltk.download('punkt')
nltk.download('stopwords')

def summarize_text(text, num_sentences=3):
    # Tokenize the text into sentences
    sentences = sent_tokenize(text)

    # Tokenize the text into words
    words = word_tokenize(text.lower())
    words = [word for word in words if word not in string.punctuation and word not in stopwords.words('english')]

    # Calculate word frequencies
    freq_dist = FreqDist(words)

    # Score sentences based on word frequencies
    sentence_scores = {}
    for sentence in sentences:
        for word in word_tokenize(sentence.lower()):
            if word in freq_dist:
                if sentence not in sentence_scores:
                    sentence_scores[sentence] = freq_dist[word]
                else:
                    sentence_scores[sentence] += freq_dist[word]

    # Select the top N sentences with the highest scores
    summarized_sentences = sorted(sentence_scores, key=sentence_scores.get, reverse=True)[:num_sentences]

    # Combine the selected sentences into a summary
    summary = ' '.join(summarized_sentences)
    return summary

# Test the summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

summary = summarize_text(text)
print(f"Summary: {summary}")

En este script, implementamos un método de resumen extractivo tokenizando el texto en oraciones y palabras, calculando frecuencias de palabras y puntuando las oraciones en función de estas frecuencias. Se seleccionan las oraciones principales con las puntuaciones más altas para formar el resumen.

2. Resumen Abstractivo

El resumen abstractivo genera un resumen interpretando las ideas principales del texto y expresándolas de una nueva manera. Este enfoque es más complejo y requiere técnicas avanzadas de generación de lenguaje natural.

Ejemplo: Resumen Abstractivo usando Hugging Face Transformers

Usaremos la biblioteca Hugging Face Transformers para implementar un modelo de resumen abstractivo basado en un modelo transformador preentrenado.

summarizer.py (continuación):

from transformers import pipeline

# Initialize the summarization pipeline
summarizer = pipeline("summarization")

def abstractive_summarize_text(text, max_length=130, min_length=30):
    summary = summarizer(text, max_length=max_length, min_length=min_length, do_sample=False)
    return summary[0]['summary_text']

# Test the abstractive summarizer
text = """
Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language. In particular, it is about how to program computers to process and analyze large amounts of natural language data. The result is a computer capable of "understanding" the contents of documents, including the contextual nuances of the language within them. The technology can then accurately extract information and insights contained in the documents as well as categorize and organize the documents themselves.
"""

abstract_summary = abstractive_summarize_text(text)
print(f"Abstractive Summary: {abstract_summary}")

En este script, inicializamos una canalización de resumen usando un modelo transformador preentrenado de Hugging Face e implementamos una función de resumen abstractivo que genera un resumen basado en las ideas principales del texto.

12.3.2 Modelado de Temas

El modelado de temas es una técnica utilizada para identificar los temas principales presentes en una colección de documentos. Uno de los algoritmos más populares para el modelado de temas es la Asignación Latente de Dirichlet (LDA).

Ejemplo: Modelado de Temas usando Gensim

Usaremos la biblioteca Gensim para implementar LDA para el modelado de temas.

nlp_engine.py (continuación):

import gensim
from gensim import corpora

# Load preprocessed articles
with open('data/preprocessed_articles.json', 'r') as file:
    preprocessed_articles = json.load(file)

# Extract content from articles
contents = [article["content"] for article in preprocessed_articles]

# Tokenize the content
tokenized_contents = [nltk.word_tokenize(content) for content in contents]

# Create a dictionary representation of the documents
dictionary = corpora.Dictionary(tokenized_contents)

# Filter out rare and common tokens
dictionary.filter_extremes(no_below=5, no_above=0.5)

# Create a bag-of-words representation of the documents
corpus = [dictionary.doc2bow(text) for text in tokenized_contents]

# Train the LDA model
lda_model = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=15)

# Print the topics
topics = lda_model.print_topics(num_words=4)
for topic in topics:
    print(topic)

# Save the LDA model and dictionary
lda_model.save('models/lda_model')
dictionary.save('models/dictionary.gensim')

En este script, utilizamos la biblioteca Gensim para implementar LDA para el modelado de temas. Preprocesamos los artículos, creamos un diccionario y una representación de bolsa de palabras de los documentos, y entrenamos el modelo LDA para identificar los temas principales. Los temas se imprimen, y el modelo LDA y el diccionario se guardan para su uso futuro.

En esta sección, implementamos técnicas de resumen de texto y modelado de temas para procesar los artículos de noticias recopilados. Discutimos dos enfoques para el resumen de texto: el resumen extractivo utilizando puntuación de oraciones con NLTK y el resumen abstractivo utilizando un modelo transformador preentrenado de Hugging Face. También implementamos el modelado de temas utilizando el algoritmo de Asignación Latente de Dirichlet (LDA) con la biblioteca Gensim.

Estas técnicas mejoran la capacidad del chatbot para proporcionar a los usuarios noticias relevantes y resumidas, categorizadas en diferentes temas.