Apache OpenNLP
Copyright 2011, 2012 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product contains JWNL developed by the JWNL SourceForge project 
(http://sourceforge.net/projects/jwordnet/), licensed under the 
BSD license (see LICENSE file).
