Java Stanford PNL: ¿Parte de las etiquetas de voz?

172

La PNL de Stanford, que se muestra aquí , ofrece una salida como esta:

Colorless/JJ green/JJ ideas/NNS sleep/VBP furiously/RB ./.

¿Qué significan las etiquetas Parte de discurso? No puedo encontrar una lista oficial. ¿Es el propio sistema de Stanford, o están usando etiquetas universales? (¿Qué es JJ, por ejemplo?)

Además, cuando estoy iterando a través de las oraciones, buscando sustantivos, por ejemplo, termino haciendo algo como verificar para ver si la etiqueta .contains('N'). Esto se siente bastante débil. ¿Hay una mejor manera de buscar mediante programación una determinada parte del discurso?

Nick Heiner
fuente
Esto puede ser un problema, pero debe usarlo en .starts_with('N')lugar de hacerlo contains, ya que 'IN' y 'VBN' también contienen 'N'. Y esa es probablemente la mejor manera de encontrar qué palabras piensa el etiquetador como sustantivos.
Joseph

Respuestas:

276

El Proyecto Penn Treebank . Mira el etiquetado de la parte del discurso ps.

JJ es adjetivo. NNS es sustantivo, plural. VBP es el tiempo presente verbal. RB es adverbio.

Eso es para ingles. Para los chinos, es el Penn Chinese Treebank. Y para el alemán es el corpus NEGRA.

  1. Conjunción de coordinación CC
  2. CD número cardinal
  3. DT Determiner
  4. EX existencial allí
  5. FW Palabra extranjera
  6. IN Preposición o conjunción subordinada
  7. JJ Adjetivo
  8. JJR Adjetivo, comparativo
  9. JJS Adjetivo, superlativo
  10. Marcador de elemento de lista LS
  11. MD modal
  12. NN Sustantivo, singular o masivo
  13. NNS Sustantivo, plural
  14. NNP Nombre propio, singular
  15. NNPS Nombre propio, plural
  16. PDT Predeterminer
  17. POS Posesivo final
  18. PRP Pronombre personal
  19. PRP $ Pronombre posesivo
  20. RB Adverb
  21. Adverbio RBR, comparativo
  22. Adverbio RBS, superlativo
  23. Partícula RP
  24. SYM Symbol
  25. A
  26. UH interjección
  27. Verbo VB, forma base
  28. VBD Verbo, tiempo pasado
  29. VBG Verbo, gerundio o participio presente
  30. VBN Verbo, participio pasado
  31. Verbo VBP, presente no singular de tercera persona
  32. Verbo VBZ, tercera persona singular presente
  33. WDT Whdeterminer
  34. WP Whpronoun
  35. WP $ Possessive whpronoun
  36. WRB Whadverb
anno
fuente
Mi sugerencia de una edición para corregir una deficiencia en esta respuesta fue rechazada. Por lo tanto, vea también mi respuesta publicada a continuación, que contiene información que falta en esta respuesta.
Jules
3
¿Qué es exactamente el 10º LS?
Devavrata
3
"to" debe ser especial. tiene su propia etiqueta
2015
44
Una gran referencia a esto es la lista de Erwin R. Komen y la explicación de las etiquetas de partes del discurso . También puede interesar Komen's Research en inglés y la página de inicio de Komen, erwinkomen.ruhosting.nl
CoolHandLouis
1
¿Son iguales las etiquetas utilizadas en Stanford POS Tagger y Penn Tree bank?
gokul_uf
113
Explanation of each tag from the documentation :

CC: conjunction, coordinating
    & 'n and both but either et for less minus neither nor or plus so
    therefore times v. versus vs. whether yet
CD: numeral, cardinal
    mid-1890 nine-thirty forty-two one-tenth ten million 0.5 one forty-
    seven 1987 twenty '79 zero two 78-degrees eighty-four IX '60s .025
    fifteen 271,124 dozen quintillion DM2,000 ...
