находить неалфавитные слова на любом языке с помощью быстрого

У меня есть несколько строк для некоторых языков (английский, итальянский, арабский, французский и т. Д.). Я хочу увидеть список слов, отличных от алфавита этого языка.

Например, для английского:

"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) こんにちは
Другие вопросы по тегам