如何使用斯坦福解析器 [英] How to use Stanford parser

查看:325
本文介绍了如何使用斯坦福解析器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我下载了斯坦福解析器2.0.5,并使用了Demo2.java中的源代码,但是在我编译并运行程序后,它有很多错误。
我的程序的一部分是:

  public class testStanfordParser {
/ **用法: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(语法,选项);
TreebankLanguagePack tlp = new PennTreebankLanguagePack();
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
...

错误是:

 从序列化文件加载解析器edu / stanford / nlp / models / lexparser / englishPCFG.ser.gz java.io.IOException:无法解析edu / stanford / nlp / models /lexparser/englishPCFG.ser.gz作为类路径,文件名或URL 
在edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:408)
在edu.stanford.nlp .io.IOUtils.readStreamFromString(IOUtils.java:356)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromSerializedFile(LexicalizedParser.java:594)
在edu.stanford.nlp.parser .lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:389)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:157)
在edu.stanford.nlp.parser在testStanfordParser.main(testStanfordParser.java:19)上的
的.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:143)。从文本文件中加载解析器edu / stanford / nlp / models / lexparser / englishPCFG.ser.gz线程main中的异常java.lang.NoSuchMethodError:edu.stanford.nlp.io.IOUtils.readerFromString(Ljava / lang / String; )Ljava / IO / BufferedReader中; edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTextFile(LexicalizedParser.java:528)
$ ed $。
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:157)
在edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:143)
at testStanfordParser.main(testStanfordParser.java:19)

请帮我解决。
谢谢

解决方案

我正在使用Stanford解析器来提取名称,位置,组织等实体。



这是我的代码:

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

字符串s1 =今天下午拉胡尔·库拉里,你今天好吗?

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

}
私有静态最终模式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;
}

这可能会帮助您,但我只能提取实体。


I downloaded the Stanford parser 2.0.5 and use Demo2.java source code that is in the package, but After I compile and run the program it has many errors. A part of my program is:

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

the errors are:

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)

please help me to solve it. Thanks

解决方案

I am using Stanford parser to extract entities like name ,location,organization.

Here is my code:

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

This might help you but i am extracting only entities.

这篇关于如何使用斯坦福解析器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