【问题标题】:Converting sparse matrix to ARFF using awk使用 awk 将稀疏矩阵转换为 ARFF
【发布时间】:2013-10-03 11:54:02
【问题描述】:

我正在处理一个非常大的稀疏矩阵格式的数据集。

数据具有归档格式(3个制表符分隔的列,其中第一列中的字符串对应一行,第二列中的字符串对应属性,第三列中的值是加权分数)。

church place 3
church institution 6
man place 86
man food 63
woman book 37

我想使用 awk(如果可能的话)将其转换为 arff 格式,以便使用上述作为输入,我可以获得以下输出:

@relation 'filename'
@attribute "place" string
@attribute "institution" string
@attribute "food" string
@attribute "book" string


@data
3,6,0,0,church
86,0,63,0,man
0,0,0,37,woman

我已经看到这个 awk 文件完成了HERE,它产生的结果与我需要的非常相似。 但是,输入有点不同。我试图通过更改 FS = "|" 来操纵提供的代码到“\t”,但它不会产生预期的结果。 有没有人建议我如何操纵这个 awk 代码将我的输入转换为我想要的输出?

【问题讨论】:

    标签: awk converter arff


    【解决方案1】:

    我不知道 arff 是什么(我也不需要知道来帮助您将文本转换为不同的格式)所以让我们从这个开始:

    $ cat tst.awk
    BEGIN{ FS="\t" }
    NR==1 { printf "@relation '%s'\n", FILENAME }
    {
        row = $1
        attr = $2
    
        if (!seenRow[row]++) {
            rows[++numRows] = row
        }
    
        if (!seenAttr[attr]++) {
            printf "@attribute \"%s\" string\n", attr
            attrs[++numAttrs] = attr
        }
    
        score[row,attr] = $3
    }
    END {
        print "\n\n@data"
        for (rowNr=1; rowNr<=numRows; rowNr++) {
            row = rows[rowNr]
            for (attrNr=1;attrNr<=numAttrs;attrNr++)  {
                attr = attrs[attrNr]
                printf "%d,", score[row,attr]
            }
            print row
        }
    }
    $
    $ cat file
    church  place   3
    church  institution     6
    man     place   86
    man     food    63
    woman   book    37
    $
    $ awk -f tst.awk file
    @relation 'file'
    @attribute "place" string
    @attribute "institution" string
    @attribute "food" string
    @attribute "book" string
    
    
    @data
    3,6,0,0,church
    86,0,63,0,man
    0,0,0,37,woman
    

    现在,告诉我们有什么问题,我们可以从那里开始。

    【讨论】:

    • 该输出的唯一问题是,它将属性“place”视为两个单独的属性,而不是 n 行可以具有的一个属性,如所需输出示例中所示我原来的问题。
    猜你喜欢
    • 2023-04-10
    • 2021-11-25
    • 2017-07-02
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多