Java Stanford NLP: część etykiet mowy?

172

Stanford NLP, demo'd tutaj , daje moc takiego:

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

Co oznaczają tagi Część mowy? Nie mogę znaleźć oficjalnej listy. Czy to własny system Stanforda, czy też używają uniwersalnych tagów? (Co to jest JJna przykład?)

Ponadto, gdy przeglądam zdania, szukając na przykład rzeczowników, w końcu robię coś takiego, jak sprawdzanie, czy tag .contains('N'). To wydaje się dość słabe. Czy istnieje lepszy sposób na programowe wyszukiwanie określonej części mowy?

Nick Heiner
źródło
To może być grabieżka, ale powinieneś używać .starts_with('N')raczej niż contains, ponieważ „IN” i „VBN” również zawierają „N”. I to jest prawdopodobnie najlepszy sposób na znalezienie słów, które zdaniem taggera są rzeczownikami.
Joseph

Odpowiedzi:

276

Projekt Penn Treebank . Spójrz na tagowanie części mowy ps.

JJ to przymiotnik. NNS to rzeczownik, liczba mnoga. VBP jest czasownikiem teraźniejszym. RB to przysłówek.

To dla angielskiego. Dla Chińczyków jest to chiński Treebank Penn. A dla niemieckiego jest to korpus NEGRA.

  1. CC koniunkcja koordynacyjna
  2. Numer kardynalny CD
  3. DT Determiner
  4. Egzystencjalny tam
  5. FW Słowo obce
  6. IN Przyimek lub koniunkcja podrzędna
  7. JJ Przymiotnik
  8. JJR Przymiotnik porównawczy
  9. JJS Przymiotnik, stopień najwyższy
  10. Znacznik pozycji listy LS
  11. MD Modal
  12. Rzeczownik Rzeczownik w liczbie pojedynczej lub masy
  13. NNS Rzeczownik w liczbie mnogiej
  14. NNP Rzeczownik w liczbie pojedynczej
  15. NNPS Rzeczownik własny w liczbie mnogiej
  16. PDT Predeterminer
  17. POS posiadające zakończenie
  18. PRP Zaimek osobowy
  19. PRP $ Zaimek dzierżawczy
  20. RB Przysłówek
  21. RBR Przysłówek, porównawczy
  22. RBS przysłówek, stopień najwyższy
  23. Cząstka RP
  24. Symbol SYM
  25. TO do
  26. UH wykrzyknik
  27. VB Czasownik, forma podstawowa
  28. VBD Verb, czas przeszły
  29. VBG Czasownik, odczasownik lub imiesłów teraźniejszy
  30. VBN Czasownik, imiesłów bierny
  31. VBP Czasownik, liczba pojedyncza osoby innej niż trzecia
  32. VBZ Verb, 3. osoba liczby pojedynczej obecny
  33. WDT Whdeterminer
  34. WP Whpronoun
  35. WP $ Zaborcze whpronoun
  36. WRB Whadverb
anno
źródło
Moja sugestia zmiany w celu usunięcia braków w tej odpowiedzi została odrzucona. Dlatego proszę również zapoznać się z moją zamieszczoną poniżej odpowiedzią, która zawiera pewne informacje, których brakuje w tej odpowiedzi.
Jules,
3
Czym dokładnie jest 10. LS?
Devavrata
3
„do” musi być specjalne. dostał swój własny tag
quemeful
4
Naprawdę świetnym odniesieniem do tego jest Lista i wyjaśnienie części znaczników mowy Erwina R. Komena . Interesujące mogą być również badania Komen w języku angielskim i strona główna Komen, erwinkomen.ruhosting.nl
CoolHandLouis
1
Czy tagi używane w Stanford POS Tagger i Penn Tree Bank są takie same?
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
źródło
2
czy możesz podać źródło?
David Portabella
a co ze znakami interpunkcyjnymi? na przykład ',' token pobiera PoS ','. czy istnieje lista zawierająca te dokumenty PoS?
David Portabella
A co z PoS „-LRB-” dla tokena '('?
David Portabella
34

W zaakceptowanej powyżej odpowiedzi brakuje następujących informacji:

Istnieje również 9 zdefiniowanych znaczników interpunkcyjnych (które nie są wymienione w niektórych odniesieniach, patrz tutaj ). To są:

  1. #
  2. $
  3. '' (używane we wszystkich formach cudzysłowu zamykającego)
  4. ((używane we wszystkich formach nawiasów otwierających)
  5. ) (używane we wszystkich formach nawiasów zamykających)
  6. ,
  7. . (używane dla wszystkich znaków interpunkcyjnych kończących zdanie)
  8. : (używane dla dwukropków, średników i elips)
  9. `` (używane we wszystkich formach cytatu otwierającego)
