Apache UIMA SnowballAnnotator OSGi software component
Copyright 2006 The Apache Software Foundation

This Apache UIMA software component includes code that was developed at
The Apache Software Foundation (http://www.apache.org/).

This software includes the Snowball software from http://snowball.tartarus.org/.
Copyright (c) 2001, Dr Martin Porter, and (for the Java developments) 
Copyright (c) 2002, Richard Boulton.
Packages: org.tartarus.snowball

