I'm writing a web application in which I need to analyze words (now just in English, but maybe in future in any language). I tried to write a framework to do the job, but it soon proved to be something really really hard. Finding stems, understanding part of speech, finding consonants, determining morphological patterns, etc. It's really getting harder with each new requirement.

Is there any framework out there (preferably compatible with .NET or PHP frameworks) for working with human languages (English for example)? Some common methods of such framework could be:

List<Synonym> synonyms = SynonymFinder.FindSynonyms("Help");
Stem stem = MorphologyAnalyzer.GetStem("Determining");
Pronunciation pronunciation = Phonetics.Transcribe("Speech");

Having had a look around myself in this department, I really like OpenNLP, which is now maintained by Apache.

Since OpenNLP is a Java library, you need to use these instructions with IKVM, and you can (quite readily) get OpenNLP working with .NET. You can then use the library directly in your C# code without having to have an additional compatibility layer (as I think getting some Python code to work with IronPython can be problematic).

SharpNLP was meant to be a .NET version, but it hasn't been updated since 2006.


Perhaps you could use a combination of NLTK (Natural Language Toolkit) and IronPython

NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning.

Thanks to a hands-on guide introducing programming fundamentals alongside topics in computational linguistics, NLTK is suitable for linguists, engineers, students, educators, researchers, and industry users alike. NLTK is available for Windows, Mac OS X, and Linux. Best of all, NLTK is a free, open source, community-driven project...

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