You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2022/10/16 07:50:55 UTC
[incubator-nlpcraft] 01/01: WIP.
This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch NLPCRAFT-517
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 012665dbfd3c39760617a1d68866c2811c69d018
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Sun Oct 16 11:50:41 2022 +0400
WIP.
---
.../nlpcraft/models/NCIntCalcModelSpec.scala | 40 +++++++---------------
.../nlpcraft/nlp/parsers/NCNLPEntityParser.scala | 4 +--
2 files changed, 15 insertions(+), 29 deletions(-)
diff --git a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
index b92e6304..5eb57bd9 100644
--- a/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
+++ b/nlpcraft-stanford/src/test/scala/org/apache/nlpcraft/models/NCIntCalcModelSpec.scala
@@ -31,38 +31,29 @@ import scala.util.Using
object NCIntCalcModelSpec:
val MDL: NCModel = new NCTestModelAdapter:
+ private val OPS: Map[String, (Int, Int) => Int] = Map("+" -> (_ + _), "-" -> (_ - _), "*" -> (_ * _), "/" -> (_ / _))
+
private var mem: Option[Int] = None
override val getPipeline: NCPipeline =
- val stanford =
- val props = new Properties()
- props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner")
- new StanfordCoreNLP(props)
+ val stanford = new StanfordCoreNLP(mkProps("annotators", "tokenize, ssplit, pos, lemma, ner"))
new NCPipelineBuilder().
withTokenParser(new NCStanfordNLPTokenParser(stanford)).
- // For operations.
- withEntityParser(new NCNLPEntityParser).
- // For numerics.
- withEntityParser(new NCStanfordNLPEntityParser(stanford, Set("number"))).
+ withEntityParser(new NCNLPEntityParser(t => OPS.contains(t.getText))). // For operations.
+ withEntityParser(new NCStanfordNLPEntityParser(stanford, Set("number"))). // For numerics.
build
private def nne(e: NCEntity): Int = java.lang.Double.parseDouble(e[String]("stanford:number:nne")).intValue
+ private def mkProps(k: String, v: String): Properties =
+ val p = new Properties(); p.setProperty(k, v); p
private def calc(x: Int, op: String, y: Int): NCResult =
- mem =
- Some(op match
- case "+" => x + y
- case "-" => x - y
- case "*" => x * y
- case "/" => x / y
- case _ => throw new IllegalStateException()
- )
-
+ mem = Some(OPS.getOrElse(op, throw new IllegalStateException()).apply(x, y))
NCResult(mem.get)
@NCIntent(
- "intent=calc options={ 'ordered': false }" +
+ "intent=calc options={ 'ordered': true }" +
" term(x)={# == 'stanford:number'} " +
" term(op)={# == 'nlp:token' && has(list('+', '-', '*', '/'), meta_ent('nlp:token:text')) == true} " +
" term(y)={# == 'stanford:number'}"
@@ -76,7 +67,7 @@ object NCIntCalcModelSpec:
): NCResult = calc(nne(x), op.mkText, nne(y))
@NCIntent(
- "intent=calcMem options={ 'ordered': false }" +
+ "intent=calcMem options={ 'ordered': true }" +
" term(op)={# == 'nlp:token' && has(list('+', '-', '*', '/'), meta_ent('nlp:token:text')) == true} " +
" term(y)={# == 'stanford:number'}"
)
@@ -85,16 +76,12 @@ object NCIntCalcModelSpec:
im: NCIntentMatch,
@NCIntentTerm("op") op: NCEntity,
@NCIntentTerm("y") y: NCEntity
- ): NCResult =
- mem match
- case Some(x) => calc(x, op.mkText, nne(y))
- case None => throw new NCRejection("Memory is empty.")
+ ): NCResult = calc(mem.getOrElse(throw new NCRejection("Memory is empty.")), op.mkText, nne(y))
class NCIntCalcModelSpec extends AnyFunSuite:
test("test") {
Using.resource(new NCModelClient(NCIntCalcModelSpec.MDL)) { client =>
- def check(txt: String, v: Int): Unit =
- require(v == client.ask(txt, "userId").getBody)
+ def check(txt: String, v: Int): Unit = require(v == client.ask(txt, "userId").getBody)
check("2 + 2", 4)
check("3 * 4", 12)
@@ -102,5 +89,4 @@ class NCIntCalcModelSpec extends AnyFunSuite:
check("+ twenty two", 28)
check("7 + 2", 9)
}
- }
-
+ }
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
index 9f812749..ffeff290 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCNLPEntityParser.scala
@@ -33,9 +33,9 @@ import org.apache.nlpcraft.nlp.parsers.NCNLPEntityParser.*
/**
*
*/
-class NCNLPEntityParser extends NCEntityParser:
+class NCNLPEntityParser(predicate: NCToken => Boolean = _ => true) extends NCEntityParser:
override def parse(req: NCRequest, cfg: NCModelConfig, toks: List[NCToken]): List[NCEntity] =
- toks.map(t =>
+ toks.filter(predicate).map(t =>
new NCPropertyMapAdapter with NCEntity:
put(s"$id:text", t.getText)
put(s"$id:index", t.getIndex)