---
layout: default
---

<!--
 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.
-->

<div id="banner-box" class="bottom-arrow">
    <div id="inner-banner-box">
        <div id="banner">
            <div id="nat-lang-itf">Apache NLPCraft</div>
            <h1 id="banner-sub-title">An API to convert natural language into actions</h1>
            <div>
                <a id="get-started-btn" role="button" href="docs.html" class="btn mt-5">GET STARTED <i class="ml-2 fas fa-angle-right"></i></a>
            </div>
        </div>
    </div>
</div>

<div id="about-nlpcraft" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-4">
                <h2 class="section-title">What Is <span>NLPCraft</span></h2>
                <section>
                    <p>
                        Apache NLPCraft is an open source library for adding natural language Interface
                        to any applications. Based on semantic modelling it allows rapid implementation and
                        requires no deep learning model training or pre-existing text corpora.
                    </p>
                    <p>
                        Apache NLPCraft is simple to use: define a semantic model and intents to interpret
                        user input. Securely deploy this model and use REST API to explore the data using natural language from
                        your applications.
                    </p>
                    <div class="learn-more">
                        <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
                    </div>
                </section>
            </div>
            <div class="col-4">
                <h2 class="section-title">Natural <span>Language</span></h2>
                <section>
                    <p>
                        Natural Language Interface (NLI) enables users to explore any type of data
                        sources using natural language augmenting existing UI/UX with fidelity
                        and simplicity of conversational AI.
                    </p>
                    <p>
                        There is no learning curve, no special rules or applications to master, no cumbersome syntax or terms to remember -
                        just a natural language that your users already speak.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h2 class="section-title">Quick <span>Links</span></h2>
                <section>
                    <div class="quick-link" >
                        <a href="https://github.com/apache/incubator-nlpcraft" target="github">
                            <img
                                class="quick-link-img"
                                src="{{ 'images/github_logo.png' | relative_url }}" alt="">
                        </a>
                        <div class="gh-btn">
                            <a
                                class="github-button"
                                href="https://github.com/apache/incubator-nlpcraft/subscription"
                                data-icon="octicon-eye"
                                aria-label="Watch on GitHub">Watch</a>
                        </div>
                        <div class="gh-btn">
                            <a
                                class="github-button"
                                href="https://github.com/apache/incubator-nlpcraft/tree/master/src/main/scala/org/apache/nlpcraft/examples"
                                aria-label="NLPCraft examples on GitHub">Examples</a>
                        </div>
                        <a target=_ href="https://gitter.im/apache-nlpcraft/community"><img alt="Gitter" src="https://badges.gitter.im/apache-nlpcraft/community.svg"></a>
                    </div>
                    <div class="quick-link" >
                        <a href="/apis/latest/index.html" target="_">
                            <img alt="" class="quick-link-img" src="{{ 'images/java.png' | relative_url }}">
                            <span>Latest&nbsp;</span>
                            <!-- TODO: fix package name for javadoc.io image. -->
                            <a target="_" href="https://javadoc.io/doc/org.apache.nlpcraft/nlpcraft"><img src="https://javadoc.io/badge/org.nlpcraft/nlpcraft.svg" alt="Javadocs"></a>
                        </a>
                    </div>
                    <div class="quick-link">
                        <a href="https://nlpcraft.docs.apiary.io" target="apiary">
                            <img alt="" class="quick-link-img" src="{{ 'images/apiary.svg' | relative_url }}">
                            <span>REST API</span>
                        </a>
                    </div>
                </section>
            </div>
        </div>
    </div>
</div>

