PNL Java Stanford: parte delle etichette vocali?


172

La PNL di Stanford, qui dimostrata , fornisce un output come questo:

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

Che cosa significano i tag di Parte del discorso? Non riesco a trovare un elenco ufficiale. È il sistema di Stanford o usano tag universali? (Cos'è JJ, per esempio?)

Inoltre, quando sto ripetendo le frasi alla ricerca di nomi, per esempio, finisco per fare qualcosa come controllare per vedere se il tag .contains('N'). Sembra piuttosto debole. Esiste un modo migliore per cercare programmaticamente una determinata parte del discorso?


Questo può essere un pignolo, ma dovresti usare .starts_with('N')piuttosto che contains, poiché 'IN' e 'VBN' contengono anche 'N'. E questo è probabilmente il modo migliore per trovare quali parole il tagger pensa siano nomi.
Joseph,

Risposte:


276

Il progetto Penn Treebank . Guarda la parte di discorso tagging ps.

JJ è aggettivo. NNS è sostantivo, plurale. VBP è tempo verbale presente. RB è avverbio.

Questo è per l'inglese. Per i cinesi, è la Penn Tree Treebank cinese. E per il tedesco è il corpus NEGRA.

  1. CC Coordinamento congiunto
  2. Numero cardinale CD
  3. Determinatore DT
  4. EX esistenziale lì
  5. FW Parola straniera
  6. IN Preposizione o congiunzione subordinata
  7. JJ aggettivo
  8. JJR aggettivo, comparativo
  9. JJS aggettivo, superlativo
  10. Marcatore voce elenco LS
  11. MD Modal
  12. NN Noun, singolare o di massa
  13. NNS Noun, plurale
  14. NNP Nome proprio, singolare
  15. NNPS Nome proprio, plurale
  16. Predeterminatore PDT
  17. POS Possibile finale
  18. PRP pronome personale
  19. PRP $ pronome possessivo
  20. RB Adverb
  21. RBR Adverb, comparativo
  22. RBS Adverb, superlativo
  23. Particella RP
  24. Simbolo SYM
  25. TO a
  26. Interiezione UH
  27. Verbo VB, forma base
  28. Verbo VBD, passato
  29. Verbo VBG, gerundio o participio presente
  30. Verbo VBN, participio passato
  31. Verbo VBP, presente non singolare di terza persona
  32. Verbo VBZ, presente singolare in terza persona
  33. WDT Whdeterminer
  34. WP Whpronoun
  35. WP $ Whpronoun possessivo
  36. WRB Whadverb

Il mio suggerimento di una modifica per correggere un difetto in questa risposta è stato respinto. Pertanto, vedi anche la mia risposta postata di seguito che contiene alcune informazioni mancanti da questa risposta.
Jules,

3
Che cos'è esattamente la decima LS?
Devavrata,

3
"to" deve essere speciale. ha ottenuto il proprio tag
quemeful

4
Un ottimo riferimento a questo è l' Elenco di Erwin R. Komen e la spiegazione dei tag di parti del discorso . Interessante anche la ricerca di Komen in inglese e la homepage di Komen, erwinkomen.ruhosting.nl
CoolHandLouis,

1
I tag utilizzati in Stanford POS Tagger e Penn Tree bank sono gli stessi?
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

2
puoi per favore citare la fonte?
David Portabella,

che dire delle punteggiatura? per esempio, un token ',' ottiene il PoS ','. c'è un elenco che include questi PoS?
David Portabella,

Che dire del PoS "-LRB-" per il token "("?
David Portabella il

34

Nella risposta accettata sopra mancano le seguenti informazioni:

Sono inoltre definiti 9 tag di punteggiatura (che non sono elencati in alcuni riferimenti, vedere qui ). Questi sono:

  1. #
  2. $
  3. '' (utilizzato per tutte le forme di preventivo di chiusura)
  4. ((usato per tutte le forme di parentesi aperta)
  5. ) (utilizzato per tutte le forme di parentesi chiusa)
  6. ,
  7. . (usato per tutta la punteggiatura che termina la frase)
  8. : (usato per due punti, punto e virgola ed ellissi)
  9. `` (utilizzato per tutte le forme di apertura preventivo)

17

Ecco un elenco più completo di tag per Penn Treebank (pubblicato qui per motivi di completezza):

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

Include anche tag per i livelli di clausole e frasi.

Livello di clausola

- S
- SBAR
- SBARQ
- SINV
- SQ

Livello di frase

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

(descrizioni nel link)


2
Sai cosa? Questa è la vera lista di cui le persone hanno bisogno! Non solo i tag POS Penn Treebank perché quelli sono solo per parole
windweller

Potresti aggiungere le descrizioni accanto alle abbreviazioni?
Petrus Theron,

12

Nel caso in cui volessi 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 + "'." );
  }
}

