MLDataTable中的MLDataType中的值

时间:2019-02-06 14:43:56

标签: swift nlp

我正在尝试捕获用于MLWordTagger的MLDataTable中的MLDataValues。以下是可以在MLDataTable中读取的JSON文件。

[
{
"tokens": ["My","shoes", "are,", "blue" ],
"labels": ["NONE","CLOTHING","NONE","COLOR"]
},
{
"tokens": ["Her","hat","is","big,","and","red"],
"labels": ["NONE","CLOTHING","NONE","NONE","NONE","COLOR"]
}
]

以下代码从桌面读取文件并创建MLDataTable

import NaturalLanguage
import CreateML
import Foundation

let homeURL = FileManager.default.homeDirectoryForCurrentUser
let desktopURL = homeURL.appendingPathComponent("Desktop/short.json")

let training = try MLDataTable(contentsOf: desktopURL )
print("\(training.size)")

打印确认表已创建:

(rows: 2, columns: 2)

因此有两个表行。每个表行包含一行标签和一行令牌。我尝试从下面的一行中获取值:

training.rows[0].forEach { (key, value)  in
    print("\(key) *** \(value)")
    let test = value.sequenceValue?.dataValue
    print("test:  \(test)")

    if let new = test {
        print("new:  \(new)")
        //print("\(new.stringValue![1])")
    } else {
        print("failed")
    }
}

这将产生以下输出:

labels *** DataValue([DataValue("NONE"), DataValue("CLOTHING"),    DataValue("NONE"), DataValue("COLOR")])
test:  Optional([NONE, CLOTHING, NONE, COLOR])
new:  DataValue([DataValue("NONE"), DataValue("CLOTHING"), DataValue("NONE"), DataValue("COLOR")])
tokens *** DataValue([DataValue("My"), DataValue("shoes"), DataValue("are"), DataValue("blue")])
test:  Optional([My, shoes, are, blue])
new:  DataValue([DataValue("My"), DataValue("shoes"), DataValue("are"), DataValue("blue")])

“测试”似乎很接近我的实际需求,因为它是一个可选数组。但是,尝试通过定义“ new”来解开该链接不起作用。现在,“新”是DataValues。

此外,以下两项均失败:

如果让new = test?.sequenceValue?.dataValue.stringValue {    如果让new = test?.stringValue {

此外,尝试用以下内容解包“ new”将得到零结果:

print("new:  \(new.stringValue?.dataValue)")

我认为测试最接近我想做的事情。用test [1]说,但随后我收到一条消息,提示它无法下标。

1 个答案:

答案 0 :(得分:0)

显然,数据值是Sequence。我可以使用以下代码解决问题:

training.rows[0].forEach { (key, value)  in
    print("\(key) *** \(value)")
    for aValue in value.sequenceValue! {
        print("aValue:  \(aValue.stringValue ?? "fail")")
}