用于Scala对象和特征的Clojure interop

时间:2013-08-02 12:30:57

标签: scala clojure clojure-java-interop

我正在尝试在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])

CategoricalDomainCategoricalDimensionTensorDomain是特征。 LabeledCategoricalVariableBinaryFeatureVectorVariable是抽象类。 ChainModel是一个班级。

1 个答案:

答案 0 :(得分:0)

看起来你正试图将FACTORIE与clojure一起使用。作为一个既喜欢clojure并且在建立FACTORIE的实验室工作的人,我也不会推荐这个。 FACTORIE的代码库以非常强制的方式编写,并且充满了可变状态。如果我在clojure中抓住了一个FACTORIE对象,我会发现它非常迷惑。 FACTORIE还积极使用scala功能,这些功能无法很好地转换为已编译的java(这是clojure和scala必须交互的级别)。

如果你已经拥有一个大型的clojure代码库并且需要一个良好的线性链CRF实现(基于你使用上面的ChainModel),我建议你查看MALLET。它是纯Java,由同一个实验室开发。