Значения из MLDataType в MLDataTable - PullRequest
       0

Значения из MLDataType в MLDataTable

0 голосов
/ 06 февраля 2019

Я пытаюсь перехватить значения 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], но затем я получаю сообщение, что его нельзя добавить в сценарий.

1 Ответ

0 голосов
/ 06 февраля 2019

По-видимому, значения данных являются Sequence .Я могу решить мою проблему с помощью следующего кода:

training.rows[0].forEach { (key, value)  in
    print("\(key) *** \(value)")
    for aValue in value.sequenceValue! {
        print("aValue:  \(aValue.stringValue ?? "fail")")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...