Aprendiendo un nuevo lenguaje (francés) utilizando análisis de datos

Desde pequeña mi papá siempre me decía que para aprender un nuevo idioma se debería empezar aprendiendo una nueva palabra cada día, de esta forma al final del año ya sabrías 365 palabras en ese idioma. Con esto método ya aprendes bastante, sin tanto esfuerzo, y no gastamos ni dinero. Por esta razón me propuse este año en aprender algunas palabras en francés.

Mi intención no es hablarlo completamente sino entender un poco lo que se habla en conversaciones muy básicas.

Como la idea fundamental es aprender palabras en francés, decidí buscarlas utilizando un poco de análisis de datos y de esta forma determinar qué palabras son las más usadas en las conversaciones y así aprenderlas.

1. Definir el proyecto

El propósito de este proyecto es determinar las palabras, en francés, más utilizadas en conversaciones normales del día a día.  Para ello se seleccionará una serie de televisión y, utilizando los subtítulos en francés, evaluar todas las palabras utilizadas durante todos los capítulos y contabilizar las veces que se usó, para obtener las palabras más utilizadas.

Para seleccionar la serie se tomaron las siguientes premisas:

  • La primera y más importante es que tenga varias temporadas, para de esta forma se puede obtener la mayor cantidad de información, entre palabras y el uso de la misma.
  • La serie debe utilizar un lenguaje sencillo, con expresiones y palabras que se usan a diario. En caso de que seas un abogado o médico es preferible seleccionar series en donde se hable con estos tecnicismos.

La serie seleccionada fue Amigos (Friends), que contó con diez temporadas y cada una de ellas con un promedio de 22 capítulos haciendo un total de 234 capítulos, para ser más exactos.

2. Preparar los datos

Se obtuvo todos los subtítulos en francés, de cada capítulo de todas las temporadas, haciendo un total de 234 archivos con extensión .srt.

Se utilizó la librería pysrt para el manejo de los archivos y agruparon todas las palabras en una variable.

text = []
for filename in glob.glob('Friends/*.srt'):
    subs = pysrt.open(filename, encoding='cp1252')
    number = 0
    for line in subs:
        sub = subs[number]
        text.append(sub.text)
        number += 1

Se elimina todos los signos de puntuación, ya que lo que se buscan son las palabras.

regex = re.compile('[%s]' % re.escape(string.punctuation))
new_text = []
new_words = []
for review in text:
    token = review
    token = token.lower()
    new_token1 = regex.sub(u'', token)
    if not new_token1 == r'':
        new_token1 = new_token1.split()
        new_text.append(new_token1)

Con este procesamiento, ya puedo hacer una clasificación de las palabras más usadas en los diálogos de Friends, pero prefiero realizar un mejor refinamiento de la data y eliminar las llamadas “stop words”, que serían los artículos, pronombres, entre otros, que se utilizan en las conversaciones y a su vez eliminar los nombres de los protagonistas.

stop_words = set(stopwords.words('french'))
stop_words.update(('rachel', 'ross', 'monica', 'chandler', 'joey', 'phoebe', 'size14wwwtvsubtitlesnetfont'))
counts_no_stopwords = []
for report in new_text:
    new_term_vector = []
    for word in report:
        if not word in stop_words:
            new_term_vector.append(word)
    counts_no_stopwords.append(new_term_vector)

Con este refinamiento ya tengo las palabras más utilizadas, por esta razón ya puedo realizar el conteo de las veces que se repite cada una de las palabras y clasificarlas de mayor a menor.

Toda esta información la almaceno en un archivo .csv para que sea más fácil acceder a él.

counts = {}
for sentence in counts_no_stopwords:
    for word in sentence:
        if word in counts:
            counts[word] += 1
        else:
            counts[word] = 1
items = [(v, k) for k, v in counts.items()]
items.sort()
items.reverse()             # so largest is first
counts = [(k, v) for v, k in items]
with open('words_friends.csv', 'w') as csv_file:
    writer = csv.writer(csv_file)
    for key, value in counts:
       writer.writerow([key, value])

3. Conclusiones

Este no es el proyecto más ortodoxo para aprender un idioma, simplemente es un método para obtener las palabras más usados de un idioma, basada en una serie con lenguaje muy básico.

Una de las mejoras que se puede hacer a este programa, es que en vez de clasificar las palabras se definieran las frases más usadas. Pero para esto se debe considerar los tiempos de los verbos (presente, pasado y futuro) así como también el uso de los pronombres. Este proceso es un poco más complejo al que he hecho acá.

Para ver el código completo puedes ingresar acá, si quieres ver el listado con las palabras puedes ingresar acá.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *