blob: 887d6623d42ed45f8b1e726f1c5b68b6a275baeb [file] [log] [blame]
---
active_crumb: Docs
layout: documentation
id: built-in-builder
---
<!--
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">Pipeline Builder<a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
<p>
{% scaladoc NCPipelineBuilder NCPipelineBuilder %} class
is designed for simplifying preparing {% scaladoc NCPipeline NCPipeline %} instance.
It allows to prepare {% scaladoc NCPipeline NCPipeline %} instance
adding pipeline chain components via its methods.
Also, it contains a number of {% scaladoc NCPipelineBuilder#withSemantic-fffff4b0 withSemantic() %} methods
which allow to prepare pipeline instance based on
{% scaladoc nlp/parsers/NCSemanticEntityParser NCSemanticEntityParser %} and configured language.
Currently only <b>English</b> language is supported.
Pipeline for <b>English</b> language is created with useful set of built-in components.
</p>
</section>
<section id="examples">
<h2 class="section-title">Examples <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
<p><b>Simple example</b>:</p>
<pre class="brush: scala, highlight: []">
val pipeline = new NCPipelineBuilder().withSemantic("en", "lightswitch_model.yaml").build
</pre>
<ul>
<li>
It defines pipeline with all built-in English language components and one semantic entity parser with
model defined in <code>lightswitch_model.yaml</code>.
</li>
<li>
It adds to the pipeline by default token parser implementation
{% scaladoc nlp/parsers/NCOpenNLPTokenParser NCOpenNLPTokenParser %} and
following token enrichers implementations:
{% scaladoc nlp/enrichers/NCOpenNLPLemmaPosTokenEnricher NCOpenNLPLemmaPosTokenEnricher %},
{% scaladoc nlp/enrichers/NCEnStopWordsTokenEnricher NCEnStopWordsTokenEnricher %},
{% scaladoc nlp/enrichers/NCEnSwearWordsTokenEnricher NCEnSwearWordsTokenEnricher %},
{% scaladoc nlp/enrichers/NCEnQuotesTokenEnricher NCEnQuotesTokenEnricher %},
{% scaladoc nlp/enrichers/NCEnDictionaryTokenEnricher NCEnDictionaryTokenEnricher %},
{% scaladoc nlp/enrichers/NCEnBracketsTokenEnricher NCEnBracketsTokenEnricher %}.
</li>
</ul>
<p><b>Pipeline creation example constructed from built-in components:</b></p>
<pre class="brush: scala, highlight: [2, 6, 7, 12, 13, 14, 15, 16]">
val pipeline =
val stanford =
val props = new Properties()
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner")
new StanfordCoreNLP(props)
val tokParser = new NCStanfordNLPTokenParser(stanford)
val stemmer = new NCSemanticStemmer():
private val ps = new PorterStemmer
override def stem(txt: String): String = ps.synchronized { ps.stem(txt) }
new NCPipelineBuilder().
withTokenParser(tokParser).
withTokenEnricher(new NCEnStopWordsTokenEnricher()).
withEntityParser(NCSemanticEntityParser(stemmer, tokParser, "pizzeria_model.yaml")).
withEntityParser(new NCStanfordNLPEntityParser(stanford, Set("number"))).
build
</pre>
<ul>
<li>
<code>Line 2</code> defines configured <code>StanfordCoreNLP</code> class instance.
Look at <a href="https://nlp.stanford.edu/">Stanford NLP</a> documentation for more details.
</li>
<li>
<code>Line 6</code> defines token parser <code>NCStanfordNLPTokenParser</code>, pipeline mandatory component.
Note that this one instance is used for two places: in pipeline definition on <code>line 12</code> and
in {% scaladoc nlp/parsers/NCSemanticEntityParser NCSemanticEntityParser %} definition on <code>line 14</code>.
</li>
<li>
<code>Line 13</code> defines configured
{% scaladoc nlp/enrichers/NCEnStopWordsTokenEnricher NCEnStopWordsTokenEnricher %}
token enricher.
</li>
<li>
<code>Line 14</code> defines {% scaladoc nlp/parsers/NCSemanticEntityParser NCSemanticEntityParser %}
configured in YAML file <code>pizzeria_model.yaml</code>.
It uses also simple implementation of {% scaladoc nlp/parsers/NCSemanticStemmer NCSemanticStemmer %}
created on <code>line 7</code> and token parser prepared on <code>line 6</code>.
</li>
<li>
<code>Line 15</code> defines <code>NCStanfordNLPEntityParser</code> based on Stanford NER
configured for number values detection.
</li>
<li>
<code>Line 16</code> defines pipeline building.
</li>
</ul>
<p><b>Example with pipeline configured by custom components:</b></p>
<pre class="brush: scala, highlight: []">
val pipeline =
new NCPipelineBuilder().
withTokenParser(new NCFrTokenParser()).
withTokenEnricher(new NCFrLemmaPosTokenEnricher()).
withTokenEnricher(new NCFrStopWordsTokenEnricher()).
withEntityParser(new NCFrSemanticEntityParser("lightswitch_model_fr.yaml")).
build
</pre>
<ul>
<li>
There is the pipeline created for work with French Language. All components of this pipeline are custom components.
You can get fore information at examples description chapters:
<a href="examples/light_switch_fr.html">Light Switch FR</a> and
<a href="examples/light_switch_ru.html">Light Switch RU</a>.
Note that these custom components are mostly wrappers on existing open source on NLPCraft built-in solutions and
should be prepared just once when you start work with new language.
</li>
</ul>
</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>
<li><a href="#examples">Examples</a></li>
{% include quick-links.html %}
</ul>
</div>