DT: determiner
    all an another any both del each either every half la many much nary
    neither no some such that the them these this those
EX: existential there
    there
FW: foreign word
    gemeinschaft hund ich jeux habeas Haementeria Herr K'ang-si vous
    lutihaw alai je jour objets salutaris fille quibusdam pas trop Monte
    terram fiche oui corporis ...
IN: preposition or conjunction, subordinating
    astride among uppon whether out inside pro despite on by throughout
    below within for towards near behind atop around if like until below
    next into if beside ...
JJ: adjective or numeral, ordinal
    third ill-mannered pre-war regrettable oiled calamitous first separable
    ectoplasmic battery-powered participatory fourth still-to-be-named
    multilingual multi-disciplinary ...
JJR: adjective, comparative
    bleaker braver breezier briefer brighter brisker broader bumper busier
    calmer cheaper choosier cleaner clearer closer colder commoner costlier
    cozier creamier crunchier cuter ...
JJS: adjective, superlative
    calmest cheapest choicest classiest cleanest clearest closest commonest
    corniest costliest crassest creepiest crudest cutest darkest deadliest
    dearest deepest densest dinkiest ...
LS: list item marker
    A A. B B. C C. D E F First G H I J K One SP-44001 SP-44002 SP-44005
    SP-44007 Second Third Three Two * a b c d first five four one six three
    two
MD: modal auxiliary
    can cannot could couldn't dare may might must need ought shall should
    shouldn't will would
NN: noun, common, singular or mass
    common-carrier cabbage knuckle-duster Casino afghan shed thermostat
    investment slide humour falloff slick wind hyena override subhumanity
    machinist ...
NNS: noun, common, plural
    undergraduates scotches bric-a-brac products bodyguards facets coasts
    divestitures storehouses designs clubs fragrances averages
    subjectivists apprehensions muses factory-jobs ...
NNP: noun, proper, singular
    Motown Venneboerger Czestochwa Ranzer Conchita Trumplane Christos
    Oceanside Escobar Kreisler Sawyer Cougar Yvette Ervin ODI Darryl CTCA
    Shannon A.K.C. Meltex Liverpool ...
NNPS: noun, proper, plural
    Americans Americas Amharas Amityvilles Amusements Anarcho-Syndicalists
    Andalusians Andes Andruses Angels Animals Anthony Antilles Antiques
    Apache Apaches Apocrypha ...
PDT: pre-determiner
    all both half many quite such sure this
POS: genitive marker
    ' 's
PRP: pronoun, personal
    hers herself him himself hisself it itself me myself one oneself ours
    ourselves ownself self she thee theirs them themselves they thou thy us
PRP$: pronoun, possessive
    her his mine my our ours their thy your
RB: adverb
    occasionally unabatingly maddeningly adventurously professedly
    stirringly prominently technologically magisterially predominately
    swiftly fiscally pitilessly ...
RBR: adverb, comparative
    further gloomier grander graver greater grimmer harder harsher
    healthier heavier higher however larger later leaner lengthier less-
    perfectly lesser lonelier longer louder lower more ...
RBS: adverb, superlative
    best biggest bluntest earliest farthest first furthest hardest
    heartiest highest largest least less most nearest second tightest worst
RP: particle
    aboard about across along apart around aside at away back before behind
    by crop down ever fast for forth from go high i.e. in into just later
    low more off on open out over per pie raising start teeth that through
    under unto up up-pp upon whole with you
SYM: symbol
    % & ' '' ''. ) ). * + ,. < = > @ A[fj] U.S U.S.S.R * ** ***
TO: "to" as preposition or infinitive marker
    to
UH: interjection
    Goodbye Goody Gosh Wow Jeepers Jee-sus Hubba Hey Kee-reist Oops amen
    huh howdy uh dammit whammo shucks heck anyways whodunnit honey golly
    man baby diddle hush sonuvabitch ...
