【问题标题】:Clojure interop for Scala objects and traitsScala 对象和特征的 Clojure 互操作
【发布时间】:2023-04-07 12:44:02
【问题描述】:

我正在尝试在 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 是一个类。

【问题讨论】:

  • 从库互操作性的角度来看,我不得不怀疑 Scala 与 Clojure 的匹配度有多好。另外……我认为您需要多说一下示例中定义的各种名称 - 它非常稀疏。
  • @RandallSchulz 我更新了帖子以更具体地说明所涉及的类型。
  • 也许这个问题可以大大简化?术语(“分类”、“tensor”、“域”等)可能会吓跑人们,即使它们与问题无关。
  • 繁重的 OO 代码不适合 Clojure(当然,它仍然可行),也许您应该在 Scala 中进行。 Clojure 更关注数据,而 Scala 更关注类型。

标签: scala clojure clojure-java-interop


【解决方案1】:

您似乎正在尝试将 FACTORIE 与 clojure 一起使用。作为一个既喜欢 clojure 又在构建 FACTORIE 的实验室工作的人,我不会推荐这个。 FACTORIE 的代码库以非常命令式的风格编写,并且充满了可变状态。如果我在 clojure 中使用 FACTORIE 对象,我会发现它非常令人迷惑。 FACTORIE 还积极使用 scala 特性,这些特性不能很好地转化为已编译的 java(这是 clojure 和 scala 必须交互的级别)。

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

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多