This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch NLPCRAFT-491
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-491 by this push:
     new da4e436e WIP.
da4e436e is described below

commit da4e436e1a6c5620218c8badaa287677aa76d8de
Author: Sergey Kamov <skhdlem...@gmail.com>
AuthorDate: Mon Apr 4 22:43:10 2022 +0300

    WIP.
---
 nlpcraft-examples/order/pom.xml                    |  5 +++++
 .../nlpcraft/examples/order/OrderModel.scala       | 25 +++++++++++++++++++++-
 .../nlpcraft/examples/order/OrderModelSpec.scala   |  2 +-
 .../impl/NCStanfordNLPEntityParserImpl.scala       |  4 +++-
 4 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/nlpcraft-examples/order/pom.xml b/nlpcraft-examples/order/pom.xml
index 41a42663..df729acd 100644
--- a/nlpcraft-examples/order/pom.xml
+++ b/nlpcraft-examples/order/pom.xml
@@ -37,6 +37,11 @@
             <artifactId>nlpcraft</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>nlpcraft-stanford</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
         <!-- Test dependencies. -->
         <dependency>
diff --git 
a/nlpcraft-examples/order/src/main/java/org/apache/nlpcraft/examples/order/OrderModel.scala
 
b/nlpcraft-examples/order/src/main/java/org/apache/nlpcraft/examples/order/OrderModel.scala
index fccb9644..08a6b1c3 100644
--- 
a/nlpcraft-examples/order/src/main/java/org/apache/nlpcraft/examples/order/OrderModel.scala
+++ 
b/nlpcraft-examples/order/src/main/java/org/apache/nlpcraft/examples/order/OrderModel.scala
@@ -18,6 +18,8 @@
 package org.apache.nlpcraft.examples.order
 
 import com.typesafe.scalalogging.LazyLogging
+import edu.stanford.nlp.pipeline.StanfordCoreNLP
+import opennlp.tools.stemmer.PorterStemmer
 import org.antlr.v4.runtime.misc.Predicate
 import org.apache.nlpcraft.*
 import org.apache.nlpcraft.internal.util.NCResourceReader
@@ -26,10 +28,20 @@ import org.apache.nlpcraft.nlp.entity.parser.*
 
 import scala.collection.mutable
 import org.apache.nlpcraft.NCResultType.*
+import org.apache.nlpcraft.nlp.entity.parser.semantic.{NCSemanticEntityParser, 
NCSemanticStemmer}
+import org.apache.nlpcraft.nlp.entity.parser.stanford.NCStanfordNLPEntityParser
+import org.apache.nlpcraft.nlp.token.parser.stanford.NCStanfordNLPTokenParser
 
+import java.util.Properties
 import scala.jdk.CollectionConverters.*
 
 object OrderModel extends LazyLogging:
+    private val STANFORD =
+        val props = new Properties()
+        props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner")
+        new StanfordCoreNLP(props)
+    private val TOK_PARSER = new NCStanfordNLPTokenParser(STANFORD)
+
     private def extractPizzaKind(e: NCEntity): String = 
e.get[String]("ord:pizza:kind:value")
     private def extractPizzaSize(e: NCEntity): PizzaSize = 
PizzaSize.valueOf(e.get[String]("ord:pizza:size:value").toUpperCase)
     private def extractDrink(e: NCEntity): String = 
e.get[String]("ord:drink:value")
@@ -78,7 +90,18 @@ import org.apache.nlpcraft.examples.order.OrderModel.*
   */
 class OrderModel extends NCModelAdapter (
     new NCModelConfig("nlpcraft.order.ex", "Order Example Model", "1.0"),
-    new NCPipelineBuilder().withSemantic("en", "order_model.yaml").build()
+    new NCPipelineBuilder().
+        withTokenParser(TOK_PARSER).
+        withEntityParser(new NCStanfordNLPEntityParser(STANFORD, "number")).
+        withEntityParser(new NCSemanticEntityParser(
+            new NCSemanticStemmer():
+                final private val ps = new PorterStemmer
+                override def stem(txt: String): String = ps.synchronized { 
ps.stem(txt) }
+            ,
+            TOK_PARSER,
+            "order_model.yaml"
+        )).
+        build()
 ) with LazyLogging:
     private val ords = mutable.HashMap.empty[String, OrderState]
 
diff --git 
a/nlpcraft-examples/order/src/test/java/org/apache/nlpcraft/examples/order/OrderModelSpec.scala
 
b/nlpcraft-examples/order/src/test/java/org/apache/nlpcraft/examples/order/OrderModelSpec.scala
index 7f437428..3ae7ed2e 100644
--- 
a/nlpcraft-examples/order/src/test/java/org/apache/nlpcraft/examples/order/OrderModelSpec.scala
+++ 
b/nlpcraft-examples/order/src/test/java/org/apache/nlpcraft/examples/order/OrderModelSpec.scala
@@ -43,7 +43,7 @@ class OrderModelSpec:
 
                 if expResType != resp.getType then
                     printDialog()
-                    require(false, s"Unexpected type: ${resp.getType}, 
expected: ${expResType}.")
+                    require(false, s"Unexpected type: ${resp.getType}, 
expected: $expResType.")
 
             ask("I want to order margherita medium size, marbonara, marinara 
and tea", ASK_DIALOG)
             ask("large size please", ASK_DIALOG)
diff --git 
a/nlpcraft-stanford/src/main/java/org/apache/nlpcraft/nlp/entity/parser/stanford/impl/NCStanfordNLPEntityParserImpl.scala
 
b/nlpcraft-stanford/src/main/java/org/apache/nlpcraft/nlp/entity/parser/stanford/impl/NCStanfordNLPEntityParserImpl.scala
index d308a74c..395fa2e0 100644
--- 
a/nlpcraft-stanford/src/main/java/org/apache/nlpcraft/nlp/entity/parser/stanford/impl/NCStanfordNLPEntityParserImpl.scala
+++ 
b/nlpcraft-stanford/src/main/java/org/apache/nlpcraft/nlp/entity/parser/stanford/impl/NCStanfordNLPEntityParserImpl.scala
@@ -36,6 +36,8 @@ class NCStanfordNLPEntityParserImpl(stanford: 
StanfordCoreNLP, supported: JSet[S
     require(stanford != null)
     require(supported != null)
 
+    private val supportedLc = supported.asScala.map(_.toLowerCase)
+
     override def parse(req: NCRequest, cfg: NCModelConfig, toksList: 
JList[NCToken]): JList[NCEntity] =
         val toks = toksList.asScala.toSeq
         val doc = new CoreDocument(req.getText)
@@ -46,7 +48,7 @@ class NCStanfordNLPEntityParserImpl(stanford: 
StanfordCoreNLP, supported: JSet[S
         for (e <- doc.entityMentions().asScala)
             val typ = e.entityType().toLowerCase
 
-            if supported.contains(typ) then
+            if supportedLc.contains(typ) then
                 val offsets = e.charOffsets()
                 val t1 = toks.find(_.getStartCharIndex == offsets.first)
                 lazy val t2 = toks.find(_.getEndCharIndex == offsets.second)

Reply via email to