Calculs statistiques
Cette section décrit les fonctions utilitaires utilisées pour l'affichage des statistiques.
Fonction LemmesDans:
function LemmesDans:(const)extrait
-
lemmes = distinctValuesIn:extrait["//w.lex"]
return lemmes - ""
Retourne les valeurs distinces (et non nulles) des attributs lex des tags <w>...</w> trouvés dans extrait.
Fonction VerbesDans:
-
function VerbesDans:(const)extrait
-
return extrait["//w[.temps != '']"]
Retourne les balises <w>...</w> dans extrait pour lesquelles l'attribut temps est défini.
Fonction MotsDans:deCatégorie:
-
function MotsDans:(const)extrait deCatégorie:(const)catégorie
-
return extrait["//w[.cat=" + catégorie + "]"]
Retourne les balises <w>...</w> dans extrait pour lesquelles l'attribut cat est égal à la valeur catégorie passée en paramètre.
Algorithmes d'analyse
Cette section décrit les fonctions utilitaires utilisées pour l'analyse des textes.
Fonction AfficherLes:lemmesLesPlusFréquentsDans:
Affiche les lemmes les plus fréquents, ainsi que le nombre d'occurrences pour chaque lemme.
function AfficherLes:(const)x lemmesLesPlusFréquentsDans:(const)extrait
tableau = {}
for lemme = distinctValuesIn:extrait["//w.lex"]
occurrences = count:extrait["//w[.lex=" + lemme + "]"]
entrée = ["Lemme" = lemme "Occurrences" = occurrences]
tableau += entrée
end
sort:tableau by:this["Occurrences"] ascending:no
for entrée = tableau[1..x]
lemme = entrée["Lemme"]
n = entrée["Occurrences"]
write:"\t", lemme, " (", n, " occurrences)"
-
end
Lignes 3 à 8: Crée un tableau à partir des lemmes trouvés dans extrait. Chaque élément du tableau (entrée) est une paire contenant le lemme (clé "Lemme") avec le nombre d'occurrences (clé "Occurrences").
Ligne 9: Trie le tableau par ordre décroissant de nombre d'occurrences.
Ligne 11 à 15: Pour les x premiers éléments du tableau, affiche le lemme ainsi qu'entre parenthèses le nombre d'occurrences.
Fonction AfficherLes:lemmesLesPlusVariésDans:
Affiche les lemmes les plus variés, c'est-à-dire présentant le plus grand nombre d'occurrences distinctes. Demande ensuite à l'utilisateur de choisir un lemme pour lequel les occurrences distinctes sont affichées.
-
function AfficherLes:(const)x lemmesLesPlusVariésDans:(const)extrait
-
-
tableau = {}
-
for lemme = distinctValuesIn:extrait["//w.lex"]
-
formes = extrait["//w[.lex=" + lemme +"]*"]
-
replaceElementsIn:formes with:lowercase:this
-
formes = distinctValuesIn:formes
-
entrée = ["Lemme" = lemme "Formes" = formes]
-
tableau += entrée
-
end
-
sort:tableau by:(count:this["Formes"]) ascending:no
-
-
i = 1
-
for entrée = tableau[1..x]
-
lemme = entrée["Lemme"]
-
n = count:entrée["Formes"]
-
write:"\t", i, ". ", lemme, " (", n, " formes)"
-
i += 1
-
end
-
i = prompt:"Numéro du lemme choisi ?"
-
entrée = tableau[i]
-
write:"Formes pour ", entrée["Lemme"], ":"
-
write:entrée["Formes"]
Lignes 3 à 11: De façon similaire à la fonction précédente, crée un tableau des lemmes présentant le plus grand nombre d'occurrences distinctes (formes).
Ligne 5: Recherche des occurrences pour les mots d'un lemme donné.
Ligne 6: Remplace chaque occurrence par des minuscules.
Ligne 7: Ne garde que les formes distinctes.
Lignes 13 à 19: Affichage numéroté des lemmes ainsi que du nombre de formes.
Ligne 20: Demande à l'utilisateur de choisir un lemme.
Lignes 21 à 23: Affichage des formes pour le lemme choisi.
Fonction AfficherEmploiDesTempsDans:
Affiche un tableau des emploi des différents temps pour chaque auteur, en pourcentage. Les colonnes correspondent aux temps, les lignes aux auteurs. Les éléments d'une ligne sont séparés par des tabulateurs.
-
function AfficherEmploiDesTempsDans:(const)extrait
-
temps = distinctValuesIn:extrait["//w.temps"]
-
temps = elementsOf:temps satisfying:(lengthOf:this) > 0
-
ligne = "Auteur\t"
-
for t in temps
-
ligne += t + "\t"
-
end
-
write:ligne
-
for texte in extrait
-
N = count:VerbesDans:texte
-
comptes = CompterTempsDans:texte
-
ligne = texte["/author*"] + "\t"
-
for t in temps
-
if isDefined:comptes[t]
-
n = comptes[t]
-
else
-
n = 0
-
end
-
ligne += n / N * 100 + "%\t"
-
end
-
write:ligne
-
end
Lignes 3 et 4: Recherche des temps trouvés dans les textes, c'est-à-dire des valeurs non nulles des attributs temps des balises <w>.
Lignes 6 à 10: Affiche la ligne des en-têtes (à savoir: "Auteur" suivi des noms des temps séparés par des tabulateurs).
Ligne 13: Compte le nombre total de verbes dans chaque texte de l'extrait.
Ligne 14: Compte le nombre d'occurrences pour chaque temps (voir CompterTempsDans: ci-dessous)
Ligne 15 à 22: Construit la ligne à afficher avec le nom de l'auteur (le contenu de la balise author) suivi du pourcentage correspondant à l'emploi de chaque temps.
Fonction CompterTempsDans:
Retourne un dictionnaire indiquant l'emploi des différents temps dans l'extrait donné. La clé de chaque paire correspond au nom du temps, et la valeur correspondante contient le nombre d'occurrences.
-
function CompterTempsDans:(const)extrait
-
verbes = VerbesDans:extrait
-
temps = summarize:verbes by:attribute:"temps" ofTag:this
-
replaceElementsIn:temps with:count:this
-
return temps
Ligne 3: Recherche des verbes dans l'extrait
Ligne 4: Construit un dictionnaire à partir des attributs temps de chaque balise
Ligne 5: Remplace les valeurs du dictionnaire par les nombres d'occurrences de chaque temps
Exemple
>> CompterTempsDans:corpus[1]
[
imparfait =
1
infinitif =
2
parfait =
6
part. passé =
4
part. présent =
1
présent =
4
subj. prés. =
1
]
Fonction AfficherLemmesPropresDans:
Affiche pour chaque auteur, ainsi que pour les dates BC et AC, la liste des lemmes propres, c'est-à-dire utilisés uniquement par l'auteur (ou à la date) en question.
-
function AfficherLemmesPropresDans:(const)extrait
-
for auteur in distinctValuesIn:extrait["//author*"]
-
write:"Lemmes propres à ", auteur, ":"
-
ligne = ""
-
for lemme in LemmesUniquesPour:"author" contenant:auteur dans:extrait
-
ligne += lemme + ", "
-
end
-
trim:ligne from:", "
-
write:ligne, "\n"
-
end
-
for date in {"AD", "BC"}
-
write:"Lemmes propres aux dates ", date, ":"
-
ligne = ""
-
for lemme in LemmesUniquesPour:"date" contenant:date dans:extrait
-
ligne += lemme + ", "
-
end
-
trim:ligne from:", "
-
write:ligne, "\n"
-
end
Lignes 3 à 11: Pour chaque auteur, recherche des lemmes uniques (voir LemmesUniquesPour:contenant:dans: ci-dessous) et affichage de lemmes séparés par des virgules
Ligne 9: Elimine les virgules initiales ou finales de la liste
Lignes 13 à 21: Idem pour les dates
Fonction LemmesUniquesPour:contenant:dans:
Retourne les lemmes présents uniquement dans les textes dont le contenu d'une balise particulière (p.ex. author) contient une chaîne donnée (p.ex. Julius Caesar).
-
function LemmesUniquesPour:(const)nomTag contenant:(const)valeur dans:(const)extrait
-
condition = "../doc/" + nomTag + "* @ '" + valeur + "'"
-
lemmes = distinctValuesIn:extrait["//w[" + condition + "].lex"]
-
autresLemmes = distinctValuesIn:extrait["//w[!" + condition + "].lex"]
-
return lemmes - autresLemmes
Ligne 3: Création de la chaîne correspondant à la condition spécifiée (p.ex. "../doc/author* @ 'Julius Caesar'", signifiant que le contenu de la balise author contient Julius Caesar)
Ligne 4: Recherche des lemmes pour les mots répondant à cette condition
Ligne 5: Recherche des lemmes pour les autres mots (ne répondant donc pas à la condition)
Ligne 7: Retourne les lemmes uniques à la condition