VB: verb, base form
    ask assemble assess assign assume atone attention avoid bake balkanize
    bank begin behold believe bend benefit bevel beware bless boil bomb
    boost brace break bring broil brush build ...
VBD: verb, past tense
    dipped pleaded swiped regummed soaked tidied convened halted registered
    cushioned exacted snubbed strode aimed adopted belied figgered
    speculated wore appreciated contemplated ...
VBG: verb, present participle or gerund
    telegraphing stirring focusing angering judging stalling lactating
    hankerin' alleging veering capping approaching traveling besieging
    encrypting interrupting erasing wincing ...
VBN: verb, past participle
    multihulled dilapidated aerosolized chaired languished panelized used
    experimented flourished imitated reunifed factored condensed sheared
    unsettled primed dubbed desired ...
VBP: verb, present tense, not 3rd person singular
    predominate wrap resort sue twist spill cure lengthen brush terminate
    appear tend stray glisten obtain comprise detest tease attract
    emphasize mold postpone sever return wag ...
VBZ: verb, present tense, 3rd person singular
    bases reconstructs marks mixes displeases seals carps weaves snatches
    slumps stretches authorizes smolders pictures emerges stockpiles
    seduces fizzes uses bolsters slaps speaks pleads ...
WDT: WH-determiner
    that what whatever which whichever
WP: WH-pronoun
    that what whatever whatsoever which who whom whosoever
WP$: WH-pronoun, possessive
    whose
WRB: Wh-adverb
    how however whence whenever where whereby whereever wherein whereof why
vaichidrewar
fuente
2
¿Puedes por favor citar la fuente?
David Portabella
¿Qué pasa con las puntuaciones? por ejemplo, un token ',' obtiene el PoS ','. ¿Hay una lista que incluya estos PoS?
David Portabella
¿Qué pasa con el PoS "-LRB-" para el token '('?
David Portabella
34

A la respuesta aceptada anterior le falta la siguiente información:

También hay 9 etiquetas de puntuación definidas (que no se enumeran en algunas referencias, consulte aquí ). Estos son:

  1. # #
  2. PS
  3. '' (utilizado para todas las formas de cotización de cierre)
  4. ((utilizado para todas las formas de paréntesis de apertura)
  5. ) (utilizado para todas las formas de paréntesis de cierre)
  6. ,
  7. . (utilizado para todos los signos de puntuación que terminan la oración)
  8. : (usado para dos puntos, punto y coma y elipses)
  9. `` (utilizado para todas las formas de cotización de apertura)
Jules
fuente
17

Aquí hay una lista más completa de etiquetas para el Penn Treebank (publicado aquí en aras de la completitud):

http://www.surdeanu.info/mihai/teaching/ista555-fall13/readings/PennTreebankConstituents.html

También incluye etiquetas para cláusula y niveles de frase.

Nivel de cláusula

- S
- SBAR
- SBARQ
- SINV
- SQ

Nivel de frase

- ADJP
- ADVP
- CONJP
- FRAG
- INTJ
- LST
- NAC
- NP
- NX
- PP
- PRN
- PRT
- QP
- RRC
- UCP
- VP
- WHADJP
- WHAVP
- WHNP
- WHPP
- X

(descripciones en el enlace)

Iulius Curt
fuente
2
¿Sabes que? ¡Esta es la verdadera lista que la gente necesita! No solo las etiquetas POS de Penn Treebank porque son solo para palabras
windweller
¿Podría agregar las descripciones al lado de las abreviaturas?
Petrus Theron
12

En caso de que quisieras codificarlo ...

/**
 * Represents the English parts-of-speech, encoded using the
 * de facto <a href="http://www.cis.upenn.edu/~treebank/">Penn Treebank
 * Project</a> standard.
 * 
 * @see <a href="ftp://ftp.cis.upenn.edu/pub/treebank/doc/tagguide.ps.gz">Penn Treebank Specification</a>
 */
