находить неалфавитные слова на любом языке с помощью быстрого
У меня есть несколько строк для некоторых языков (английский, итальянский, арабский, французский и т. Д.). Я хочу увидеть список слов, отличных от алфавита этого языка.
Например, для английского:
"thisŞĞstring" -> вернуть false
"формат строки corect" -> вернуть истину
Например, для арабского:
"كلمةabc" -> вернуть false
"كلمة" -> вернуть истину
Я не хочу вводить алфавит всех языков один за другим. Есть ли способ делать то, что я хочу?
1 ответ
Это не совсем то, что вы ищете, но регулярное выражение может находить буквы, не соответствующие конкретному сценарию, например:
let string = "he said こんにちは"
let regex = try NSRegularExpression(pattern: #"[\p{Letter}--\p{script=latin}]+"#)
if
let match = regex.firstMatch(in: string, options: [], range: NSRange(string.startIndex..., in: string)),
let range = Range(match.range, in: string)
{
print(string[range]) // こんにちは
}
Или если вы используете
[\p{Letter}--\p{script=arabic}]+
с «كلمةabc» он вернет «abc».
Опять же, вероятно, это не совсем то, что вы ищете, но вы можете использовать
NaturalLanguage
рамки для синтаксического анализа текста:
import NaturalLanguage
let text = "he said こんにちは"
let tagger = NLTagger(tagSchemes: [.language, .script])
tagger.string = text
let range = text.startIndex..<text.endIndex
let options: NLTagger.Options = [.omitWhitespace, .joinContractions]
tagger.enumerateTags(in: range, unit: .word, scheme: .language, options: options) { tag, range in
guard let tag = tag else { return true }
print(tag, String(text[range]))
return true
}
Возвращение:
NLTag(_rawValue: en) he
NLTag(_rawValue: en) said
NLTag(_rawValue: ja) こんにちは
Или если вы используете
.script
в
enumerateTags
:
NLTag(_rawValue: Latn) he
NLTag(_rawValue: Latn) said
NLTag(_rawValue: Jpan) こんにちは