Comment entraîner le Stanford Parser avec Genia Corpus?

93

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 de Stanford: http://nlp.stanford.edu/software/lex-parser.shtml

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

Standford Parser peut s'entraîner avec des fichiers ptd; puis j'ai téléchargé Genia Corpus, car je veux travailler avec du texte biomédical:

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

Ensuite, j'ai une courte classe Main pour obtenir la représentation de la dépendance 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 ma sortie:

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?

Nathan
la source
2
vérifier: stackoverflow.com/a/3158157/2128327
Khaled.K
5
La vraie cause est "java.lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.EnglishUnknownWordModelTrainer". Nlp.stanford.edu/software/… a- t- il cette classe? Je ne peux pas télécharger 900 Mo pour le moment pour vérifier.
andrucz
1
Essayez cette vidéo, elle peut vous aider, youtube.com/watch?v=w4rWpvBjBRI
Laxman G

Réponses:

1

Comme l'a déclaré andrucz dans son commentaire, la vraie 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‌​inerau format edu.stanford.nlp.parser.lexparser.

(Si vous utilisez Maven, vérifiez que vous avez correctement ajouté la dépendance - un rapide google brougt ceci: Stanford Parser Maven Repo )

Maximilian Schirm
la source
1

La bibliothèque NLP s'est-elle installée correctement? Vérifiez les journaux pour vérifier 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 l'analyseur si cela fonctionne correctement, la bibliothèque est installée correctement, sinon si cela génère des erreurs, vous savez que votre installation était médiocre.

Le site Web de Stanford mentionne également ceci:

Si vous débutez dans l'analyse, vous pouvez commencer par exécuter l'interface graphique pour essayer l'analyseur. Les scripts sont inclus pour linux (lexparser-gui.sh) et Windows (lexparser-gui.bat). Jetez un œil à la documentation du package lexparser Javadoc et à la documentation de la classe LexicalizedParser. (Pointez votre navigateur Web sur le fichier index.html dans le répertoire javadoc inclus et accédez à ces éléments.) Consultez la FAQ de l'analyseur pour obtenir des réponses aux questions courantes. Si rien de tout cela ne vous aide, veuillez consulter nos consignes relatives aux e-mails pour savoir comment nous joindre pour obtenir de l'aide.

Binny Peza
la source
0

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

Divya Mishra
la source