Вы можете обучить MLWordTagger для этой задачи.Создайте файл данных тренировки (JSON) в этом формате.
[
{
"tokens": [
"Club game",
"at",
"Nehru Stadium Chennai",
"on",
"Saturday Morning"
],
"labels": [
"TITLE",
"NONE",
"LOCATION",
"NONE",
"TIME"
]
},
... other sample records...
]
Вы можете тренироваться с кодом ниже в Playground.
var trainingData = try MLDataTable(contentsOf: URL(fileURLWithPath: "/pathto..train.json"))
let model = try! MLWordTagger(trainingData: trainingData, tokenColumn: "tokens", labelColumn: "labels")
И затем использовать этот метод прогнозирования, чтобы предсказать каждый из ваших токенов в предложении.
func prediction(from tokens: [MLWordTagger.Token]) throws -> [String]
Этот метод возвращает массив тегов для токенов.
Альтернативный способ сделать это - использовать NLTagger, который уже способен определять географические названия, названия организаций, но время.
import NaturalLanguage
let text = "Club game at Nehru Stadium, Chennai on Saturday Morning."
let tagger = NLTagger(tagSchemes: [.nameType])
tagger.string = text
let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames]
let tags: [NLTag] = [.personalName, .placeName, .organizationName]
tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .nameType, options: options) { tag, tokenRange in
if let tag = tag, tags.contains(tag) {
print("\(text[tokenRange]): \(tag.rawValue)")
}
return true
}
Это вернет вывод ниже, поэтому вам нужно будет только обучить модель, чтобы обнаружить наречие времени.
Nehru Stadium: PlaceName
Chennai: OrganizationName