Jules
źródło
17

Oto bardziej kompletna lista tagów dla Penn Treebank (zamieszczona tutaj ze względu na kompletność):

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

Zawiera również znaczniki dla poziomów klauzul i fraz.

Poziom klauzuli

- S
- SBAR
- SBARQ
- SINV
- SQ

Poziom frazy

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

(opisy w linku)

Iulius Curt
źródło
2
Wiesz co? To jest prawdziwa lista, której ludzie potrzebują! Nie tylko znaczniki POS Penn Treebank, bo to tylko słowa
windweller
Czy mógłbyś dodać opisy obok skrótów?
Petrus Theron
12

Na wypadek, gdybyś chciał to zakodować ...

/**
 * 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
źródło
7

Podaję tutaj całą listę, a także podam link referencyjny

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

Możesz znaleźć pełną listę tagów części mowy tutaj .

Sri
źródło
4

Jeśli chodzi o drugie pytanie dotyczące znalezienia określonego słowa / fragmentu z tagiem POS (np. Rzeczownika), oto przykładowy kod, który możesz śledzić.

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

Wynik to:

Input: Colorless green ideas sleep furiously.
Output: [ideas]
Spodnie Ashok Kumar
źródło
2

Wydają się być tagami Brown Corpus .

Jonathan Feinberg
źródło
14
Nie, są to tagi POS Penn English Treebank, które są uproszczeniem zestawu tagów Brown Corpus.
Christopher Manning
Jesteś pewny? Cytowany powyżej przykład zawiera tag „.” który jest zdefiniowany w Brown Corpus, ale nie jest zdefiniowany na powyższej liście znaczników Penn Treebank, więc wydaje się dość pewne, że przynajmniej odpowiedź nie jest tak prosta, jak tylko znaczniki Penn Treebank.
Jules
Po przeprowadzeniu dodatkowych badań wydaje się, że to tagi Penn Treebank, ale przytoczona powyżej dokumentacja dotycząca takich tagów jest niekompletna: tagi Penn Treebank zawierają również 9 tagów ze znakami interpunkcyjnymi, które zostały pominięte na liście w zaakceptowanej odpowiedzi. Zobacz moją dodatkową odpowiedź, aby uzyskać więcej informacji.
Jules
2

Stanford CoreNLP Tagi dla innych języków: francuski, hiszpański, niemiecki ...

Widzę, że używasz parsera dla języka angielskiego, który jest modelem domyślnym. Możesz użyć parsera dla innych języków (francuski, hiszpański, niemiecki ...) i pamiętaj, że zarówno tokenizery, jak i część tagatorów mowy są różne dla każdego języka. Jeśli chcesz to zrobić, musisz pobrać konkretny model dla języka (używając na przykład kreatora, takiego jak Maven), a następnie ustawić model, którego chcesz użyć. Tutaj masz więcej informacji na ten temat.

Oto listy tagów dla różnych języków:

  1. Tagi POS Stanford CoreNLP dla języka hiszpańskiego
  2. Stanford CoreNLP POS Tagger dla języka niemieckiego używa zestawu tagów Stuttgart-Tübingen (STTS)
  3. Stanford CoreNLP POS tagger dla języka francuskiego używa następujących tagów:

TAGI DLA FRANCUSKA:

Część tagów mowy dla języka francuskiego

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)

Kategorie frazowe Tagi dla francuskiego:

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)

Funkcje składniowe dla języka francuskiego:

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
źródło
@AMArostegui: Dziękuję za podpowiedź. Udostępnij link, w którym wyraźnie zaznaczono, że w języku hiszpańskim używane są zależności Universal. Link dotyczy UD, ale nie ma żadnej wskazówki, że są one faktycznie używane w języku hiszpańskim w Stanfoird Core NLP, a oficjalna dokumentacja Stanford również o tym nie wspomina.
Catalina Chircu
0

W kosmosie było to bardzo szybkie, myślę, że w zwykłym notebooku z niższej półki będzie działać tak:

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

Wynik w kilku próbach:

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

Więc myślę, że nie musisz się martwić o zapętlenie każdego sprawdzenia tagu POS :)

Więcej ulepszeń otrzymałem po wyłączeniu niektórych potoków:

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

Tak więc wynik jest szybszy:

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
źródło