Estoy buscando un lemmatisation implementación de inglés en Java. He encontrado unos cuantos ya, pero necesito algo que no necesita mucho de memoria (1 GB superior).
Gracias. No necesito un lematizador.

  • ¿Necesita cierto lematización (generalmente requiere de un tamaño decente lista de palabras), o es un lematizador como Porter, bola de nieve, o Paice-Cáscara suficientemente bueno?
  • ¿Sabes de algún verdadero lematización (lista de palabras)? Necesito si es que hay alguno.
  • La mejor palabra en inglés de la lista que he encontrado es el desarrollado por los jugadores de el juego de palabras Scrabble, OWL2. Por desgracia, no es «abierto». Que, en conjunción con algo como WordNet, podría servir como la base para un buen lemmatizer. Pero yo no conozco a nadie que haya hecho.
  • Esta pregunta parece ser off-topic porque es parte del software de recomendaciones.
InformationsquelleAutor Ilija | 2009-10-16

5 Comentarios

  1. 35

    La Stanford CoreNLP biblioteca de Java contiene una lemmatizer que es un poco intensivo en recursos, pero he corrido en mi portátil con <512 mb de RAM.

    A utilizar:

    1. Descargar los archivos jar;
    2. Crear un nuevo proyecto en el editor de elección/hacer una hormiga secuencia de comandos que incluye todos los archivos jar contenidos en el archivo que acaba de descargar;
    3. Crear un nuevo Java como se muestra a continuación (con base en el fragmento de la universidad de Stanford del sitio);
    import java.util.Properties;
    
    public class StanfordLemmatizer {
    
        protected StanfordCoreNLP pipeline;
    
        public StanfordLemmatizer() {
            //Create StanfordCoreNLP object properties, with POS tagging
            //(required for lemmatization), and lemmatization
            Properties props;
            props = new Properties();
            props.put("annotators", "tokenize, ssplit, pos, lemma");
    
            //StanfordCoreNLP loads a lot of models, so you probably
            //only want to do this once per execution
            this.pipeline = new StanfordCoreNLP(props);
        }
    
        public List<String> lemmatize(String documentText)
        {
            List<String> lemmas = new LinkedList<String>();
    
            //create an empty Annotation just with the given text
            Annotation document = new Annotation(documentText);
    
            //run all Annotators on this text
            this.pipeline.annotate(document);
    
            //Iterate over all of the sentences found
            List<CoreMap> sentences = document.get(SentencesAnnotation.class);
            for(CoreMap sentence: sentences) {
                //Iterate over all tokens in a sentence
                for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
                    //Retrieve and add the lemma for each word into the list of lemmas
                    lemmas.add(token.get(LemmaAnnotation.class));
                }
            }
    
            return lemmas;
        }
    }
    • hay un tutorial ? la documentación que se ve bastante confuso !
    • Me estoy poniendo esta excepción cuando ejecuto este código: Excepción en el thread «main» java.lang.NoSuchMethodError: edu.stanford.la pnl.util.Los medicamentos genéricos.newHashMap()Ljava/util/Mapa; en edu.stanford.la pnl.pipeline.AnnotatorPool.<init>(AnnotatorPool.java:27) en edu.stanford.la pnl.pipeline.StanfordCoreNLP.getDefaultAnnotatorPool(StanfordCoreNLP.java:306) en edu.stanford.la pnl.pipeline.StanfordCoreNLP.construcción(StanfordCoreNLP.java:250) en edu.stanford.la pnl.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:127) en edu.stanford.la pnl.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:123) ….. Alguna idea?
    • El javadoc es aquí www-nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/… y este ejemplo de código es más fácil de entender – sw.deri.org/2008/11/match/aroma/src/utils/… Sólo utilice el método de instancia de la Morfología#lema
    • La salida está libre de cualquier TPV etiquetas. ¿Cuál es el sentido de etiquetado POS si no puedo acceder a la clase de el símbolo/palabra? O hay una manera con este ejemplo, para obtener el _NN, _JJ, etc. de la información?
    • ¿Cómo funciona esto en una sola palabra?
    • Muchas gracias esto es tan bueno!

  2. 17

    De Chris respuesta sobre el Standford Lemmatizer es genial!!! Absolutamente hermoso. Él incluso incluye un puntero a los archivos jar, así que no tiene a google.

    Pero una de sus líneas de código que había un error de sintaxis (que de alguna manera cambió el final de cierre de paréntesis y el punto y coma en la línea que comienza con «lemas.añadir…), y se le olvidó incluir las importaciones.

    Tan lejos como el NoSuchMethodError error, es generalmente causada por la que el método no se hizo pública estática, pero si nos fijamos en el código en sí mismo (en http://grepcode.com/file/repo1.maven.org/maven2/com.guokr/stan-cn-nlp/0.0.2/edu/stanford/nlp/util/Generics.java?av=h) que no es el problema. Sospecho que el problema está en algún lugar en la construcción de camino (estoy usando Eclipse Kepler, así que no fue problema de la configuración de los 33 archivos jar que yo uso en mi proyecto).

    A continuación es mi pequeña corrección de Chris del código, junto con un ejemplo (mis disculpas a Evanescence para imponer perfecta letra):

    import java.util.LinkedList;
    import java.util.List;
    import java.util.Properties;
    import edu.stanford.nlp.ling.CoreAnnotations.LemmaAnnotation;
    import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation;
    import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;
    import edu.stanford.nlp.ling.CoreLabel;
    import edu.stanford.nlp.pipeline.Annotation;
    import edu.stanford.nlp.pipeline.StanfordCoreNLP;
    import edu.stanford.nlp.util.CoreMap;
    public class StanfordLemmatizer {
    protected StanfordCoreNLP pipeline;
    public StanfordLemmatizer() {
    //Create StanfordCoreNLP object properties, with POS tagging
    //(required for lemmatization), and lemmatization
    Properties props;
    props = new Properties();
    props.put("annotators", "tokenize, ssplit, pos, lemma");
    /*
    * This is a pipeline that takes in a string and returns various analyzed linguistic forms. 
    * The String is tokenized via a tokenizer (such as PTBTokenizerAnnotator), 
    * and then other sequence model style annotation can be used to add things like lemmas, 
    * POS tags, and named entities. These are returned as a list of CoreLabels. 
    * Other analysis components build and store parse trees, dependency graphs, etc. 
    * 
    * This class is designed to apply multiple Annotators to an Annotation. 
    * The idea is that you first build up the pipeline by adding Annotators, 
    * and then you take the objects you wish to annotate and pass them in and 
    * get in return a fully annotated object.
    * 
    *  StanfordCoreNLP loads a lot of models, so you probably
    *  only want to do this once per execution
    */
    this.pipeline = new StanfordCoreNLP(props);
    }
    public List<String> lemmatize(String documentText)
    {
    List<String> lemmas = new LinkedList<String>();
    //Create an empty Annotation just with the given text
    Annotation document = new Annotation(documentText);
    //run all Annotators on this text
    this.pipeline.annotate(document);
    //Iterate over all of the sentences found
    List<CoreMap> sentences = document.get(SentencesAnnotation.class);
    for(CoreMap sentence: sentences) {
    //Iterate over all tokens in a sentence
    for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
    //Retrieve and add the lemma for each word into the
    //list of lemmas
    lemmas.add(token.get(LemmaAnnotation.class));
    }
    }
    return lemmas;
    }
    public static void main(String[] args) {
    System.out.println("Starting Stanford Lemmatizer");
    String text = "How could you be seeing into my eyes like open doors? \n"+
    "You led me down into my core where I've became so numb \n"+
    "Without a soul my spirit's sleeping somewhere cold \n"+
    "Until you find it there and led it back home \n"+
    "You woke me up inside \n"+
    "Called my name and saved me from the dark \n"+
    "You have bidden my blood and it ran \n"+
    "Before I would become undone \n"+
    "You saved me from the nothing I've almost become \n"+
    "You were bringing me to life \n"+
    "Now that I knew what I'm without \n"+
    "You can've just left me \n"+
    "You breathed into me and made me real \n"+
    "Frozen inside without your touch \n"+
    "Without your love, darling \n"+
    "Only you are the life among the dead \n"+
    "I've been living a lie, there's nothing inside \n"+
    "You were bringing me to life.";
    StanfordLemmatizer slem = new StanfordLemmatizer();
    System.out.println(slem.lemmatize(text));
    }
    }

    Aquí está mi resultado (yo estaba muy impresionado; captó «‘s» como «es» (a veces), y lo hizo casi todo lo demás a la perfección):

    A Partir De Stanford Lemmatizer

    Añadir el comentarista acortar

    Añadir el comentarista ssplit

    Añadir el comentarista pos

    Lectura POS tagger modelo de edu/stanford/pnl/modelos/pos-tagger/inglés-left3words/inglés-left3words-distsim.tagger … hecho [1.7 seg].

    Añadir el comentarista lema

    [cómo, podría, usted, ser, ver, en, mi, ojo, como, abrir la puerta, ?, usted, plomo, I, a, abajo, a, mi, núcleo, donde, yo, han venido a ser, así, dormida, sin una, alma, mi espíritu, ‘s, sueño, en algún lugar, fría, hasta que, usted, encontrar, no, no, y, de plomo, que, de vuelta, en casa, usted, wake me up, en el interior, llame a mi nombre, y, guardar, I, a, de, la, oscuro, que, tiene, oferta, a mi, la sangre, y, ella, corre, antes de que, yo, iba a convertirse, deshacer, usted, guardar, I, a, de, la, la nada, que se yo, tiene, casi, ser, que, ser, traer, I, a, de la vida, ahora, que, quiero, saber, lo que, yo, ser, sin, usted, puede, tener, sólo, salir, yo, usted, a respirar, a, I, y, hacer, puedo, real, congelados, en el interior, sin, ti, toque, sin, ti, amor, ,, darling, sólo, te, se, la, vida, entre, los, muertos, yo, tener, ser, vivir,, mentira, ,, no, ser, nada, adentro, te, se, traer, I, a, de la vida .]

  3. 0

    Usted puede probar el libre Lemmatizer API aquí: http://twinword.com/lemmatizer.php

    Desplácese hacia abajo para encontrar la Lemmatizer extremo.

    Esto le permitirá obtener «perros» a «perro», «habilidades» a «capacidad».

    Si pasa en un POST o GET parámetro que se llama «texto» con una cadena como «caminó plantas»:

    //These code snippets use an open-source library. http://unirest.io/java
    HttpResponse<JsonNode> response = Unirest.post("[ENDPOINT URL]")
    .header("X-Mashape-Key", "[API KEY]")
    .header("Content-Type", "application/x-www-form-urlencoded")
    .header("Accept", "application/json")
    .field("text", "walked plants")
    .asJson();

    De obtener una respuesta como esta:

    {
    "lemma": {
    "plant": 1,
    "walk": 1
    },
    "result_code": "200",
    "result_msg": "Success"
    }
    • Mientras que este vínculo puede responder a la pregunta, es mejor incluir a las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Enlace-sólo respuestas puede ser válido si la página enlazada cambios.
    • Gracias por la sugerencia. He incluido la documentación sobre cómo utilizarlo.
  4. -1

    Hay un JNI para hunspell, que es el corrector se utiliza en open office y FireFox.
    http://hunspell.sourceforge.net/

    • Es un corrector ortográfico, no lemmatizer.
    • No es sólo un corrector ortográfico, se puede utilizar para la lematización. En la nueva versión de Lucene también podemos encontrar un hunspell filtro.

Dejar respuesta

Please enter your comment!
Please enter your name here