Artificial intelligence 标题中未声明标称值

Artificial intelligence 标题中未声明标称值,artificial-intelligence,weka,arff,Artificial Intelligence,Weka,Arff,我正在使用groovy从xslx生成一个arff文件, 但是,当我尝试在weka中打开此文件时,出现以下错误: 文件“…”未被识别为“Arff数据文件”。 原因: 标题中未声明标称值,读取标记[Ativo],第16行 我不明白为什么我会犯这个错误 有人能帮我修复这个错误,并解释它为什么会发生吗 生成的文件 @relation kd-itempedido @attribute tipopedido {Assistencia,Recompra,Venda,Troca} @attribute apro

我正在使用groovy从xslx生成一个arff文件, 但是,当我尝试在weka中打开此文件时,出现以下错误:

文件“…”未被识别为“Arff数据文件”。 原因: 标题中未声明标称值,读取标记[Ativo],第16行

我不明白为什么我会犯这个错误 有人能帮我修复这个错误,并解释它为什么会发生吗

生成的文件

@relation kd-itempedido
@attribute tipopedido {Assistencia,Recompra,Venda,Troca}
@attribute aprovado {0.0,1.0}
@attribute fasepedido {Aprovado,Cancelado,EmAprovacao,Liberado,Novo}
@attribute statusinternopedido {NegociarPagamento,PedidosDeTeste,AguardandoOcorrencia,Nada,AguardandoBoletoDeposito,PedidoDuplicado,SuspeitaDeFraude}
@attribute canal {Marketplace,Desktop}
@attribute origem {LojasAmericanas,Optimise,MercadoLivre,Cityads,Zanox,Zoom,Rakuten,Lomadee,Facebook,Viptarget,Submarino,Criteo,Muccashop,Chaordic,Walmart,Googlead,Nada,Extra,Lojaskd,Shopback,Afilio,Shoptime,Nextperformance,CarrinhoAbandonado,Bing}
@attribute mercado {S,N}
@attribute cluster {EntregaImediata,Fiprec,Icconv,Esgotado}
@attribute statusitem {Ativo}
@attribute statusproduto {Inativo,Ativo,AtivoSemEstoque,ForaDeLinha}
@attribute polo {Polo1,Polo3,Polo2}
@data
Venda,0.0,Novo,Nada,Desktop,Googlead,S,Fiprec,Ativo,Ativo,Polo2
Venda,0.0,Novo,Nada,Desktop,Googlead,S,Fiprec,Ativo,Ativo,Polo2
Venda,0.0,Novo,Nada,Desktop,Googlead,S,Ativo,Inativo,Polo2
Venda,0.0,Novo,Nada,Desktop,Muccashop,N,Ativo,Ativo,Polo3
Groovy(VM-Dfile.encoding=ascii utf-8 utf8)

