我正在尝试捕获用于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]说,但随后我收到一条消息,提示它无法下标。
答案 0 :(得分:0)
显然,数据值是Sequence。我可以使用以下代码解决问题:
training.rows[0].forEach { (key, value) in
print("\(key) *** \(value)")
for aValue in value.sequenceValue! {
print("aValue: \(aValue.stringValue ?? "fail")")
}