7

Sto fornendo l'intero elenco qui e anche fornendo link di riferimento

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

Puoi trovare l'intero elenco dei tag Parti del discorso qui .


4

Per quanto riguarda la tua seconda domanda su come trovare una determinata parola / blocco POS (ad esempio, Noun), ecco il codice di esempio che puoi seguire.

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

L'output è:

Input: Colorless green ideas sleep furiously.
Output: [ideas]

2

Sembrano essere tag Brown Corpus .


14
No, sono tag POS Penn English Treebank, che sono una semplificazione del set di tag Brown Corpus.
Christopher Manning,

Sei sicuro? L'esempio sopra citato include un tag di "." che è definito nel Brown Corpus, ma non è definito dall'elenco dei tag Penn Treebank sopra, quindi sembra abbastanza certo che almeno la risposta non sia così semplice come sono solo i tag Penn Treebank.
Jules,

Dopo aver fatto ulteriori ricerche, sembra che siano tag Penn Treebank, ma che la documentazione sopra citata su tali tag sia incompleta: i tag Penn Treebank includono anche 9 segni di punteggiatura che sono stati omessi dall'elenco nella risposta accettata. Vedi la mia risposta aggiuntiva per maggiori dettagli.
Jules,

2

Tag Stanford CoreNLP per altre lingue: francese, spagnolo, tedesco ...

Vedo che usi il parser per la lingua inglese, che è il modello predefinito. È possibile utilizzare il parser per altre lingue (francese, spagnolo, tedesco ...) e, attenzione, sia i tokenizzatori che parte dei tag vocali sono diversi per ciascuna lingua. Se vuoi farlo, devi scaricare il modello specifico per la lingua (usando ad esempio un builder come Maven) e quindi impostare il modello che desideri utilizzare. Qui hai maggiori informazioni a riguardo.

Ecco un elenco di tag per diverse lingue:

  1. Stanford CoreNLP POS Tag per lo spagnolo
  2. Stanford CoreNLP POS Tagger per il tedesco utilizza il Stuttgart-Tübingen Tag Set (STTS)
  3. Il tagger Stanford CoreNLP POS per il francese utilizza i seguenti tag:

TAG PER IL FRANCESE:

Parte dei tag vocali per il francese

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)

Categorie di categorie Tag per il francese:

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)

Funzioni sintattiche per il francese:

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)

@AMArostegui: grazie per il suggerimento. Si prega di condividere un collegamento in cui si dice espressamente che le dipendenze universali sono utilizzate per lo spagnolo. Il collegamento è per l'UD, ma non c'è alcun indizio sul fatto che siano effettivamente utilizzati per lo spagnolo nella Stanfoird Core NLP e la documentazione ufficiale di Stanford non ne parla nemmeno.
Catalina Chircu,

0

A dire il vero è stato molto veloce, penso, in un notebook di fascia bassa funzionerà così:

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

L'output in diverse prove:

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

Quindi, penso che non devi preoccuparti del loop per ogni controllo tag POS :)

Ulteriori miglioramenti ho ottenuto quando disabilitato determinate condotte:

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

Quindi, il risultato è più veloce:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.