---
active_crumb: Docs
layout: documentation
id: built-in-overview
---

<!--
 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 class="col-md-8 second-column">
    <section id="overview">
        <h2 class="section-title">Built-in Components Overview<a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>

        <p>
            Model <a href="apis/latest/org/apache/nlpcraft/NCPipeline.html">NCPipeline</a> contains
            chain of components traits which are responsible for sentence processing.
            Some built-in implementations of these traits are described below.
        </p>

        <p>There are two kinds of pipeline components:</p>
        <ul>
            <li>
                Following pipeline components have built-in implementations and described in related sections:
                <a href="apis/latest/org/apache/nlpcraft/NCTokenParser.html">NCTokenParser</a>,
                <a href="apis/latest/org/apache/nlpcraft/NCTokenEnricher.html">NCTokenEnricher</a>,
                <a href="apis/latest/org/apache/nlpcraft/NCEntityParser.html">NCEntityParser</a>.
            </li>
            <li>
                Following pipeline components cannot have build implementation because their logic are depend on concrete user model:
                <a href="apis/latest/org/apache/nlpcraft/NCTokenValidator.html">NCTokenValidator</a>,
                <a href="apis/latest/org/apache/nlpcraft/NCEntityEnricher.html">NCEntityEnricher</a>,
                <a href="apis/latest/org/apache/nlpcraft/NCEntityValidator.html">NCEntityValidator</a>,
                <a href="apis/latest/org/apache/nlpcraft/NCEntityMapper.html">NCEntityMapper</a> and
                <a href="apis/latest/org/apache/nlpcraft/NCVariantFilter.html">NCVariantFilter</a>.
            </li>
        </ul>

        <div class="bq info">
            <p><b>Built-in component licenses.</b></p>
            <p>
                All built-in components which are based on <a href="https://nlp.stanford.edu/">Stanford NLP</a> models and classes
                are provided with <a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU General Public License</a>.
                Look at Stanford NLP <a href="https://nlp.stanford.edu/software/">Software</a> page.
                All such components are placed in special project module <code>nlpcraft-stanford</code>.
                All other components are proved with <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License Version 2.0</a> license.
            </p>
        </div>
    </section>
</div>
<div class="col-md-2 third-column">
    <ul class="side-nav">
        <li class="side-nav-title">On This Page</li>
        <li><a href="#overview">Overview</a></li>
        {% include quick-links.html %}
    </ul>
</div>