public enum PartOfSpeech {
  ADJECTIVE( "JJ" ),
  ADJECTIVE_COMPARATIVE( ADJECTIVE + "R" ),
  ADJECTIVE_SUPERLATIVE( ADJECTIVE + "S" ),

  /* This category includes most words that end in -ly as well as degree
   * words like quite, too and very, posthead modi ers like enough and
   * indeed (as in good enough, very well indeed), and negative markers like
   * not, n't and never.
   */
  ADVERB( "RB" ),

  /* Adverbs with the comparative ending -er but without a strictly comparative
   * meaning, like <i>later</i> in <i>We can always come by later</i>, should
   * simply be tagged as RB.
   */
  ADVERB_COMPARATIVE( ADVERB + "R" ),
  ADVERB_SUPERLATIVE( ADVERB + "S" ),

  /* This category includes how, where, why, etc.
   */
  ADVERB_WH( "W" + ADVERB ),

  /* This category includes and, but, nor, or, yet (as in Y et it's cheap,
   * cheap yet good), as well as the mathematical operators plus, minus, less,
   * times (in the sense of "multiplied by") and over (in the sense of "divided
   * by"), when they are spelled out. <i>For</i> in the sense of "because" is
   * a coordinating conjunction (CC) rather than a subordinating conjunction.
   */
  CONJUNCTION_COORDINATING( "CC" ),
  CONJUNCTION_SUBORDINATING( "IN" ),
  CARDINAL_NUMBER( "CD" ),
  DETERMINER( "DT" ),

  /* This category includes which, as well as that when it is used as a
   * relative pronoun.
   */
  DETERMINER_WH( "W" + DETERMINER ),
  EXISTENTIAL_THERE( "EX" ),
  FOREIGN_WORD( "FW" ),

  LIST_ITEM_MARKER( "LS" ),

  NOUN( "NN" ),
  NOUN_PLURAL( NOUN + "S" ),
  NOUN_PROPER_SINGULAR( NOUN + "P" ),
  NOUN_PROPER_PLURAL( NOUN + "PS" ),

  PREDETERMINER( "PDT" ),
  POSSESSIVE_ENDING( "POS" ),

  PRONOUN_PERSONAL( "PRP" ),
  PRONOUN_POSSESSIVE( "PRP$" ),

  /* This category includes the wh-word whose.
   */
  PRONOUN_POSSESSIVE_WH( "WP$" ),

  /* This category includes what, who and whom.
   */
  PRONOUN_WH( "WP" ),

  PARTICLE( "RP" ),

  /* This tag should be used for mathematical, scientific and technical symbols
   * or expressions that aren't English words. It should not used for any and
   * all technical expressions. For instance, the names of chemicals, units of
   * measurements (including abbreviations thereof) and the like should be
   * tagged as nouns.
   */
  SYMBOL( "SYM" ),
  TO( "TO" ),

  /* This category includes my (as in M y, what a gorgeous day), oh, please,
   * see (as in See, it's like this), uh, well and yes, among others.
   */
  INTERJECTION( "UH" ),

  VERB( "VB" ),
  VERB_PAST_TENSE( VERB + "D" ),
  VERB_PARTICIPLE_PRESENT( VERB + "G" ),
  VERB_PARTICIPLE_PAST( VERB + "N" ),
  VERB_SINGULAR_PRESENT_NONTHIRD_PERSON( VERB + "P" ),
  VERB_SINGULAR_PRESENT_THIRD_PERSON( VERB + "Z" ),

  /* This category includes all verbs that don't take an -s ending in the
   * third person singular present: can, could, (dare), may, might, must,
   * ought, shall, should, will, would.
   */
  VERB_MODAL( "MD" ),

  /* Stanford.
   */
  SENTENCE_TERMINATOR( "." );

  private final String tag;

  private PartOfSpeech( String tag ) {
    this.tag = tag;
  }

