IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Java NullPointerException suite à l'utilisation de la fonction stemDocument (package tm)


Sujet :

R

  1. #1
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut Java NullPointerException suite à l'utilisation de la fonction stemDocument (package tm)
    Bonjour,

    Nouveau sur le forum j'espère ne pas me tromper d'endroit pour poster.

    Je rencontre un problème en utilisant la fonction stemDocument du package tm.

    Ce que je cherche à faire :
    Récupérer des pages Internet -> Fait
    Ne conserver que le contenu texte -> Fait
    Créer un dictionnaire à partir des mots présents dans le texte. Pour manipuler le texte je fais appel à la librairie tm.
    Je cherche à ramener en un seul les mots dont le radical est le même (ex : "chanson" et "chanter" me donneront "chant"). Il existe une fonction qui fait cela, la fonction stemDocument appelée dans une fonction tm_map qui s'applique sur des objets de type Corpus.
    Et tout se déroule bien, jusqu'à la ligne tm_map(corpus, stemDocument), là R plante et me renvoie un message d'erreur "Could not initialize the GenericPropertiesCreator. This exception was produced : java.lang.NullPointerException."

    Voici le code pour plus de clarté : (je tiens cependant à préciser que cette erreur apparaît au premier appel de la fonction, pas par la suite (encore plus bizarre...))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    library(XML)
    library(tm)
    
    #Lecture des documents et stockage dans des variables
    #Étape 1 : récupération des pages internet
    #Étape 2 : affectation du texte uniquement à un vecteur
    #--------------- Divers
    divers1 <- htmlParse(file="http://en.wikipedia.org/wiki/Largest_organisms")
    divers2 <- htmlParse(file="http://en.wikipedia.org/wiki/Human_rights")
    divers3 <- htmlParse(file="http://en.wikipedia.org/wiki/Business_process")
    divers4 <- htmlParse(file="http://en.wikipedia.org/wiki/Agriculture")
    
    #--------------- Astronomie
    astronomie1 <- htmlParse(file="http://en.wikipedia.org/wiki/Star")
    astronomie2 <- htmlParse(file="http://en.wikipedia.org/wiki/Galaxy")
    astronomie3 <- htmlParse(file="http://en.wikipedia.org/wiki/Planet")
    
    #--------------- Alimentation
    alimentation1 <- htmlParse(file="http://en.wikipedia.org/wiki/Bread")
    alimentation2 <- htmlParse(file="http://en.wikipedia.org/wiki/Food")
    alimentation3 <- htmlParse(file="http://en.wikipedia.org/wiki/Protein_(nutrient)")
    
    #--------------- Chimie
    chimie1 <- htmlParse(file="http://en.wikipedia.org/wiki/Hydrogen")
    chimie2 <- htmlParse(file="http://en.wikipedia.org/wiki/Protein")
    chimie3 <- htmlParse(file="http://en.wikipedia.org/wiki/Biochemistry")
    
    #13 variables correspondant à autant d'articles étudiés
    largest <- xpathSApply(divers1,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    human <- xpathSApply(divers2,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    business <- xpathSApply(divers3,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    agri <- xpathSApply(divers4,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    star <- xpathSApply(astronomie1,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    galaxy <- xpathSApply(astronomie2,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    planet <- xpathSApply(astronomie3,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    bread <- xpathSApply(alimentation1,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    food <- xpathSApply(alimentation2,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    protein_n <- xpathSApply(alimentation3,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    hydrogen <- xpathSApply(chimie1,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    protein <- xpathSApply(chimie2,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    biochemistry <- xpathSApply(chimie3,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue)
    
    #Concaténation des vecteurs en un seul (par sujet)
    divers <- c(largest, human, business, agri)
    astronomie <- c(star, galaxy, planet)
    alimentation <- c(bread, food, protein_n)
    chimie <- c(hydrogen, protein, biochemistry)
    
    #Nettoyage du vecteur
    #supprime les chiffres contenus dans le texte
    #On supprime aussi les autres caractères
    #ce caractère apparait souvent
    #cette suite également
    #On passe tout en minuscule pour que les mots soient identiques.
    
    nettoyer <- function(x){
      x <- gsub("[0-9]+"," ",x)
      x <- gsub("[\\’\\Â\"\\,\\.;'()/%£$:=-]"," ",x)
      x <- gsub("\\["," ",x)
      x <- gsub("\\]"," ",x)
      #x <- gsub("Â"," ",x)
      x <- gsub("–"," ",x)
      x <- gsub("[ ]+", " ",x)
      x <- tolower(x)
    }
    
    #Phase de nettoyage des données
    divers <- nettoyer(divers)
    astronomie <- nettoyer(astronomie)
    alimentation <- nettoyer(alimentation)
    chimie <- nettoyer(chimie)
    
    #Phase de construction du corpus et de l'objet TermDocumentMatrix
    langue <- stopwords("english")
    
    creer_corpus <- function(x, langue){
    #Supprime les stopwords sélectionnés dans le texte x
      for (supp in langue){
          supp <- paste(" ",supp, " ", sep="")
          x <- gsub(supp, " ", x)
        }
    #Découpage en mots
      mots <- strsplit(x, " ")
    
    #Création du corpus
      sour <- VectorSource(mots)
      dico <- Corpus(sour, language="en")
      dico <- tm_map(dico, stemDocument)
      dictionnaire <- TermDocumentMatrix(dico)
      return(dictionnaire)
    }
    
    creer_corpus(divers, langue)
    creer_corpus(astronomie, langue)
    creer_corpus(alimentation, langue)
    creer_corpus(chimie, langue)
    Merci d'avance pour l'éclairage de mes lanternes.

    En vous souhaitant une bonne journée.

    Guinue

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonjour,

    chez moi, cela a l'air de tourner sauf que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alimentation3 <- htmlParse(file="http://en.wikipedia.org/wiki/Protein_(nutrient)")
    produit une erreur ("nutriment" peut-être?), répercutée dans la suite du programme...

    J'ai chargé le package Snowball et voici ce que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > creer_corpus(divers, langue)
    A term-document matrix (2956 terms, 290 documents)
     
    Non-/sparse entries: 12446/844794
    Sparsity           : 99%
    Maximal term length: 15 
    Weighting          : term frequency (tf)
    Bonne continuation

  3. #3
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Et également merci pour cette réponse. (je trouve les mêmes résultats...)
    Blagues à part, j'ai chargé la librairie Snowball mais l'erreur est toujours présente.
    Pour nutrient, il ne pose pas de problème chez moi, c'est en fait le nom de l'article traité. L'erreur se produit, lors de la première exécution du script, pour le premier corpus créé mais pas pour les 2, 3, et 4ème. (et si je relance le script, plus d'erreur du tout).

    Merci tout de même.

  4. #4
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Je reviens vers vous, parce qu'après un examen un peu plus approfondi de mes TermDocumentMatrix(es), il s'avère que StemDocument, ne s'est pas appliquée du tout.

    Avant et après, les résultats sont les mêmes, aucun mot n'a bougé...
    J'ai essayé sur d'autres jeux de données et rien à faire.

    Serait-ce un problème d'installation du package ?

    Merci d'avance.

  5. #5
    Membre habitué
    Homme Profil pro
    Analyste
    Inscrit en
    Février 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste

    Informations forums :
    Inscription : Février 2012
    Messages : 62
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Je reviens vers vous après résolution (par contournement) du problème.
    Apparemment ceci est un problème de lien entre R et l'environnement Java présent sur l'ordinateur (donc certains n'ont aucun souci d'exécution, d'autres si...)

    Pour que la fonction stemDocument fonctionne tout de même, le fait de lancer le script depuis un éditeur règlera la situation (Tinn-R en tout cas; et R 32-bits).

    Et un mystère résolu, un !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Utilisation de la fonction Matlab "imcrop" dans un programme Java
    Par ingeta dans le forum MATLAB
    Réponses: 0
    Dernier message: 08/04/2014, 18h46
  2. [Débutant] Utilisation de plusieurs fonctions à la suite
    Par sharwyn dans le forum C#
    Réponses: 5
    Dernier message: 26/10/2011, 16h28
  3. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo