93 votes

Comment entraîner le parseur de Stanford avec le corpus Genia ?

J'ai quelques problèmes pour créer un nouveau modèle pour Stanford Parser.

J'ai également téléchargé la dernière version depuis Stanford : http://nlp.stanford.edu/software/lex-parser.shtml

Et ici, le Corpus Genia en 2 formats, xml et ptb (Penn Treebank).

Standford Parser peut s'entraîner avec des fichiers ptd ; puis j'ai téléchargé le Corpus Genia, parce que je veux travailler avec des textes biomédicaux :

http://categorizer.tmit.bme.hu/~illes/genia_ptb/ (le lien n'est plus disponible) (genia_ptb.tar.gz)

Ensuite, j'ai une petite classe principale pour obtenir une représentation des dépendances d'une phrase biomédicale :

    String treebankPath = "/stanford-parser-2012-05-22/genia_ptb/GENIA_treebank_v1/ptb";

    Treebank tr = op.tlpParams.diskTreebank();
    tr.loadPath(treebankPath);  
    LexicalizedParser lpc=LexicalizedParser.trainFromTreebank(tr,op);

J'ai essayé différentes méthodes, mais j'obtiens toujours le même résultat.

J'ai une erreur dans la dernière ligne. Voici mon résultat :

Currently Fri Jun 01 15:02:57 CEST 2012
Options parameters:
useUnknownWordSignatures 2
smoothInUnknownsThreshold 100
smartMutation false
useUnicodeType false
unknownSuffixSize 1
unknownPrefixSize 1
flexiTag true
useSignatureForKnownSmoothing false
parserParams edu.stanford.nlp.parser.lexparser.EnglishTreebankParserParams
forceCNF false
doPCFG true
doDep false
freeDependencies false
directional true
genStop true
distance true
coarseDistance false
dcTags false
nPrune false
Train parameters: smooth=false PA=true GPA=false selSplit=true (400.0; deleting [VP^SQ, VP^VP, VP^SINV, VP^NP]) mUnary=1 mUnaryTags=false sPPT=false tagPA=true tagSelSplit=false (0.0) rightRec=true leftRec=false collinsPunc=false markov=true mOrd=2 hSelSplit=true (10) compactGrammar=3 postPA=false postGPA=false selPSplit=false (0.0) tagSelPSplit=false (0.0) postSplitWithBase=false fractionBeforeUnseenCounting=0.5 openClassTypesThreshold=50 preTransformer=null taggedFiles=null
Using EnglishTreebankParserParams splitIN=4 sPercent=true sNNP=0 sQuotes=false sSFP=false rbGPA=false j#=false jJJ=false jNounTags=false sPPJJ=false sTRJJ=false sJJCOMP=false sMoreLess=false unaryDT=true unaryRB=true unaryPRP=false reflPRP=false unaryIN=false sCC=1 sNT=false sRB=false sAux=2 vpSubCat=false mDTV=2 sVP=3 sVPNPAgr=false sSTag=0 mVP=false sNP%=0 sNPPRP=false dominatesV=1 dominatesI=false dominatesC=false mCC=0 sSGapped=4 numNP=false sPoss=1 baseNP=1 sNPNNP=0 sTMP=1 sNPADV=1 cTags=true rightPhrasal=false gpaRootVP=false splitSbar=0 mPPTOiIN=0
Binarizing trees...done. Time elapsed: 141 ms
Extracting PCFG...done. Time elapsed: 56 ms
Compiling grammar...done Time elapsed: 1 ms
Extracting Lexicon...Exception in thread "main" edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:39)
    at edu.stanford.nlp.parser.lexparser.BaseLexicon.initializeTraining(BaseLexicon.java:335)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTreebank(LexicalizedParser.java:800)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.trainFromTreebank(LexicalizedParser.java:226)
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.trainFromTreebank(LexicalizedParser.java:237)
    at ABravoDemo.main(ABravoDemo.java:35)
Caused by: edu.stanford.nlp.util.MetaClass$ClassCreationException: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:353)
    at edu.stanford.nlp.util.MetaClass.createInstance(MetaClass.java:370)
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:37)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.construct(MetaClass.java:119)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:192)
    at edu.stanford.nlp.util.MetaClass$ClassFactory.<init>(MetaClass.java:53)
    at edu.stanford.nlp.util.MetaClass.createFactory(MetaClass.java:349)
    ... 7 more

Comment créer un nouveau modèle avec ce corpus ?

1voto

Comme l'a indiqué andrucz dans son commentaire, la véritable cause de votre problème semble provenir d'une classe manquante.

Essayez de vérifier si vous avez correctement importé votre bibliothèque ( et assurez-vous qu'elle contient la classe EnglishUnknownWordModelTra‌​iner en edu.stanford.nlp.parser.lexparser .

(Si vous utilisez Maven, vérifiez que vous avez correctement ajouté la dépendance - une recherche rapide sur Google a permis de trouver cette information) : Repo Maven du parseur de Stanford )

1voto

Binny Peza Points 26

La bibliothèque NLP s'est-elle installée correctement ? Vérifiez dans les logs qu'il n'y a pas d'erreurs. La plupart du temps, ce problème survient lorsque la bibliothèque stanford nltk ne s'installe pas correctement.

Un moyen rapide de vérifier est d'exécuter l'interface graphique pour essayer le parseur ; si cela fonctionne correctement, alors la bibliothèque a été installée correctement ; sinon, si vous obtenez des erreurs, alors vous savez que votre installation était mauvaise.

Le site Web de Stanford en fait également mention ; jetez-y un coup d'œil :

Si vous êtes novice en matière d'analyse syntaxique, vous pouvez commencer par exécuter l'interface graphique pour essayer l'analyseur. scripts sont inclus pour linux (lexparser-gui.sh) et Windows (lexparser-gui.bat). Jetez un œil à la documentation Javadoc du package lexparser et à la documentation de la classe LexicalizedParser. (Dirigez votre navigateur web vers le fichier index.html dans le répertoire javadoc inclus et naviguez vers ces éléments). Consultez la FAQ de l'analyseur pour obtenir des réponses aux questions les plus courantes. Si rien de tout cela ne vous aide, veuillez consulter nos directives en matière de courrier électronique pour savoir comment nous joindre pour obtenir une aide supplémentaire.

0voto

Divya Mishra Points 1

Vérifiez si vous avez correctement importé la bibliothèque et assurez-vous qu'elle contient la classe {EnglishUnknownWordModelTrainer} et assurez-vous également que la version que vous avez téléchargée fonctionne correctement avec Genia Corps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X