  /**
   * Returns the encoding for this part-of-speech.
   * 
   * @return A string representing a Penn Treebank encoding for an English
   * part-of-speech.
   */
  public String toString() {
    return getTag();
  }

  protected String getTag() {
    return this.tag;
  }

  public static PartOfSpeech get( String value ) {
    for( PartOfSpeech v : values() ) {
      if( value.equals( v.getTag() ) ) {
        return v;
      }
    }

    throw new IllegalArgumentException( "Unknown part of speech: '" + value + "'." );
  }
}
Dave Jarvis
fuente
7

Proporciono la lista completa aquí y también doy un enlace de referencia

1.  CC   Coordinating conjunction
2.  CD   Cardinal number
3.  DT   Determiner
4.  EX   Existential there
5.  FW   Foreign word
6.  IN   Preposition or subordinating conjunction
7.  JJ   Adjective
8.  JJR  Adjective, comparative
9.  JJS  Adjective, superlative
10. LS   List item marker
11. MD   Modal
12. NN   Noun, singular or mass
13. NNS  Noun, plural
14. NNP  Proper noun, singular
15. NNPS Proper noun, plural
16. PDT  Predeterminer
17. POS  Possessive ending
18. PRP  Personal pronoun
19. PRP$ Possessive pronoun
20. RB   Adverb
21. RBR  Adverb, comparative
22. RBS  Adverb, superlative
23. RP   Particle
24. SYM  Symbol
25. TO   to
26. UH   Interjection
27. VB   Verb, base form
28. VBD  Verb, past tense
29. VBG  Verb, gerund or present participle
30. VBN  Verb, past participle
31. VBP  Verb, non-3rd person singular present
32. VBZ  Verb, 3rd person singular present
33. WDT  Wh-determiner
34. WP   Wh-pronoun
35. WP$  Possessive wh-pronoun
36. WRB  Wh-adverb

Puede encontrar la lista completa de etiquetas de partes del discurso aquí .

Sri
fuente
4

Con respecto a su segunda pregunta de encontrar una palabra / fragmento etiquetado en un punto de venta (p. Ej., Nombre) particular, aquí está el código de ejemplo que puede seguir.

public static void main(String[] args) {
    Properties properties = new Properties();
    properties.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(properties);

    String input = "Colorless green ideas sleep furiously.";
    Annotation annotation = pipeline.process(input);
    List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class);
    List<String> output = new ArrayList<>();
    String regex = "([{pos:/NN|NNS|NNP/}])"; //Noun
    for (CoreMap sentence : sentences) {
        List<CoreLabel> tokens = sentence.get(CoreAnnotations.TokensAnnotation.class);
        TokenSequencePattern pattern = TokenSequencePattern.compile(regex);
        TokenSequenceMatcher matcher = pattern.getMatcher(tokens);
        while (matcher.find()) {
            output.add(matcher.group());
        }
    }
    System.out.println("Input: "+input);
    System.out.println("Output: "+output);
}

El resultado es:

Input: Colorless green ideas sleep furiously.
Output: [ideas]
Ashok Kumar Pant
fuente
2

Parecen ser etiquetas de Brown Corpus .

Jonathan Feinberg
fuente
14
No, son etiquetas POS de Penn English Treebank, que son una simplificación del conjunto de etiquetas Brown Corpus.
Christopher Manning
¿Estás seguro? El ejemplo citado anteriormente incluye una etiqueta de "." que se define en el Brown Corpus, pero no está definido por la lista de etiquetas de Penn Treebank anterior, por lo que parece bastante seguro que, al menos, la respuesta no es tan simple como son solo las etiquetas de Penn Treebank.
Jules
Después de haber realizado una investigación adicional, parece que son etiquetas de Penn Treebank, pero que la documentación citada anteriormente sobre tales etiquetas está incompleta: las etiquetas de Penn Treebank también incluyen 9 etiquetas de signos de puntuación que se han omitido de la lista en la respuesta aceptada. Vea mi respuesta adicional para más detalles.
Jules
2

