<!--
    ***************************************************************
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    *
    *   http://www.apache.org/licenses/LICENSE-2.0
    * 
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
    ***************************************************************
--> 

<html> 
<head> 
  <title>Apache OpenNLP ${pom.version} Release Notes</title> 
</head> 
<body> 
<h1>Apache OpenNLP ${pom.version} Release Notes</h1> 
 
<h2>Contents</h2> 
<p> 
<a href="#what.is.opennlp">What is Similarity component of Apache OpenNLP?</a><br/> 
<a href="#major.changes">This Release</a><br/> 
<a href="#get.involved">How to Get Involved</a><br/> 
<a href="#report.issues">How to Report Issues</a><br/> 
<a href="#list.issues">List of JIRA Issues Fixed in this Release</a><br/> 
</p>  
   
<h2><a name="what.is.opennlp">1. What is Apache OpenNLP?</a></h2> 
<p>
This component does text relevance assessment. It takes two portions of texts (phrases, sentences, paragraphs) and returns a similarity score.
Similarity component can be used on top of search to improve relevance, computing similarity score between a question and all search results (snippets). 
Also, this component is useful for web mining of images, videos, forums, blogs, and other media with textual descriptions. Such applications as content generation 
and filtering meaningless speech recognition results are included in the sample applications of this component.
   Relevance assessment is based on machine learning of syntactic parse trees (constituency trees, http://en.wikipedia.org/wiki/Parse_tree). 
The similarity score is calculated as the size of all maximal common subtrees for sentences from a pair of texts (
www.aaai.org/ocs/index.php/WS/AAAIW11/paper/download/3971/4187, www.aaai.org/ocs/index.php/FLAIRS/FLAIRS11/paper/download/2573/3018,
www.aaai.org/ocs/index.php/SSS/SSS10/paper/download/1146/1448).
   The objective of Similarity component is to give an application engineer as tool for text relevance which can be used as a black box, no need to understand 
 computational linguistics or machine learning. 
</p>

<h2><a name="major.changes">This Release</a></h2> 
<p> 
Please see the <a href="README">README</a> for this information.
</p> 
  
<h2><a name="get.involved">How to Get Involved</a></h2> 
<p> 
The Apache OpenNLP project really needs and appreciates any contributions, 
including documentation help, source code and feedback.  If you are interested
in contributing, please visit <a href="https://opennlp.apache.org/">https://opennlp.apache.org/</a>
</p>
  
<h2><a name="report.issues">How to Report Issues</a></h2> 
<p> 
The Apache OpenNLP project uses JIRA for issue tracking.  Please report any 
issues you find at 
<a href="https://issues.apache.org/jira/browse/opennlp">https://issues.apache.org/jira/browse/opennlp</a>
</p> 
  
<h2><a name="list.issues">List of JIRA Issues Fixed in this Release</a></h2>
<p>
Click <a href="issuesFixed/jira-report.html">issuesFixed/jira-report.hmtl</a> for the list of 
issues fixed in this release.
</p>
</body> 
</html>