<div id="features" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">Key <span>Features</span></h2>
            </div>
        </div>
        <div class="row">
            <div class="col-4">
                <h3 class="sub-section-title">Semantic Modeling</h3>
                <section>
                    <p>
                        Advanced semantic modelling and intent-based matching enables
                        deterministic natural language understanding without
                        requiring deep learning training or pre-existing text corpora.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Any Data Source</h3>
                <section>
                    <p>
                        Any data source, device, or service - public or private. From databases and SaaS systems,
                        to smart home devices, voice assistants and chatbots.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Java-First</h3>
                <section>
                    <p>
                        REST API and Java-based implementation natively
                        support world's largest ecosystem of development tools, programming languages and services.
                    </p>
                </section>
            </div>
        </div>
        <div class="row mt-4">
            <div class="col-4">
                <h3 class="sub-section-title">Strong Security</h3>
                <section>
                    <p>
                        HTTPs, model deployment isolation, 256-bit encryption and ingress-only connectivity are
                        among the key security features in NLPCraft.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Model-As-A-Code</h3>
                <section>
                    <p>
                        Model-as-a-code convention natively
                        supports any system development life cycle tools and frameworks in Java eco-system.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Out-Of-The-Box Integration</h3>
                <section>
                    <p>
                        NLPCraft natively <a href="/integrations.html">integrates</a> with 3rd party libraries for base NLP processing
                        and named entity recognition:
                    </p>
                    <div id="integration-logos">
                        <a target=_ href="https://opennlp.apache.org"><img src="/images/opennlp-logo.png" height="32px" alt=""></a>
                        <a target=_ href="https://cloud.google.com/natural-language/"><img src="/images/google-cloud-logo-small.png" height="32px" alt=""></a>
                        <a target=_ href="https://stanfordnlp.github.io/CoreNLP"><img src="/images/corenlp-logo.gif" height="48px" alt=""></a>
                        <a target=_ href="https://spacy.io"><img src="/images/spacy-logo.png" height="32px" alt=""></a>
                    </div>
                </section>
            </div>
        </div>
        <div class="learn-more">
            <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
        </div>
    </div>
</div>

<div id="howitworks" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">How <span>It Works</span></h2>
            </div>
        </div>
        <div class="row d-flex flex-wrap align-items-center">
            <div class="col-6">
                <section>
                    <p>
                        There are three main software components:
                        <p>
                        <b>Data model</b> specifies how to interpret user input, how to query a data
                        source, and how to format the result back. Developers use model-as-a-code approach
                        to build models using any JVM language like Java or Scala.
                        <p>
                        <b>Data probe</b> is a DMZ-deployed application designed to securely
                        deploy and manage data models. Each probe can manage multiple models and you can
                        have many probes.
                        <p>
                        <b>REST server</b> provides REST endpoint for user applications to securely query data
                        sources using NLI via data models deployed in data probes.
                    </p>
                </section>
            </div>
            <div class="col-6">
                <center>
                    <img class="img-fluid" src="{{ 'images/homepage-fig1.1.png' | relative_url}}" alt="">
                </center>
            </div>
        </div>
        <div class="learn-more">
            <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
        </div>
    </div>
</div>

<div id="news" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">Latest <span>News</span></h2>
            </div>
        </div>
        <div id="news-container" class="row">
            {% for news in site.data.news %}
            <div class="col-4">
                <div class="news-title">
                    <a href="{{ news.url }}" target=_>
                        {{ news.title }}
                    </a>
                </div>
                <div class="news-excerpt">
                    {{ news.excerpt}}&nbsp;<a target=_ href="{{ news.url }}"><i class="fas fa-angle-double-right"></i></a>
                </div>
                <div class="news-footer">
                    {% if news.avatar_url %}<img class="avatar-img" src="{{ news.avatar_url | relative_url}}" alt="">{% endif %}
                    {% if news.pub_logo_url %}<img class="pub-logo-img" src="{{ news.pub_logo_url | relative_url}}" alt="">{% endif %}
                    {% if news.medium_id %}<a class="news-author text-nowrap " target="news" href="https://medium.com/@{{ news.medium_id}}">{{ news.author }}</a>{% endif %}
                    {% if news.linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ news.linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                    {% if news.medium_id %}<a target="medium" href="https://medium.com/@{{ news.medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                    {% if news.twitter_id %}<a target="twitter" href="https://twitter.com/{{ news.twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                    <span class="text-nowrap news-date">{{ news.publish_date }}</span>
                </div>
            </div>
            {% endfor %}
        </div>
    </div>
</div>

<div id="about" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div id="about-container" class="row">
            <div class="col-12" style="margin-top: 50px;">
<!--                <p align="center">-->
<!--                    <a href="https://www.apache.org/licenses/LICENSE-2.0" target=_><img src="{{ 'images/asf20.jpg' | relative_url}}" height="64px" alt=""></a>-->
<!--                </p>-->
                <p align="center">
                    <a href="https://incubator.apache.org/" target=_><img src="{{ 'images/apache_incubator.png' | relative_url}}" height="64px" alt=""></a>
                </p>
                <p align="center" style="font-size: 100%; margin: 0 20%">
                    Apache NLPCraft licensed under <a target=_ href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, version 2.0</a> is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by
                    the <a href="https://incubator.apache.org/" target=_>Apache Incubator</a>. Incubation is required of all newly accepted projects until a further review indicates
                    that the infrastructure, communications, and decision making process have stabilized in a manner consistent
                    with other successful ASF projects. While incubation status is not necessarily a reflection of the
                    completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
                </p>
            </div>
        </div>
    </div>
</div>