Stanford CoreNLP Etiquetas para otros idiomas: francés, español, alemán ...

Veo que usa el analizador para el idioma inglés, que es el modelo predeterminado. Puede utilizar el analizador sintáctico para otros idiomas (francés, español, alemán ...) y, tenga en cuenta que los tokenizadores y parte de los marcadores de voz son diferentes para cada idioma. Si desea hacer eso, debe descargar el modelo específico para el idioma (usando un constructor como Maven, por ejemplo) y luego configurar el modelo que desea usar. Aquí tienes más información sobre eso.

Aquí tienes una lista de etiquetas para diferentes idiomas:

  1. Etiquetas POS de Stanford CoreNLP para español
  2. Stanford CoreNLP POS Tagger para alemán utiliza el conjunto de etiquetas Stuttgart-Tübingen (STTS)
  3. El etiquetador Stanford CoreNLP POS para francés utiliza las siguientes etiquetas:

TAGS PARA FRANCÉS:

Parte de las etiquetas de voz para francés

A     (adjective)
Adv   (adverb)
CC    (coordinating conjunction)
Cl    (weak clitic pronoun)
CS    (subordinating conjunction)
D     (determiner)
ET    (foreign word)
I     (interjection)
NC    (common noun)
NP    (proper noun)
P     (preposition)
PREF  (prefix)
PRO   (strong pronoun)
V     (verb)
PONCT (punctuation mark)

Categorías de frases Etiquetas para francés:

AP     (adjectival phrases)
AdP    (adverbial phrases)
COORD  (coordinated phrases)
NP     (noun phrases)
PP     (prepositional phrases)
VN     (verbal nucleus)
VPinf  (infinitive clauses)
VPpart (nonfinite clauses)
SENT   (sentences)
Sint, Srel, Ssub (finite clauses)

Funciones sintácticas para francés:

SUJ    (subject)
OBJ    (direct object)
ATS    (predicative complement of a subject)
ATO    (predicative complement of a direct object)
MOD    (modifier or adjunct)
A-OBJ  (indirect complement introduced by à)
DE-OBJ (indirect complement introduced by de)
P-OBJ  (indirect complement introduced by another preposition)
Catalina Chircu
fuente
@AMArostegui: Gracias por la pista. Comparta un enlace donde se mencione expresamente que las dependencias universales se utilizan para el español. El enlace es para UD, pero no hay indicios de que realmente se usen para español en Stanfoird Core NLP y la documentación oficial de Stanford tampoco lo menciona.
Catalina Chircu
0

Creo que en Spacy fue muy rápido, solo en un portátil de gama baja funcionará así:

import spacy
import time

start = time.time()

with open('d:/dictionary/e-store.txt') as f:
    input = f.read()

word = 0
result = []

nlp = spacy.load("en_core_web_sm")
doc = nlp(input)

for token in doc:
    if token.pos_ == "NOUN":
        result.append(token.text)
    word += 1

elapsed = time.time() - start

print("From", word, "words, there is", len(result), "NOUN found in", elapsed, "seconds")

La salida en varias pruebas:

From 3547 words, there is 913 NOUN found in 7.768507719039917 seconds
From 3547 words, there is 913 NOUN found in 7.408619403839111 seconds
From 3547 words, there is 913 NOUN found in 7.431427955627441 seconds

Por lo tanto, creo que no necesita preocuparse por el bucle de cada verificación de etiqueta POS :)

Más mejoras obtuve cuando se deshabilitó cierta tubería:

nlp = spacy.load("en_core_web_sm", disable = 'ner')

Entonces, el resultado es más rápido:

From 3547 words, there is 913 NOUN found in 6.212834596633911 seconds
From 3547 words, there is 913 NOUN found in 6.257707595825195 seconds
From 3547 words, there is 913 NOUN found in 6.371225833892822 seconds
Syauqi Haris
fuente