Я пытаюсь перехватить значения MLDataValues внутри MLDataTable, используемые для MLWordTagger.Ниже приведен файл JSON, который может быть считан как MLDataTable.
[
{
"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")])
«test», кажется, близок к моей фактической потребности, так как этонеобязательный массив.Однако попытка развернуть это путем определения «нового» не работает.«новый» теперь DataValues.
Кроме того, оба следующих сбоя:
если let new = test? .SequenceValue? .DataValue.stringValue {если let new = test? .StringValue {
Также при попыткеРазвертывание «нового» с помощью следующего дает нулевой результат:
print("new: \(new.stringValue?.dataValue)")
Я думаю, что тест ближе всего подходит к тому, что я хотел бы сделать.Скажем, с test [1], но затем я получаю сообщение, что его нельзя добавить в сценарий.