2013-05-13 28 views
8

Pobrałem parser Stanford 2.0.5 i użyłem kodu źródłowego Demo2.java, który znajduje się w pakiecie, ale po tym, jak skompilowałem i uruchomiłem program, było wiele błędów. częścią mojego programu jest:Jak używać parsera Stanforda

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(); 
... 

błędy są:

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) 

proszę mi pomóc go rozwiązać. Dzięki

+1

Rozwiązałem ten problem. Problemem był konflikt między pakietem parsera stanford a pakietem coreNLP stanford w moim obszarze roboczym. – SahelSoft

+0

Wystarczy popatrzeć na to pytanie [enter Opis Link tutaj] [1] [1]: https://stackoverflow.com/questions/24084556/stanford-lexicalized-parser-load-model-error – user2471214

+0

@SahelSoft możesz wyjaśnić, co dokładnie zrobiłeś, aby rozwiązać ten problem? – Yigal

Odpowiedz

2

Używam parsera Stanford do wyodrębniania elementów takich jak nazwa, lokalizacja, organizacja.

Oto mój kod:

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; 
} 

To może pomóc, ale ja jestem wyodrębnianie tylko podmioty.

4

Wszystkie gramatyki znajdują się w dołączonym słoiku modeli. Czy "stanford-parser-2.0.5-models.jar" znajduje się w katalogu wykonawczym lub ścieżce klas?

+0

Dzięki za odpowiedź. Model znajduje się w katalogu wykonawczym. Zmieniam kod za pomocą << String gramatyki = args.length> 0? args [0]: "C: /project/models/englishPCFG.ser.gz"; >> ale ma błędy. – SahelSoft

+0

sprawdź swój stanford-parser.jar. Wygląda na to, że używasz starszej wersji. Przynajmniej nie ma pliku edu.stanford.nlp.io.IOUtils.readerFromString. –

+0

Przynajmniej w wersji 1.5 nie było takiej metody w IOUtils –

Powiązane problemy