Cómo analizar otros idiomas además del inglés con Stanford Parser? en java, no líneas de comando

He estado tratando de usar Stanford Parser en mi programa Java para analizar algunas oraciones en chino. Como soy bastante nuevo en Java y Stanford Parser, utilicé 'ParseDemo.java' para practicar. El código funciona bien con oraciones en inglés y genera el resultado correcto. Sin embargo, cuando cambié el modelo a 'chinesePCFG.ser.gz' e intenté analizar algunas oraciones en chino segmentadas, las cosas salieron mal.

Aquí está mi código en Java

class ParserDemo {

  public static void main(String[] args) {
    LexicalizedParser lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz");
    if (args.length > 0) {
      demoDP(lp, args[0]);
    } else {
      demoAPI(lp);
    }
  }

  public static void demoDP(LexicalizedParser lp, String filename) {
    // This option shows loading and sentence-segment and tokenizing
    // a file using DocumentPreprocessor
    TreebankLanguagePack tlp = new PennTreebankLanguagePack();
    GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
    // You could also create a tokenier here (as below) and pass it
    // to DocumentPreprocessor
    for (List<HasWord> sentence : new DocumentPreprocessor(filename)) {
      Tree parse = lp.apply(sentence);
      parse.pennPrint();
      System.out.println();

      GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);
      Collection tdl = gs.typedDependenciesCCprocessed(true);
      System.out.println(tdl);
      System.out.println();
    }
  }

  public static void demoAPI(LexicalizedParser lp) {
    // This option shows parsing a list of correctly tokenized words
    String sent[] = { "我", "是", "一名", "学生" };
    List<CoreLabel> rawWords = Sentence.toCoreLabelList(sent);
    Tree parse = lp.apply(rawWords);
    parse.pennPrint();
    System.out.println();

    TreebankLanguagePack tlp = new PennTreebankLanguagePack();
    GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
    GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);
    List<TypedDependency> tdl = gs.typedDependenciesCCprocessed();
    System.out.println(tdl);
    System.out.println();

    TreePrint tp = new TreePrint("penn,typedDependenciesCollapsed");
    tp.printTree(parse);
  }

  private ParserDemo() {} // static methods only
}

Básicamente es lo mismo que ParserDemo.java, pero cuando lo ejecuto obtengo el siguiente resultado:

Cargando el analizador desde el archivo serializado edu / stanford / nlp / models / lexparser / chinesePCFG.ser.gz ... hecho [2.2 segundos]. (ROOT (IP (NP (PN 我)) (VP (VC 是) (NP (QP (CD 一名)) (NP (NN 学生))))))

Excepción en el hilo "main" java.lang.RuntimeException: no se pudo invocar public edu.stanford.nlp.trees.EnglishGrammaticalStructure (edu.stanford.nlp.trees.Tree) en edu.stanford.nlp.trees.GrammaticalStructureFactory.newGrammaticalStructure (GrammaticalStructure (GrammaticalStructure (GrammaticalStructure) .java: 104) en parserdemo.ParserDemo.demoAPI (ParserDemo.java:65) en parserdemo.ParserDemo.main (ParserDemo.java:23)

El código en la línea 65 es:

 GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);

Supongo que ChinesePCFG.ser.gz pierde algo relevante para 'edu.stanford.nlp.trees.EnglishGrammaticalStructure'. Dado que el analizador analiza el chino correctamente a través de líneas de comando, debe haber algo mal con mi propio código. He estado buscando, solo para encontrar algunos casos similares, algunos de los cuales mencionaron el uso del modelo correcto, pero realmente no sé cómo modificar el código al 'modelo correcto'. Espero que alguien pueda ayudarme con eso. Soy un novato en Java y Stanford Parser, así que sea específico. ¡Gracias!

Respuesta 1

Estoy usando un patrón Builder para crear objetos Item en mi juego, y quiero poder usar prefijos y sufijos de ítems para generar ítems aleatorios, como en Item.builder (). Random (). Build (). Prefijo y ...

Teóricamente, en general: la capa de acceso a datos contiene conexiones de base de datos y consultas. La capa empresarial contiene el modelo y la lógica. La capa de servicio contiene los principales servicios de los servicios de la aplicación. ...

Quiero crear un salto de mi reproductor que sea suave, suba, luego baje, es un desplazamiento lateral en 2D como Mario. Intenté esperar y hacer saltos lentos usando muchos pasos y no puedo entenderlo ...

Estoy trabajando en una aplicación Java que realiza numerosas consultas JDBC a una base de datos, cada una especificada en un método separado con aproximadamente el siguiente formato. public static void sampleJDBCQuery (Cadena ...