<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Working on Apache Incubator requirements - Apache OpenNLP</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="color-scheme" content="dark light">
    <meta name="description" content="Apache OpenNLP  is a machine learning based toolkit for the processing of natural language text." />
    <meta name="author" content="The Apache OpenNLP Team" />
    <meta name="keywords" content="java, natural language processing, nlp, apache, open source, web site" />
    <meta name="generator" content="JBake"/>
    
    <!-- RSS Feed -->
    <link rel="alternate" type="application/rss+xml" title="RSS" href="/feed.xml" />

    <!-- Favicon -->
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" sizes="192x192"  href="/android-icon-192x192.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/manifest.json">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
    <meta name="theme-color" content="#ffffff">

    <!-- The styles -->
    <link href="/css/bootstrap.min.css" rel="stylesheet">
    <link href="/css/font-awesome.min.css" rel="stylesheet">
    <link href="/css/asciidoctor.css" rel="stylesheet">
    <link href="/css/prettify.css" rel="stylesheet">
    <link href="/css/custom-style.css" rel="stylesheet">
    <link href="/css/scheme-light.css" rel="stylesheet">
    <link href="/css/scheme-dark.css" rel="stylesheet">

    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="/js/html5shiv.js"></script>
    <![endif]-->
</head>
<body onload="prettyPrint()">
<span class="visible-lg">
<a href="https://github.com/apache/opennlp"><img style="z-index: 9999; position: absolute; top: 0; right: 0; border: 0;" src="/img/fork-me-on-github.png" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
</span>

<nav class="navbar navbar-default">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-items" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">
                <img alt="Brand" src="/img/opennlp-navbar-logo.png" class="img-responsive" width="100px" style="position: relative; top: -3px;">
            </a>
        </div>

        <div class="collapse navbar-collapse" id="navbar-items">
            <ul class="nav navbar-nav">
                <li>
                    <a href="/"><span class="glyphicon glyphicon-home"></span> Home</a>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-download-alt"></span> Download <b class="caret"></b></a>
                    <ul class="dropdown-menu">
		                <li><a href="/download.html">OpenNLP Releases</a></li>
                        <li><a href="/models.html">OpenNLP Models</a></li>
		                <li><a href="/maven-dependency.html">Maven Integration</a></li>
		                <li><a href="/gradle-dependency.html">Gradle Integration</a></li>
		            </ul>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-flag"></span> General <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        
                        <li><a href="/news/">News</a></li>
			            <li><a href="https://blogsarchive.apache.org/#opennlp" target="_blank">Blog</a></li>
                        <li><a href="/mailing-lists.html">Mailing Lists</a></li>
                        <li><a href="https://issues.apache.org/jira/browse/OPENNLP" target="_blank">Issue tracker</a></li>
                        <li><a href="/books-tutorials-and-talks.html">Books, Tutorials and Talks</a></li>
                        <li><a href="/powered-by-opennlp.html">Powered by Apache OpenNLP</a></li>
                        
                    </ul>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Documentation <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="/docs/">Manual and Javadocs</a></li>
                        <li><a href="/faq.html">FAQ</a></li>
                        <li><a href="https://cwiki.apache.org/OPENNLP" target="_blank">Wiki</a></li>
                    </ul>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-console"></span> Development <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="/get-involved.html">Get Involved</a></li>
                        <li><a href="/source-code.html">Source Code</a></li>
                        <li><a href="/using-git.html">Using Git</a></li>
                        <li><a href="/building.html">Building</a></li>
                        <li><a href="/code-conventions.html">Code Conventions</a></li>
                        <li><a href="/release.html">Release</a></li>
                        <li><a href="/release-model.html">Release Models</a></li>
                        <li><a href="/team.html">Project Team</a></li>
                    </ul>
                </li>

            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-leaf"></span> ASF <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="https://www.apache.org/">The Apache Software Foundation</a></li>
                        <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                        <li><a href="https://www.apache.org/security/">Security</a></li>
                        <li><a href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
                    </ul>
                </li>
            </ul>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>

<div class="container">
    <h1 class="title">Working on Apache Incubator requirements</h1>

    <div class="ulist">
<ul>
<li>
<p>Merry Christmas &amp; Happy New Year!</p>
</li>
<li>
<p>We have the sources online, are working on porting the documentation, and cleanup of the code to meet Apache
Incubator requirements.</p>
</li>
</ul>
</div>

    <p><em>24 December 2010</em></p>
    <div id="share"><!-- Google Plus -->
<div class="g-plusone" data-size="medium"></div>
<script type="text/javascript">
  window.___gcfg = {lang: 'en-GB'};

  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
</script>

<!-- Twitter -->
<a href="https://twitter.com/share" class="twitter-share-button" data-dnt="true">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

<!-- Facebook -->
<div class="fb-like" data-send="false" data-layout="button_count" data-width="100" data-show-faces="true"></div>
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script></div>
</div>

    <footer class='footer'>
        <div class="container">
            <p class="text-muted">Copyright &copy; 2024  The Apache Software Foundation, Licensed under the
            <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>  <br>
            Apache OpenNLP, OpenNLP, Apache, the Apache feather logo, and the Apache OpenNLP project logo are
            trademarks of The Apache Software Foundation. -
            <a href="/privacy-policy.html">Privacy Policy</a></p>
        </div>
    </footer>

    <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://www.apachecon.com/event-images/snippet.js"></script>
    <script src="/js/jquery-3.2.1.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
    <script src="/js/prettify.js"></script>
    
    <script type="text/javascript">

      var link = $('a[href="' + this.location.pathname + '"]');
      if (link != undefined)
    	  link.parents('li,ul').addClass('active');
	
	</script>

    <!-- Matomo -->
    <script>
        var _paq = window._paq = window._paq || [];
        /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
        /* We explicitly disable cookie tracking to avoid privacy issues */
        _paq.push(['disableCookies']);
        _paq.push(['trackPageView']);
        _paq.push(['enableLinkTracking']);
        (function() {
            var u="//analytics.apache.org/";
            _paq.push(['setTrackerUrl', u+'matomo.php']);
            _paq.push(['setSiteId', '33']);
            var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
            g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
        })();
    </script>
    <!-- End Matomo Code -->
</body>
</html>