Я написал свою собственную функцию максимального соответствия в Swift, чтобы разделить китайские предложения на слова. Он работает нормально, за исключением того, что при аномально длинных предложениях использование памяти превышает 1 ГБ. Мне нужна помощь, чтобы выяснить, как изменить мой код, чтобы не было этой проблемы с памятью. Я не уверен, связано ли это с тем, как я использую RealmSwift, или с моим алгоритмом в целом.
Вот мой код:
func splitSentenceIntoWordsWithDictionaryMaximumMatching(string: String) -> [String] {
var string = string
var foundWordsArray: [String] = []
var position = count(string)
while position > 0
{
var index = advance(string.startIndex, position)
let partialString = string.substringToIndex(index)
if let found = Realm().objects(Word).filter("simplified == '\(partialString)'").first
{
foundWordsArray.append(partialString)
position = position - 1
var partialStringCount = count(partialString)
while partialStringCount > 0
{
string = dropFirst(string)
partialStringCount -= 1
}
position = count(string)
index = advance(string.startIndex, position)
}
else if count(partialString) == 1
{
addNewEntryToDictionaryInTransaction(partialString, "", [partialString], partialString)
foundWordsArray.append(partialString)
var partialStringCount = count(partialString)
while partialStringCount > 0
{
string = dropFirst(string)
partialStringCount -= 1
}
position = count(string)
index = advance(string.startIndex, position)
}
else
{
position = position - 1
index = advance(string.startIndex, position)
}
}
return foundWordsArray
}