Capítulo 9: Descifrando Cadenas y Patrones
Ejercicios Prácticos para el Capítulo 9
Los siguientes ejercicios ofrecen aplicaciones prácticas de los conceptos discutidos en el Capítulo 9. Brindan experiencia práctica con algoritmos de cadenas y técnicas de análisis de texto, reforzando la comprensión y demostrando la utilidad de estos métodos en escenarios del mundo real.
Ejercicio 1: Implementar el Algoritmo de Boyer-Moore para la Búsqueda de Patrones
- Objetivo: Escribir una función para realizar el algoritmo de búsqueda de cadenas de Boyer-Moore, un método eficiente para encontrar subcadenas en cadenas de texto más grandes.
- Nota: El algoritmo de Boyer-Moore es complejo, centrándose en la heurística del "carácter malo".
Solución:
def boyer_moore_search(text, pattern):
def bad_char_heuristic(pattern):
bad_char = [-1] * 256
for i in range(len(pattern)):
bad_char[ord(pattern[i])] = i
return bad_char
m = len(pattern)
n = len(text)
bad_char = bad_char_heuristic(pattern)
s = 0
while s <= n - m:
j = m - 1
while j >= 0 and pattern[j] == text[s + j]:
j -= 1
if j < 0:
return f"Pattern occurs at shift {s}"
s += (m - bad_char[ord(text[s + m])] if s + m < n else 1)
else:
s += max(1, j - bad_char[ord(text[s + j])])
return "Pattern not found"
# Example Usage
text = "ABAAABCD"
pattern = "ABC"
print(boyer_moore_search(text, pattern)) # Output: Pattern occurs at shift 4
Ejercicio 2: Crear una Expresión Regular Básica para la Extracción de Correos Electrónicos
- Objetivo: Escribir un patrón de expresión regular para extraer direcciones de correo electrónico de una cadena dada.
- Nota: La expresión regular debe coincidir con los formatos de correo electrónico más comunes.
Solución:
import re
def extract_emails(text):
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'
return re.findall(pattern, text)
# Example Usage
text = "Please contact us at info@example.com or support@domain.org."
print(extract_emails(text)) # Output: ['info@example.com', 'support@domain.org']
Ejercicio 3: Implementación de una Construcción Simple de un Sufijo de Matriz
- Objetivo: Construir una matriz de sufijos para una cadena de texto dada.
- Nota: Las matrices de sufijos son una forma eficiente de almacenar y buscar subcadenas.
Solución:
def build_suffix_array(s):
return sorted(range(len(s)), key=lambda k: s[k:])
# Example Usage
text = "banana"
print(build_suffix_array(text)) # Output: Suffix array indices for the string "banana"
Ejercicio 4: Análisis de Sentimientos Utilizando Modelos Pre-entrenados
- Objetivo: Utilizar un modelo NLP pre-entrenado para realizar análisis de sentimientos en un texto dado.
- Nota: Este ejercicio asume el acceso a un modelo de análisis de sentimientos pre-entrenado, como los disponibles en bibliotecas como NLTK o TextBlob.
Solución:
from textblob import TextBlob
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment
# Example Usage
text = "I love programming in Python!"
print(analyze_sentiment(text)) # Output: Sentiment(polarity=0.5, subjectivity=0.6)
Ejercicios Prácticos para el Capítulo 9
Los siguientes ejercicios ofrecen aplicaciones prácticas de los conceptos discutidos en el Capítulo 9. Brindan experiencia práctica con algoritmos de cadenas y técnicas de análisis de texto, reforzando la comprensión y demostrando la utilidad de estos métodos en escenarios del mundo real.
Ejercicio 1: Implementar el Algoritmo de Boyer-Moore para la Búsqueda de Patrones
- Objetivo: Escribir una función para realizar el algoritmo de búsqueda de cadenas de Boyer-Moore, un método eficiente para encontrar subcadenas en cadenas de texto más grandes.
- Nota: El algoritmo de Boyer-Moore es complejo, centrándose en la heurística del "carácter malo".
Solución:
def boyer_moore_search(text, pattern):
def bad_char_heuristic(pattern):
bad_char = [-1] * 256
for i in range(len(pattern)):
bad_char[ord(pattern[i])] = i
return bad_char
m = len(pattern)
n = len(text)
bad_char = bad_char_heuristic(pattern)
s = 0
while s <= n - m:
j = m - 1
while j >= 0 and pattern[j] == text[s + j]:
j -= 1
if j < 0:
return f"Pattern occurs at shift {s}"
s += (m - bad_char[ord(text[s + m])] if s + m < n else 1)
else:
s += max(1, j - bad_char[ord(text[s + j])])
return "Pattern not found"
# Example Usage
text = "ABAAABCD"
pattern = "ABC"
print(boyer_moore_search(text, pattern)) # Output: Pattern occurs at shift 4
Ejercicio 2: Crear una Expresión Regular Básica para la Extracción de Correos Electrónicos
- Objetivo: Escribir un patrón de expresión regular para extraer direcciones de correo electrónico de una cadena dada.
- Nota: La expresión regular debe coincidir con los formatos de correo electrónico más comunes.
Solución:
import re
def extract_emails(text):
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'
return re.findall(pattern, text)
# Example Usage
text = "Please contact us at info@example.com or support@domain.org."
print(extract_emails(text)) # Output: ['info@example.com', 'support@domain.org']
Ejercicio 3: Implementación de una Construcción Simple de un Sufijo de Matriz
- Objetivo: Construir una matriz de sufijos para una cadena de texto dada.
- Nota: Las matrices de sufijos son una forma eficiente de almacenar y buscar subcadenas.
Solución:
def build_suffix_array(s):
return sorted(range(len(s)), key=lambda k: s[k:])
# Example Usage
text = "banana"
print(build_suffix_array(text)) # Output: Suffix array indices for the string "banana"
Ejercicio 4: Análisis de Sentimientos Utilizando Modelos Pre-entrenados
- Objetivo: Utilizar un modelo NLP pre-entrenado para realizar análisis de sentimientos en un texto dado.
- Nota: Este ejercicio asume el acceso a un modelo de análisis de sentimientos pre-entrenado, como los disponibles en bibliotecas como NLTK o TextBlob.
Solución:
from textblob import TextBlob
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment
# Example Usage
text = "I love programming in Python!"
print(analyze_sentiment(text)) # Output: Sentiment(polarity=0.5, subjectivity=0.6)
Ejercicios Prácticos para el Capítulo 9
Los siguientes ejercicios ofrecen aplicaciones prácticas de los conceptos discutidos en el Capítulo 9. Brindan experiencia práctica con algoritmos de cadenas y técnicas de análisis de texto, reforzando la comprensión y demostrando la utilidad de estos métodos en escenarios del mundo real.
Ejercicio 1: Implementar el Algoritmo de Boyer-Moore para la Búsqueda de Patrones
- Objetivo: Escribir una función para realizar el algoritmo de búsqueda de cadenas de Boyer-Moore, un método eficiente para encontrar subcadenas en cadenas de texto más grandes.
- Nota: El algoritmo de Boyer-Moore es complejo, centrándose en la heurística del "carácter malo".
Solución:
def boyer_moore_search(text, pattern):
def bad_char_heuristic(pattern):
bad_char = [-1] * 256
for i in range(len(pattern)):
bad_char[ord(pattern[i])] = i
return bad_char
m = len(pattern)
n = len(text)
bad_char = bad_char_heuristic(pattern)
s = 0
while s <= n - m:
j = m - 1
while j >= 0 and pattern[j] == text[s + j]:
j -= 1
if j < 0:
return f"Pattern occurs at shift {s}"
s += (m - bad_char[ord(text[s + m])] if s + m < n else 1)
else:
s += max(1, j - bad_char[ord(text[s + j])])
return "Pattern not found"
# Example Usage
text = "ABAAABCD"
pattern = "ABC"
print(boyer_moore_search(text, pattern)) # Output: Pattern occurs at shift 4
Ejercicio 2: Crear una Expresión Regular Básica para la Extracción de Correos Electrónicos
- Objetivo: Escribir un patrón de expresión regular para extraer direcciones de correo electrónico de una cadena dada.
- Nota: La expresión regular debe coincidir con los formatos de correo electrónico más comunes.
Solución:
import re
def extract_emails(text):
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'
return re.findall(pattern, text)
# Example Usage
text = "Please contact us at info@example.com or support@domain.org."
print(extract_emails(text)) # Output: ['info@example.com', 'support@domain.org']
Ejercicio 3: Implementación de una Construcción Simple de un Sufijo de Matriz
- Objetivo: Construir una matriz de sufijos para una cadena de texto dada.
- Nota: Las matrices de sufijos son una forma eficiente de almacenar y buscar subcadenas.
Solución:
def build_suffix_array(s):
return sorted(range(len(s)), key=lambda k: s[k:])
# Example Usage
text = "banana"
print(build_suffix_array(text)) # Output: Suffix array indices for the string "banana"
Ejercicio 4: Análisis de Sentimientos Utilizando Modelos Pre-entrenados
- Objetivo: Utilizar un modelo NLP pre-entrenado para realizar análisis de sentimientos en un texto dado.
- Nota: Este ejercicio asume el acceso a un modelo de análisis de sentimientos pre-entrenado, como los disponibles en bibliotecas como NLTK o TextBlob.
Solución:
from textblob import TextBlob
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment
# Example Usage
text = "I love programming in Python!"
print(analyze_sentiment(text)) # Output: Sentiment(polarity=0.5, subjectivity=0.6)
Ejercicios Prácticos para el Capítulo 9
Los siguientes ejercicios ofrecen aplicaciones prácticas de los conceptos discutidos en el Capítulo 9. Brindan experiencia práctica con algoritmos de cadenas y técnicas de análisis de texto, reforzando la comprensión y demostrando la utilidad de estos métodos en escenarios del mundo real.
Ejercicio 1: Implementar el Algoritmo de Boyer-Moore para la Búsqueda de Patrones
- Objetivo: Escribir una función para realizar el algoritmo de búsqueda de cadenas de Boyer-Moore, un método eficiente para encontrar subcadenas en cadenas de texto más grandes.
- Nota: El algoritmo de Boyer-Moore es complejo, centrándose en la heurística del "carácter malo".
Solución:
def boyer_moore_search(text, pattern):
def bad_char_heuristic(pattern):
bad_char = [-1] * 256
for i in range(len(pattern)):
bad_char[ord(pattern[i])] = i
return bad_char
m = len(pattern)
n = len(text)
bad_char = bad_char_heuristic(pattern)
s = 0
while s <= n - m:
j = m - 1
while j >= 0 and pattern[j] == text[s + j]:
j -= 1
if j < 0:
return f"Pattern occurs at shift {s}"
s += (m - bad_char[ord(text[s + m])] if s + m < n else 1)
else:
s += max(1, j - bad_char[ord(text[s + j])])
return "Pattern not found"
# Example Usage
text = "ABAAABCD"
pattern = "ABC"
print(boyer_moore_search(text, pattern)) # Output: Pattern occurs at shift 4
Ejercicio 2: Crear una Expresión Regular Básica para la Extracción de Correos Electrónicos
- Objetivo: Escribir un patrón de expresión regular para extraer direcciones de correo electrónico de una cadena dada.
- Nota: La expresión regular debe coincidir con los formatos de correo electrónico más comunes.
Solución:
import re
def extract_emails(text):
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}'
return re.findall(pattern, text)
# Example Usage
text = "Please contact us at info@example.com or support@domain.org."
print(extract_emails(text)) # Output: ['info@example.com', 'support@domain.org']
Ejercicio 3: Implementación de una Construcción Simple de un Sufijo de Matriz
- Objetivo: Construir una matriz de sufijos para una cadena de texto dada.
- Nota: Las matrices de sufijos son una forma eficiente de almacenar y buscar subcadenas.
Solución:
def build_suffix_array(s):
return sorted(range(len(s)), key=lambda k: s[k:])
# Example Usage
text = "banana"
print(build_suffix_array(text)) # Output: Suffix array indices for the string "banana"
Ejercicio 4: Análisis de Sentimientos Utilizando Modelos Pre-entrenados
- Objetivo: Utilizar un modelo NLP pre-entrenado para realizar análisis de sentimientos en un texto dado.
- Nota: Este ejercicio asume el acceso a un modelo de análisis de sentimientos pre-entrenado, como los disponibles en bibliotecas como NLTK o TextBlob.
Solución:
from textblob import TextBlob
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment
# Example Usage
text = "I love programming in Python!"
print(analyze_sentiment(text)) # Output: Sentiment(polarity=0.5, subjectivity=0.6)