您可以为此任务训练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