Programma che può eseguire due compiti diversi:
- Preso un testo in input crea una tabella csv in cui ogni riga contiene una parola con le frequenza delle parole successive in percentuale
- Presa una tabella csv scrive un testo random secondo le probabilità definite nel file di un numero di parole definito e partendo da una parola definita
Per decidere quale compito eseguire bisogna scrivere come input nella linea di comando -1
o -2
(obbligatorio inserirne solo uno dei due). Bisogna inoltre specificare un file in input, scritto dopo la flag -i
e un file di output, scritto dopo la flag -o
.
Il programma può essere eseguito in modalità multiprocesso scrivendo come argomento nella linea di comando -p
.
Un esempio di comando per eseguire il programma e fargli eseguire il compito 1 multiprocesso:
./ANSI-C -1 -p -i input/example.txt -o csv/example.csv
In questo esempio il testo è:
Cosa dicono le previsioni del tempo? Previsioni del tempo di oggi: tempo incerto!
Previsioni di domani?
La tabella csv
in questo casò conterrà:
.,cosa,1
!,previsioni,1
cosa,dicono,1
dicono,le,1
le,previsioni,1
previsioni,di,0.3333,del,0.6666
del,tempo,1
tempo,incerto,0.3333,di,0.3333,?,0.3333
?,previsioni,1
di,domani,0.5,oggi,0.5
oggi,tempo,1
incerto,!,1
domani,?,1
Il compito 2 ha bisogno di un valore in input aggiuntivo, cioè il numero di parole, da scrivere dopo la flag -n
. Inoltre si può aggiungere in modo opzionale una parola da cui far iniziare il testo random dopo una flag -s
.
Un esempio di comando per eseguire il programma e fargli eseguire il compito 2 multiprocesso:
./ANSI-C -2 -p -i csv/example.csv -o random_text/example_random.txt -n 11 -s !
In questo esempio la tabella è:
.,cosa,1
!,previsioni,1
cosa,dicono,1
dicono,le,1
le,previsioni,1
previsioni,di,0.3333,del,0.6666
del,tempo,1
tempo,incerto,0.3333,di,0.3333,?,0.3333
?,previsioni,1
di,domani,0.5,oggi,0.5
oggi,tempo,1
incerto,!,1
domani,?,1
Il testo in output sarà creato in modo random, in questo casò un possibile output da 11 parole sarà:
Previsioni del tempo incerto ! Cosa dicono le previsioni del tempo
Il programma utilizza una linked list di parole (Word), a cui ad ognuna è associata un'altra linked list contenente le parole (chiamate Tuple) che appaiono successive a quella con la frequenza.
Per rendere la scritura del testo random più veloce ogni Tupla ha inoltre un puntatore collegato alla Word contenente quella determinata parola.
Una rappresentazione grafica dell'architettura è:
+--WORD---+ +--WORD---+ +--WORD---+
| | --> | | --> | | --> ...
+---------+ +---------+ +---------+
| | |
V V V
+--TUPLA--+ +--TUPLA--+ +--TUPLA--+
| | | | | |
+---------+ +---------+ +---------+
| | |
V V V
+--TUPLA--+ +--TUPLA--+ +--TUPLA--+
| | | | | |
+---------+ +---------+ +---------+
| | |
V V V
... ... ...
La versione multiprocesso utilizza 3 processi, ognuno destinato ad un compito diverso:
- Lettura del file in input
- Creazione della struttura dati
- Scrittura del file in output