Scala:构造函数 DictionaryLemmatizer 的参数不足

Scala: not enough arguments for constructor DictionaryLemmatizer

我遇到了错误

not enough arguments for constructor DictionaryLemmatizer: (x: java.io.InputStream)opennlp.tools.lemmatizer.DictionaryLemmatizer.
[error] Unspecified value parameter x.
[error] class SimpleLemmatizerModel(map: Map[String, Map[Char, Map[String, String]]]) extends DictionaryLemmatizer  {
[error]                            ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

构建此类代码时 (sbt assembly)

import opennlp.tools.lemmatizer.DictionaryLemmatizer
import scala.io.Source

class SimpleLemmatizerModel(val map: Map[String, Map[Char, Map[String, String]]]) extends DictionaryLemmatizer {

  def lemmatize(word: String, tag: String): String =
    ( for( t <- map.get(tag); w <- t.get(word(0)) )
      yield {w.getOrElse(word, word)}
    ).getOrElse(word)

  def lemmatize(token: TaggedToken): String = lemmatize(token.token, token.tag)

  def transform(tokens: Array[TaggedToken]): Array[String] = tokens.map(lemmatize)

}

其中

trait Tokens {val token: String}

trait TaggedTokens extends Tokens {val tag: String}

case class TaggedToken(token: String, tag: String) extends TaggedTokens {
  override def toString = token + ": " + tag
}

case class Token(token: String) extends Tokens {
  def tag(t: String): TaggedTokens = TaggedToken(token, t)
}

DictionaryLemmatizer 是一个 class 的 OpenNLP 库,用 Java 编写,其代码可以在 here.

中找到

如果有人解释这种错误的原因以及如何修复它,我将不胜感激。

如果需要一些额外的信息,我很乐意提供。

DictionaryLemmatizer 的构造函数需要一个类型为 java.io.InputStream 的参数 dictionary

您可能想要实现 Lemmatizer 接口:

class SimpleLemmatizerModel(...) extends Lemmatizer { ... }

注意:您必须实施那些 lemmatize 方法才能使 SimpleLemmatizerModel 具体。