(defn weka-feature-reduce [in out]
(sh "java" "-cp" "/Applications/weka-3-7-13/weka.jar"
"weka.filters.supervised.attribute.AttributeSelection"
"-E" "weka.attributeSelection.InfoGainAttributeEval"
"-S" "weka.attributeSelection.Ranker -N 300"
"-i" in "-o" out "-c" "1"))
我有这个clojure函数,它接受.csv文件并将其处理为.arff文件。这个功能过去曾在当天工作,但目前它给出的错误是;
{:退出0,:out“”,:err“java.io.IOException:读取未知名义值selamfor属性:training-for(第102行)。尝试增加内存缓冲区的大小(-B选项) )或使用-L选项明确指定合法名义值> \ n \ tweka.core.converters.CSVLoader.makeInstance(CSVLoader.java:1013)\ n \ tweka.core.converters.CSVLoader.getNextInstance(CSVLoader.java: 839)\ n \ $ tweka.core.converters.ConverterUtils DataSource.hasMoreElements(ConverterUtils.java:375)\ n \ tweka.filters.Filter.filterFile(Filter.java:1104)\ n \ tweka.filters.Filter.runFilter (Filter.java:1372)\n\tweka.filters.supervised.attribute.AttributeSelection.main(AttributeSelection.java:614)\ nnnntt weka.core.converters.CSVLoader.makeInstance(CSVLoader.java:1013) \ n \ tat weka.core.converters.CSVLoader.getNextInstance(CSVLoader.java:839)\ n \ tat weka.core.converters.ConverterUtils $ DataSource.hasMoreElements(ConverterUtils.java:375)\ n \ tat weka.filters。 Filter.filterFile(Filter.java:1104)\ n \ tat weka.filters.Filter.runFilter(Fi lter.java:1372)\n\tat weka.filters.supervised.attribute.AttributeSelection.main(AttributeSelection.java:614)\ n“}
我该如何解决这个问题?提前致谢。我使用mac osx yosemite。
答案 0 :(得分:0)
在这种情况下,您启动JVM,然后运行启动shell的clojure函数,该shell启动另一个不同的JVM副本,然后在其中运行一个类。
如果将weka jar添加到类路径中,然后通过直接调用它从clojure中运行适当的方法,您可能会发现集成更容易。
该错误消息中提到的java参数是指由第二个shell启动的java副本,因此,如果确实想要转到该路由,请在“java”之前添加这些参数“-cp”,虽然我认为如果你不运行嵌套的JVM并且直接从clojure 使用java interop和{来调用weka,那么你的生活会更加愉快 {3}}
答案 1 :(得分:0)
我认为最好,最简单的方法是将WEB中的csv文件转换为arff。
对于70个数据集,我花了不到5分钟的时间,以后就避免出现此类问题。