4

I wonder if you know a computational method to obtain the stem of any English word. By stem I mean the part of the word which is never affected by plurals, temporal forms, and so on. For example, stem("cars") = car; stem("children") = child; stem ("tried") = try.

Thank you in advance

4
  • Your examples seem like you are looking for stems (the form which inflectional affixes attach to) rather than roots (the smallest lexical morpheme which serves as the basis for composition/derivation/inflection). They are sometimes the same, but e.g. in the word "teachers", the root would be "teach", but the part that undergoes inflection (which you seem to be interested in) is "teacher"; this is not the root, but the stem of the word. So, which one are you referring to?
    – lemontree
    Dec 5 '16 at 16:05
  • I gave an answer to this in a comment which somehow got deleted. That's irritating. My answer is: Look it up in the dictionary. Assuming there are only a finite number of words in the language, the root or stem for each word can be listed, and a very fast method is to simply look up the information in the list. If you wanted a cheap or convenient method, the answer might be different.
    – Greg Lee
    Dec 7 '16 at 20:34
  • Google for stemmer, specifically either Porter or Snowball for English. They are surprisingly simple.
    – Mitch
    Dec 8 '16 at 16:58
  • That thing is called "lemmatization"
    – xji
    Dec 8 '16 at 19:33
3

You might actually need the lemma of the word. Stemming and lemmatizing are very similar:

Stemming usually refers to a crude heuristic process that chops off the ends of words in the hope of achieving this goal correctly most of the time, and often includes the removal of derivational affixes.

Lemmatization usually refers to doing things properly with the use of a vocabulary and morphological analysis of words, normally aiming to remove inflectional endings only and to return the base or dictionary form of a word, which is known as the lemma .

Among the most commonly used NLP tools which also contain both stemming and lemmatizing are NLTK and CoreNLP.

2

Assuming you're trying to stem English words, the easiest approach would probably be to use one of the existing applications of the Porter algorithm. Try Snowball (it's also available as GATE and NLTK plugins) - it's well-known in the NLP community, so you'll be able to get help fairly quickly.

An alternative is Krovetz stemming, of which a JAVA/C++ application is available here (personally I haven't used this before, so I can't comment on its effectiveness).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.