OpenNLP Part-of-Speech (POS) Tags: Penn English Treebank

In the comments on my post about part-of-speech tagging, Manu asks

Can you post a legend what the pos tags stand for? At the moment I’m working on a project where I use this and I dont know at the moment how much tags there are and what e.g. “JJ”, “IN” and the rest of them means. This would be very helpful.

Ask and you shall receive!

These are the Penn English Treebank POS tags. Here’s the list that I found in an answer at StackOverflow, but you’re on your own for finding out what each of these really means:

  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


  1. First of all: Thx for sharing this information. Helped me a lot 🙂

    Small addition because I’m working currently with apache open nlp:

    ( ) [ ] { }
    become, in parsed files: -LRB- -RRB- -RSB- -RSB- -LCB- -RCB-
    (The acronyms stand for (Left|Right) (Round|Square|Curly) Bracket.)

    found on


  2. many tanks for you post.

  3. thanks man u saved me a little bit of swearing especially because the website of PEEN is down

  4. Hi, im working with the Spanish tags and they are differents. for example VMI, VSI, PP… Do you know where I can find their meaning please?


  5. Hi,

    Good day! I would like to inquire if you know any templates or sample tool that can create any language of my choice in creating POS tagger? In my case, I already have the tagset of Ilokano Language but I dont know how to make my own POS tagger.

    Thank you.

  6. Hi, i need help. I want to know if how to implement this in Android Studio? Thanks.

  7. Hi,
    i am using POS and getting problem with cardinal number as it is not identifying integer greater than 5 digits can any one help how to deal with it

    String[] tags = tagger.tag(tokens);
    // tag method assigns POS tags to tokens of sentence.
    for (int currentTag = 0; currentTag < tags.length; currentTag++) {
    // System.out.println("tags[currentTag]:" + tags[currentTag]);
    if ((tags[currentTag].equals("NN")
    && tags[currentTag].equals("CD"))) {
    String orderstatusString = tokens[currentTag];
    System.out.println("may i have your Order Staus");


    • I don’t know if this is the problem with 5-digit numbers, but it looks like you have:

      && tags[currentTag].equals("CD")

      and I don’t think both will be true at the same time! Should that be an ||?


Leave a Reply

Your email address will not be published / Required fields are marked *