我正在尝试在 Clojure 项目中使用 Scala 库,但遇到了一些问题。您将如何在 Clojure 中实现以下 Scala 代码?
object LabelDomain extends CategoricalDomain[String]
class Label(val token: Token, s: String) extends LabeledCategoricalVariable(s) {
def domain = LabelDomain
}
object FeaturesDomain extends CategoricalDimensionTensorDomain[String]
class Features(val token: Token) extends BinaryFeatureVectorVariable[String] {
def domain = FeaturesDomain
}
object model extends ChainModel[Label, Features, Token](
LabelDomain,
FeaturesDomain,
l => l.token.attr[Features],
l => l.token,
t => t.attr[Label])
CategoricalDomain
和 CategoricalDimensionTensorDomain
是特质。LabeledCategoricalVariable
和 BinaryFeatureVectorVariable
是抽象类。ChainModel
是一个类。
最佳答案
看起来您正在尝试使用 FACTORIE与 clojure。作为既喜欢 clojure 又在构建 FACTORIE 的实验室工作的人,我不推荐这样做。 FACTORIE 的代码库以非常命令式的风格编写,并且充满了可变状态。如果我接触到 clojure 中的 FACTORIE 对象,我会发现它非常迷惑。 FACTORIE 还以无法很好地转换为编译的 java(这是 clojure 和 scala 必须交互的级别)的方式积极使用 scala 功能。
如果你已经有一个很大的 clojure 代码库并且需要一个线性链 CRF 的良好实现(基于你对上面 ChainModel
的使用),我建议你查看 MALLET .它是纯Java,由同一个实验室开发。
关于scala - 用于 Scala 对象和特征的 Clojure 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18016942/