@Grapes([
@Grab('org.apache.poi:poi:3.10.1'),
@Grab('org.apache.poi:poiooxml:3.10.1'))
导入org.apache.poi.xssf.usermodel.xssf工作簿
导入java.text.Normalizer
导入静态org.apache.poi.ss.usermodel.Cell*
导入java.nio.file.path
def path=“/home/eric/Documents/development/ufpr/Solid eric/ItemPedido1000.xlsx”
def relation=“kd itempedido”
def列=[“tipopedido”、“aprovado”、“fasepedido”、“statusinternopedido”、“canal”、“origem”、“mercado”、“cluster”、“statusitem”、“statusproduto”、“polo”]
def arff=“ItemPedido.arff”
新的xslxtoarfparser(路径、关系、列、arff);
类数据{
def rows=new ArrayList();
@凌驾
字符串toString(){
def s=“”
用于(行中的r){
适用于(右图中的d){
s+=d
如果(r.indexOf(d)<(r.size()-1))
s+=“,”
}
s+=“\n”
}
返回s
}
}
心房类{
定义描述;
def possibilidades=new HashSet();
def指数;
@凌驾
字符串toString(){
def builder=新的StringBuilder()
builder.append(“@attribute”).append(descripcao)
builder.append(“{”)
对于(defi=0;i
def工作簿=新XSSF工作簿(输入)
工作表=工作簿。getSheetAt(0)
}
}
def getAttributes(列){
for(sheet.getRow(0.cellIterator()中的单元格){
def index=cell.columnIndex
def description=parse(cell.stringCellValue).toLowerCase()
if(列.包含(说明)){

属性我已经有一段时间没有使用Weka了,但是查看您显示的文件和错误消息,我怀疑问题出在数据文件的最后两行。它们没有属性“cluster”的值


在S或N(对于属性“mercado”)之后,它们有“Ativo”。该“Ativo”值未定义为标称属性簇的可能值之一。但文件确实读取了“Ativo”(这就是错误消息显示“读取令牌[Ativo]”的原因“”,但它预期会读取群集属性的值,但它尚未预期statusitem属性的值。

我使用Weka已有一段时间了,但查看您显示的文件和错误消息,我怀疑问题出在数据文件的最后两行。它们没有“群集”属性的值

在S或N(对于属性“mercado”)之后,它们有“Ativo”。该“Ativo”值未定义为标称属性簇的可能值之一。但文件确实读取了“Ativo”(这就是错误消息显示“读取令牌[Ativo]”的原因'',但它预期会读取群集属性的值,但它尚未预期statusitem属性的值

@Grapes([
        @Grab('org.apache.poi:poi:3.10.1'),
        @Grab('org.apache.poi:poi-ooxml:3.10.1')])
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.text.Normalizer
import static org.apache.poi.ss.usermodel.Cell.*
import java.nio.file.Paths

def path = "/home/eric/Documents/development/ufpr/Solid Eric/ItemPedido1000.xlsx"
def relation = "kd-itempedido"
def columns = ["tipopedido", "aprovado", "fasepedido", "statusinternopedido", "canal", "origem", "mercado", "cluster", "statusitem","statusproduto", "polo"]
def arff = "ItemPedido.arff"
new XslxToArffParser(path, relation, columns, arff);

class Data{
    def rows = new ArrayList<List>();

    @Override
    String toString() {
        def s = ""
        for (r in rows){
            for(d in r){

                s+=d
                if(r.indexOf(d) < (r.size()-1))
                    s+=","
            }
            s+="\n"
        }
        return s
    }
}



class Atributo {
    def descricao;
    def possibilidades = new HashSet<Object>();
    def index;

    @Override
    String toString() {

        def builder = new StringBuilder()
        builder.append("@attribute ").append(descricao)
        builder.append(" {")
        for(def i = 0; i<possibilidades.size(); i++){
            builder.append(possibilidades[i])
            if((i+1) != possibilidades.size())
                builder.append(",")
        }
        builder.append("}").append("\n")
        return builder.toString();
    }
}

class XslxToArffParser {
    def attributes =[:];
    def data = new Data();
    def sheet = null;

    XslxToArffParser(path, relation, columns, arffPath){
        load(path)
        getAttributes(columns)
        collectData()
        saveArff(relation, arffPath)
    }

    def String parse(String s){
        s = Normalizer.normalize(s, Normalizer.Form.NFD)
        s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "")
        s = s.split(/[^\w]/).collect { it.toLowerCase().capitalize() }.join("")
        s = s.replaceAll(" ", "")
        s = s.replaceAll("[^A-Za-z0-9]", "")
        s = s.isEmpty() ? "Nada" : s
        return s
    }

    def load(path) {
        Paths.get(path).withInputStream { input ->
            def workbook = new XSSFWorkbook(input)
            sheet = workbook.getSheetAt(0)
        }
    }

    def getAttributes(columns){
        for (cell in sheet.getRow(0).cellIterator()) {
            def index = cell.columnIndex
            def description = parse(cell.stringCellValue).toLowerCase()
            if(columns.contains(description)){
                attributes << [(index):new Atributo(descricao: description, index: index)]
            }
        }
    }

    def collectData(){
        def headerFlag = true
        for (row in sheet.rowIterator()) {
            if (headerFlag) {
                headerFlag = false
                continue
            }
            def r = []
            for (cell in row.cellIterator()) {
                def index = cell.columnIndex;
                def value = cell.cellType == CELL_TYPE_STRING ? parse(cell.stringCellValue) : cell.numericCellValue

                def attr = attributes[index]
                if(attr != null){
                    attr.possibilidades.add(value)
                    r << value
                }
            }

            data.rows.add(r)
        }
    }

    def saveArff(relation, path){
        Paths.get(path).withWriter { writer ->

            writer.write "@relation " + relation
            writer.write "\n"
            for(a in attributes.values())
                writer.write a.toString()

            writer.write "@data"
            writer.write "\n"

            writer.write data.toString()
        }
    }
}