2013-05-13 10 views
8

Ho scaricato il parser Stanford 2.0.5 e utilizzo il codice sorgente Demo2.java contenuto nel pacchetto, ma dopo aver compilato ed eseguito il programma ha molti errori. Una parte del mio programma è:Come utilizzare il parser Stanford

public class testStanfordParser { 
/** Usage: ParserDemo2 [[grammar] textFile] */ 
    public static void main(String[] args) throws IOException { 
    String grammar = args.length > 0 ? args[0] : "edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz"; 
    String[] options = { "-maxLength", "80", "-retainTmpSubcategories" }; 
    LexicalizedParser lp = LexicalizedParser.loadModel(grammar, options); 
    TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
    GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 
... 

gli errori sono:

Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz java.io.IOException: Unable to resolve edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz" as either class path, filename or URL 
at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:408) 
at edu.stanford.nlp.io.IOUtils.readStreamFromString(IOUtils.java:356) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromSerializedFile(LexicalizedParser.java:594) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:389) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:157) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:143) 
at testStanfordParser.main(testStanfordParser.java:19).            Loading parser from text file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz Exception in thread "main" java.lang.NoSuchMethodError: edu.stanford.nlp.io.IOUtils.readerFromString(Ljava/lang/String;)Ljava/io/BufferedReader; 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTextFile(LexicalizedParser.java:528) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:391) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:157) 
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:143) 
at testStanfordParser.main(testStanfordParser.java:19) 

prego, aiutami a risolverlo. Grazie

+1

Ho risolto questo problema. Il problema era il conflitto tra il pacchetto stanford parser e il pacchetto stanford coreNLP nel mio spazio di lavoro. – SahelSoft

+0

Date un'occhiata a questa domanda [inserire descrizione collegamento qui] [1] [1]: https://stackoverflow.com/questions/24084556/stanford-lexicalized-parser-load-model-error – user2471214

+0

@SahelSoft puoi spiegare che cosa hai fatto per risolvere questo? – Yigal

risposta

2

Sto usando il parser di Stanford per estrarre entità come nome, posizione, organizzazione.

Ecco il mio codice:

public class stanfrdIntro { 

    public static void main(String[] args) throws IOException, SAXException, 
    { 

     String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz"; 


     AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier 
       .getClassifierNoExceptions(serializedClassifier); 

     String s1 = "Good afternoon Rahul Kulhari, how are you today?"; 

     s1 = s1.replaceAll("\\s+", " "); 
     String t=classifier.classifyWithInlineXML(s1); 
    System.out.println(Arrays.toString(getTagValues(t).toArray())); 

    } 
     private static final Pattern TAG_REGEX = Pattern.compile("<PERSON>(.+?)</PERSON>"); 

private static Set<String> getTagValues(final String str) { 
    final Set<String> tagValues = new HashSet<String>(); 
    //final Set<String> tagValues = new TreeSet(); 
    final Matcher matcher = TAG_REGEX.matcher(str); 
    while (matcher.find()) { 
     tagValues.add(matcher.group(1)); 
    } 

    return tagValues; 
} 

Questo potrebbe aiutare, ma io sono solo l'estrazione di entità.

4

Tutte le grammatiche si trovano nel contenitore dei modelli inclusi. "stanford-parser-2.0.5-models.jar" è nella directory di esecuzione o classpath?

+0

Grazie per la risposta. Il modello si trova nella directory di esecuzione. Cambio il codice con << String grammar = args.length> 0? args [0]: "C: /project/models/englishPCFG.ser.gz"; >> ma ha errori. – SahelSoft

+0

controlla il tuo stanford-parser.jar. Sembra che tu stia usando uno più vecchio. Almeno il edu.stanford.nlp.io.IOUtils.readerFromString non c'è. –

+0

Almeno nella versione 1.5 non era un metodo simile in IOUtils –

Problemi correlati