3. Bigrames factoritzats

Un bigrama és una seqüència de parelles de paraules que apareixen consecutivament en un text. Els bigrames s’utilitzen en aplicacions com la traducció automàtica, la generació de llenguatge natural o l’anàlisi de seqüències genètiques.

Per exemple, donada la frase "a cat runs as fast as a bicicle", els seus bigrames serien:

(a, cat), (cat, runs), (runs, as), (as, fast), (fast, as),
(as, a), (a, bicicle).

En aquest exercici treballarem amb bigrames factoritzats, que permeten representar, per a cada paraula, totes les possibles continuacions. Expressarem un bigrama factoritzat com un diccionari a on la clau és una paraula i el valor una llista amb totes les paraules que poden aparèixer immediatament després.

Dissenya la funció següent i desa-la al fitxer bigrames.py:

bigrames.extreu_bigrames(text, bigrama)

Modifica el diccionari bigrama incorporant els bigrames trobats a l’string text, és a dir, afegint cada possible continuació a la llista corresponent de la paraula però sense duplicats. A més, retorna una llista de tuples a on cada tupla és un bigrama factoritzat.

Paràmetres:
  • text (str) – Text sense signes de puntuació i en minúscules on les paraules estan separades per espais.

  • bigrama (dict) – Diccionari amb bigrames factoritzats.

Retorna:

Llista de tuples amb bigrames factoritzats. Cada tupla és una parella (paraula,llista de continuacions). La llista està ordenada ascendentment segons paraula.

Tipus de retorn:

list[tuple]

Els següents doctests mostren exemples del que ha de fer la funció:

>>> bigrama = {'a': ['cat']}
>>> text = 'a cat jumps and runs fast a dog jumps high'
>>> resultat = extreu_bigrames(text, bigrama)
>>> bigrama == {
...     'a': ['cat', 'dog'],
...     'cat': ['jumps'],
...     'jumps': ['and', 'high'],
...     'and': ['runs'],
...     'runs': ['fast'],
...     'fast': ['a'],
...     'dog': ['jumps']
... }
True
>>> resultat
[('a', ['cat', 'dog']), ('and', ['runs']), ('cat', ['jumps']), ('dog', ['jumps']), ('fast', ['a']), ('jumps', ['and', 'high']), ('runs', ['fast'])]

Nota

Disposes de més tests al fitxer test-extreu-bigrames.txt

Disposeu de solucions al fitxer bigrames.py