[Corpusreader-svn] SF.net SVN: corpusreader:[213] trunk/corpusreader/src/main/R/specificites.R
Status: Alpha
Brought to you by:
sylvainloiseau
|
From: <syl...@us...> - 2009-02-16 14:28:02
|
Revision: 213
http://corpusreader.svn.sourceforge.net/corpusreader/?rev=213&view=rev
Author: sylvainloiseau
Date: 2009-02-16 14:27:57 +0000 (Mon, 16 Feb 2009)
Log Message:
-----------
Last change before deletion
Modified Paths:
--------------
trunk/corpusreader/src/main/R/specificites.R
Modified: trunk/corpusreader/src/main/R/specificites.R
===================================================================
--- trunk/corpusreader/src/main/R/specificites.R 2009-01-01 19:27:52 UTC (rev 212)
+++ trunk/corpusreader/src/main/R/specificites.R 2009-02-16 14:27:57 UTC (rev 213)
@@ -1,16 +1,16 @@
specificites <- function(corpus, souscorpus) {
## Sylvain Loiseau
## 2006-2008
- ## Derni\xE8re \xE9dition samedi 13 d\xE9cembre 2008, 19:38:22 (UTC+0100)
+ ## Dernière édition samedi 13 décembre 2008, 19:38:22 (UTC+0100)
##
- ## Indice de sp\xE9cificit\xE9 des formes d'un sous corpus par rapport \xE0 un corpus.
- ## Mesur\xE9e par la formule hyperg\xE9om\xE9trique,
+ ## Indice de spécificité des formes d'un sous corpus par rapport à un corpus.
+ ## Mesurée par la formule hypergéométrique,
## retourne un tableau :
## une ligne par forme du sous corpus
- ## en colonne : indice de sp\xE9cificit\xE9, sous fr\xE9quence, fr\xE9quence.
+ ## en colonne : indice de spécificité, sous fréquence, fréquence.
##
- ## Les fr\xE9quences dans le corpus
+ ## Les fréquences dans le corpus
if (class(corpus) == "data.frame") {
frequencesCorpus <- colSums(corpus);
print("Le corpus est un data frame");
@@ -21,11 +21,11 @@
print(paste("Nombre de variables dans le corpus : ", length(frequencesCorpus)));
## Un peu de nettoyage dans le sous corpus : on supprime
- ## d'\xE9ventuelles forme ou partie sans aucune valeur
+ ## d'éventuelles forme ou partie sans aucune valeur
souscorpus <- souscorpus[,colSums(souscorpus) > 0];
souscorpus <- souscorpus[rowSums(souscorpus) > 0,];
- ## Les fr\xE9quences dans le sous-corpus
+ ## Les fréquences dans le sous-corpus
sousFrequences <- colSums(souscorpus);
specificitesFrequencyLists(frequencesCorpus, sousFrequences);
@@ -33,13 +33,13 @@
specificitesFrequencyLists <- function(frequencesCorpus, sousFrequences) {
if (any(is.na(frequencesCorpus))) {
- stop("Valeurs non num\xE9riques dans la liste des frequences du corpus.");
+ stop("Valeurs non numériques dans la liste des frequences du corpus.");
}
if (any(is.na(sousFrequences))) {
- stop("Valeurs non num\xE9riques dans la liste des fr\xE9quences du sous corpus.");
+ stop("Valeurs non numériques dans la liste des fréquences du sous corpus.");
}
- ## Nombre de formes \xE0 traiter
+ ## Nombre de formes à traiter
nbrFormes <- length(sousFrequences);
print(paste("Nombre de formes dans le sous corpus :", nbrFormes));
@@ -47,8 +47,14 @@
## que les variables qui sont dans le sous corpus
frequencesTotales <- frequencesCorpus[names(sousFrequences)]
if (length(frequencesTotales) < nbrFormes) {
- warning("Attention : toutes les variables du sous corpus n'ont pas \xE9t\xE9 trouv\xE9es dans le corpus.")
+ warning("Attention : toutes les variables du sous corpus n'ont pas été trouvées dans le corpus.")
}
+ if (any(is.na(frequencesTotales))) {
+ na_index <- is.na(frequencesTotales);
+ print("NA :");
+ print(names(sousFrequences)[na_index]);
+ stop("NA in FrequencesTotales");
+ }
#frequencesTotales <- frequencesTotales[ !is.na(frequencesTotales) ];
#if (any(is.na(frequencesTotales))) {
@@ -61,45 +67,46 @@
print(paste("Longueur du corpus :", longueurCorpus));
print(paste("Longueur du sous corpus :", longueurSousCorpus));
- ## Pour chaque fr\xE9quence totale, on calcule la diff\xE9rence entre la taille du corpus et cette fr\xE9quence
- ## (n\xE9cessaire pour les fonctions phyper et dhyper)
+ ## Pour chaque fréquence totale, on calcule la différence entre la taille du corpus et cette fréquence
+ ## (nécessaire pour les fonctions phyper et dhyper)
longueurCorpusMoinsFrequencesTotales <- (longueurCorpus - frequencesTotales);
- # print(paste("Taille de corpus moins fr\xE9quence", length(longueurCorpusMoinsFrequencesTotales)));
+ if (any(is.na(longueurCorpusMoinsFrequencesTotales))) {
+ stop("Valeurs non numériques dans la liste des fréquences complémentaires de chaque forme.");
+ }
+ # print(paste("Taille de corpus moins fréquence", length(longueurCorpusMoinsFrequencesTotales)));
# if (any(is.na(longueurCorpusMoinsFrequencesTotales))) {
# stop("NA in longueurCorpusMoinsFrequencesTotales");
# }
- ## on met dans un tableau "cumulative", pour chaque forme, la propabilit\xE9 cumul\xE9e
- ## (phyper) correspondant \xE0 sa sous fr\xE9quence dans le sous corpus compte tenu de sa
- ## fr\xE9quence absolue dans le corpus principal et des tailles des deux corpus.
+ ## on met dans un tableau "cumulative", pour chaque forme, la propabilité cumulée
+ ## (phyper) correspondant à sa sous-fréquence dans le sous corpus compte tenu de sa
+ ## fréquence absolue dans le corpus principal et des tailles des deux corpus.
##
cumulative <- double(nbrFormes);
cumulative <- phyper(sousFrequences, frequencesTotales, longueurCorpusMoinsFrequencesTotales, longueurSousCorpus);
+ if (any(is.na(cumulative))) {
+ stop("NA in cumulative");
+ }
# cumulative[is.na(cumulative)] <- 0;
- # if (any(is.na(cumulative))) {
- # stop("NA in cumulative");
- # }
- ## Si la fr\xE9quence cumul\xE9e est inf\xE9rieure \xE0 0.5, c'est qu'il y a *moins* d'occurrences
- ## que ne le laisserait pr\xE9voir le hasard, si la fr\xE9quence cumul\xE9e est sup\xE9rieure \xE0 0.5
- ## c'est qu'il y a plus d'occurrences qu'il n'y aurait d\xFB en avoir. On inverse donc les signes
- ## pour prendre en compte cette diff\xE9rence.
+ ## Si la fréquence cumulée est inférieure à 0.5, c'est qu'il y a *moins* d'occurrences
+ ## que ne le laisserait prévoir le hasard, si la fréquence cumulée est supérieure à 0.5
+ ## c'est qu'il y a plus d'occurrences qu'il n'y aurait dû en avoir. On inverse donc les signes
+ ## pour prendre en compte cette différence.
specificiteIndex <- double(nbrFormes);
- if (any(is.na(specificiteIndex))) {
- stop("NA in specificiteIndex");
- }
- if (any(is.na(sousFrequences))) {
- stop("NA in sousFrequences");
- }
+ # if (any(is.na(specificiteIndex))) {
+ # stop("NA in specificiteIndex");
+ # }
+
# specificiteIndex[cumulative < 0.5] <- specificiteIndex[cumulative < 0.5];
- specificiteIndex[cumulative >= 0.5] <- (1 - specificiteIndex[cumulative >= 0.5]);
+ specificiteIndex[cumulative >= 0.5] <- (1 - cumulative[cumulative >= 0.5]);
m <- matrix(
- c(specificiteIndex, sousFrequences, frequencesTotales),
+ c(cumulative, sousFrequences, frequencesTotales),
nrow = nbrFormes,
ncol=3,
- dimnames = list(names(sousFrequences), c("Indice de sp\xE9cificit\xE9", "Sous fr\xE9quence", "Fr\xE9quence totale"))
+ dimnames = list(names(sousFrequences), c("Indice de spécificité", "Sous fréquence", "Fréquence totale"))
);
sorted <- m[order(m[,1], decreasing=TRUE),];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|