Pares mínimos con Anki

· Pablo ·

CW: No soy un experto, Evidencia de su efectividad limitada.

Un par mínimo es un par palabras de un idioma que se diferencian únicamente en un fono (casa y cosa). Los pares mínimos pueden utilizarse para decidir si dos fonos representan diferentes fonemas: distinguimos casa de cosa luego [a] y [o] son dos fonemas distintos y no dos realizaciones del mismo fonema.

Los pares mínimos pueden utilizarse también en el aprendizaje de lenguas para aprender a diferenciar fonos que no suelas distinguir (por ejemplo, para aprender la diferencia entre /b/ y /v/ o entre /n/ y /ŋ/ o aprender tonos si tu lengua nativa no es tonal). Este post reune algunas herramientas útiles y cosas a tener en cuenta para utilizar esta técnica.

Elegir los fonemas

No todos los sonidos de un idioma serán extraños para ti por lo que deberías centrarte en aquellos que te resulten más difíciles o que no estés acostumbrado a producir. Dependiendo del idioma y de tu idioma nativo es posible encontrar listas de los fonemas o características más difíciles de diferenciar en sitios como Wikipedia (ejemplo de español-inglés) o en libros de fonética de el idioma objetivo que estén escritos en tú idioma.

Es más fácil encontrar información que compare la fonología inglesa con la de otro idioma y puedes aprovechar esta información pero debes tener en cuenta las diferencias que haya con tu idioma. Los artículos de la Wikipedia sobre fonología de cada idioma también pueden resultarte útiles.

Obtener los pares

Encontrar listas de pares mínimos suele ser sencillo (especialmente para los fonemas que son difíciles para hablantes nativos de inglés). Puedes probar a utilizar tu buscador favorito (en inglés el término es minimal pairs) o buscarlos en libros de fonética del idioma objetivo (o simplemente en libros de idioma).

Es posible que encuentres una lista de pares mínimos pero no grabaciones de las palabras, por lo que deberás encontrarlas aparte. Las grabaciones deben ser lo más parecidas posibles para que no puedas guiarte por otros elementos aparte de la diferencia del fonema. Debes tener en cuenta:

  • La entonación debería ser la misma para ambas palabras. Si vas a pedir a un hablante nativo que haga la grabación pide que grabe cada palabra dos veces (casa casa cosa cosa) ya que tendemos a pronunciar con distinta entonación la primera y segunda palabra de una pareja
  • Ten cuidado con el acento. Casi todos los idiomas muestran diferencias entre los acentos en distintas regiones (el artículo de los acentos del inglés puede darte una idea de la gran variabilidad que puede tener un idioma). Intenta conocer qué acento está utilizando la persona que graba ya que dependiendo del acento una palabra puede contar o no con el fonema que quieres.

Si no encontraras el audio junto con los pares mínimos puedes probar a utilizar audios de Forvo (asegurándote que sean del mismo usuario y no tengan diferencias significativas) o pedir una grabación en Rhinospike (es gratuito aunque deberás hacer grabaciones en tu idioma a cambio).

Si la grabación de todas las palabras está en un solo audio puedes utilizar Audacity [gratis, libre, Windows, macOS, GNU/Linux] para separarlas, utilizando la opción AnalizarSound Finder (es posible que tengas que modificar los dos primeros parámetros dependiendo del audio) y a continuación ArchivoExportar múltiple… para obtener archivos separados de cada palabra. Los nombres por defecto serán números consecutivos empezando desde el 1. Si tienes muchas palabras puede ser recomendable renombrar los archivos (aquí un ejemplo de cómo hacerlo en Python asumiendo que WORDS_FILE tiene las palabras del audio en orden, una en cada línea):

import os

words = open(WORDS_FILE).read().splitlines()

for num, word in enumerate(words, start = 1):
    os.rename("{}.mp3".format(num), "{}.mp3".format(word))

Crear las tarjetas

Para entrenar la diferenciación de los fonemas puedes utilizar un sistema de repetición espaciada. Yo lo he hecho en Anki utilizando el tipo de tarjeta que acompaña al libro Fluent Forever. Puedes encontrar un tutorial de cómo instalarlo. Las tarjetas de Fluent Forever constan de la siguiente información para cada palabra:

  • La escritura de la palabra
  • Un audio con su pronunciación
  • La transcripción fonética siguiendo el Alfabeto Fonético Internacional
  • La traducción de la palabra

No tienes por qué poner todos los campos (algunos como la transcripción fonética pueden ser difíciles de encontrar o no muy útiles si no quieres invertir el tiempo necesario para aprender a leer el IPA). En mí caso estoy utilizando las tarjetas para aprender a diferenciar algunos fonemas del inglés por lo que era sencillo encontrar la información necesaria. Si vas a utilizar la transcripción fonética ten cuidado de que esta se corresponda con la del audio.

Si vas a utilizar esta técnica con palabras en inglés para obtener la traducción y transcripción (británica) puedes utilizar la API de Oxford Dictionaries. En el siguiente ejemplo las funciones ipa y to_es devuelven la primera transcripción (por defecto en Received Pronunciation) y traducción encontradas (del primer sentido o subsentido de la palabra que aparezca) respectivamente:

import requests

HEADER =  {'app_id': 'xxxxxxxxxx', 'app_key': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
API_URL = 'https://''od-api.oxforddictionaries.com:443/api/v1/entries/en/'

def ipa(word):
    """ Gets IPA pronunciation (RP) from Oxford Dictionary.
    Empty if no suitable answer is found."""

    req = requests.get(API_URL + word.lower(), headers = HEADER)

    if req.status_code == 200:
        entries = req.json()["results"][0]["lexicalEntries"]
        for entry in entries:
            if "pronunciations" in entry:
                return entry["pronunciations"][0]["phoneticSpelling"]
    return ""


def to_es(word):
    """ Gets Spanish translation from Oxford Dictionary.
    Empty if no suitable answer is found."""

    req = requests.get(API_URL + word.lower() +'/translations=es', headers = HEADER)

    if req.status_code == 200:
        senses = req.json()["results"][0]["lexicalEntries"][0]["entries"][0]["senses"]

        for sense in senses:
            if "translations" in sense:
                return sense["translations"][0]["text"]
            elif "subsenses" in sense:
                for subsense in sense["subsenses"]:
                    if "translations" in subsense:
                        return subsense["translations"][0]["text"]
    return ""

Para utilizar el código debes sustituir HEADER con las app_id y app_key que te proporcionarán al registrarte en la web (es gratuito con acceso limitado).

Finalmente para automatizar lo máximo posible el proceso puedes producir un archivo CSV que tenga las distintas cartas. Si tienes una lista de las palabras de tal manera que cada dos forman una pareja puedes utilizar el siguiente código (sustituyendo las funciones ipa y to_es por unas que devuelvan la información correcta en tu idioma objetivo):

import os
import csv
words = open(WORDS_FILE).read().splitlines()
cards_csv = csv.writer(open(CARDS_FILE, 'a'), delimiter=',')

for num, word in enumerate(words, start = 1):
    if num % 2 == 1:
        prev = word
    else:
        cards_csv.writerow([prev, "[sound:{}.mp3]".format(prev), ipa(prev), to_es(prev)]
                         + [word, "[sound:{}.mp3]".format(word), ipa(word), to_es(word)])

Puedes importarlas en Anki (ArchivoImportar…). No te olvides además de copiar los audios en la carpeta collections.media. ¡Y ya está!