2013-05-13 121 views
8

我下載了斯坦福解析器2.0.5並使用包中的Demo2.java源代碼,但編譯並運行該程序後出現了很多錯誤。 我的計劃的一部分是:如何使用斯坦福解析器

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

的錯誤是:

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) 

請幫我解決這個問題。 謝謝

+1

我解決了這個問題。問題在於我的工作區中stanford解析器包和stanford coreNLP包之間的衝突。 – SahelSoft 2013-08-10 06:28:19

+0

看一看這個問題[此處輸入鏈接的描述] [1] [1]:https://stackoverflow.com/questions/24084556/stanford-lexicalized-parser-load-model-error – user2471214 2014-06-06 15:34:57

+0

@SahelSoft能解釋你究竟做了什麼來解決這個問題嗎? – Yigal 2016-04-25 15:37:14

回答

2

我使用斯坦福分析器來提取像名稱,位置,組織等實體。

這裏是我的代碼:

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

這可以幫助你,但我只提取實體。

4

所有的語法都位於包含的模型jar中。 執行目錄或類路徑中的「stanford-parser-2.0.5-models.jar」是什麼?

+0

感謝您的回答。該模型位於執行目錄中。我用<< String grammar = args.length> 0來更改代碼? args [0]:「C:/project/models/englishPCFG.ser.gz」; >>但它有錯誤。 – SahelSoft 2013-05-13 13:53:26

+0

檢查你的stanford-parser.jar。看來你正在使用一個較舊的。至少edu.stanford.nlp.io.IOUtils.readerFromString不在那裏。 – 2013-05-13 14:31:28

+0

至少在版本1.5中不是IOUtils中的這種方法 – 2013-05-14 06:37:07