Apache UIMA WhitespaceTokenizer annotator software component
Copyright 2006-2009 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
