---
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>
            <a href="/api-components.html#model-pipeline">Model Pipeline</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>
                Pipeline components
                <a href="/built-in-token-parser.html">Token Parsers</a>,
                <a href="/built-in-token-enricher.html">Token Enrichers</a> and
                <a href="/built-in-entity-parser.html">Entity Parsers</a>
                have built-in implementations and can have broad range of uses.
            </li>
            <li>
                Other pipeline components:
                <code>Token Validators</code>,
                <code>Entity Enrichers</code>,
                <code>Entity Mappers</code>,
                <code>Entity Validators</code> and
                <code>Variant Filters</code>
                can't have built-in implementations
                because their logic are depended on concrete user model.
            </li>
        </ul>

        <p>
            <a href="built-in-builder.html">Pipeline Builder</a> section describes helpers class and its methods for pipeline creation.
        </p>

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




