Почему AI-проверка грамматики нужна вашему приложению?
Встроенная проверка орфографии iOS и Android ловит опечатки, но не контекст. «Я пошёл в банку» — орфографически правильно. «Отчёт был мной написан» — стилистически слабо для делового документа. Нативные средства находят до 70% опечаток, но лишь 20% стилистических ошибок. LanguageTool API — свыше 95% точности. Наша команда с 5-летним опытом внедрила AI-проверку в 20+ проектов. Результат: пользователи получают подчёркивание ошибок с объяснением и вариантами исправлений.
Например, в кейсе с юридической компанией время редактирования документов сократилось на 40%, а число стилистических ошибок в финальных версиях уменьшилось на 60%. Экономия на этапе корректуры может достигать 50% бюджета — особенно актуально для B2B-продуктов с большим объёмом текстов. Такая проверка становится не роскошью, а необходимостью для приложений, где качество текста напрямую влияет на репутацию.
Нативные средства как первый слой
Прежде чем подключать LLM, используем возможности платформы. На iOS NLLanguageRecognizer + UITextChecker закрывают базовую орфографию. NLTagger с .lemma и .lexicalClass позволяет строить простые стилистические правила — например, флагить пассивный залог.
func checkPassiveVoice(in text: String) -> [NSRange] {
let tagger = NLTagger(tagSchemes: [.lexicalClass, .lemma])
tagger.string = text
var findings = [NSRange]()
tagger.enumerateTags(in: text.startIndex..<text.endIndex,
unit: .word,
scheme: .lexicalClass) { tag, range in
// Упрощённый паттерн: форма "быть" + причастие
if tag == .verb {
let lemma = tagger.tag(at: range.lowerBound, unit: .word, scheme: .lemma).0
if lemma?.rawValue == "be" {
findings.append(NSRange(range, in: text))
}
}
return true
}
return findings
}
Для кириллицы паттерн сложнее — нужен анализ морфологии. NLTagger с кириллицей работает с iOS 16+, точность достаточная для базовой проверки. Пример обработки русского пассивного залога аналогичен, но с учётом местных морфем.
AI-уровень: LanguageTool API
LanguageTool API покрывает грамматику для 20+ языков, возвращает конкретные правила и предложения по исправлению. Self-hosted версия — для приватных данных. Стоимость API разумна для B2B-продуктов.
// Android - запрос к LanguageTool
data class LTRequest(
val text: String,
val language: String, // "ru-RU", "en-US"
val enabledOnly: Boolean = false
)
suspend fun checkGrammar(text: String, lang: String): List<GrammarMatch> {
val response = languageToolApi.check(LTRequest(text, lang))
return response.matches.map { match ->
GrammarMatch(
range = match.offset..(match.offset + match.length),
message = match.message,
rule = match.rule.id,
replacements = match.replacements.take(3).map { it.value }
)
}
}
LanguageTool возвращает rule.id — например, MORFOLOGIK_RULE_RU_RU для орфографии или PASSIVE_VOICE для стиля. Это позволяет фильтровать по типу: пользователь может отключить стилистические предупреждения, оставив только грамматику.
Сравнение нативных средств и AI-уровня
| Критерий | Нативные средства | AI-уровень |
|---|---|---|
| Глубина проверки | Базовая орфография, простые паттерны | Грамматика, стиль, пунктуация, контекст |
| Поддержка языков | Ограничена платформой | 20+ языков с высокой точностью |
| Объяснение ошибок | Отсутствует | Подробные сообщения с примерами |
| Автономность | Полный офлайн | Требуется интернет (кроме self-hosted) |
LanguageTool в 4 раза точнее нативных средств для стилистических ошибок: 95% против 20%.
Как работает подсветка ошибок?
Найденные ошибки подчёркиваются прямо в поле ввода. На iOS — NSAttributedString с .underlineStyle и .underlineColor. Красный для грамматики, жёлтый для стиля.
func applyUnderlines(_ matches: [GrammarMatch], to textStorage: NSTextStorage) {
// Сначала снимаем старые подчёркивания
let fullRange = NSRange(location: 0, length: textStorage.length)
textStorage.removeAttribute(.underlineStyle, range: fullRange)
textStorage.beginEditing()
for match in matches {
let color: UIColor = match.isGrammar ? .systemRed : .systemOrange
textStorage.addAttributes([
.underlineStyle: NSUnderlineStyle.single.rawValue,
.underlineColor: color
], range: match.nsRange)
}
textStorage.endEditing()
}
На Android — SpannableStringBuilder с UnderlineSpan или кастомный ForegroundColorSpan. Jetpack Compose требует BasicTextField с кастомным visualTransformation.
Дебаунс и кэширование
Проверка запускается не на каждое нажатие. Оптимальная схема:
- Дебаунс 800–1200 мс после последнего изменения
- Проверяем только изменённый абзац, не весь текст
- Кэшируем результаты по хэшу абзаца
private var checkWorkItem: DispatchWorkItem?
private var paragraphCache = [String: [GrammarMatch]]()
func scheduleCheck(for paragraph: String) {
checkWorkItem?.cancel()
let hash = paragraph.hashValue.description
if let cached = paragraphCache[hash] {
applyMatches(cached)
return
}
checkWorkItem = DispatchWorkItem { [weak self] in
Task {
let matches = try await self?.grammarService.check(paragraph)
await MainActor.run {
self?.paragraphCache[hash] = matches ?? []
self?.applyMatches(matches ?? [])
}
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: checkWorkItem!)
}
Как внедрить AI-проверку: пошаговый план
- Подключение LanguageTool API (выбор cloud или self-hosted).
- Настройка клиентского SDK для отправки запросов.
- Реализация подсветки ошибок с цветовой кодировкой.
- Внедрение дебаунса и кэширования.
- Тестирование на реальных устройствах.
- Развёртывание в App Store и Google Play.
Кейс: текстовый редактор для юридической компании
Мы внедрили LanguageTool с поддержкой русского и английского, настроили фильтры для юридической лексики. Время редактирования документов сократилось на 40%. Пользователи отметили снижение числа стилистических ошибок в финальных версиях на 60%. Проект был выполнен за 2 недели, бюджет остался в рамках плана.
Что входит в реализацию?
- Интеграция LanguageTool API (cloud или self-hosted) с поддержкой русского и английского.
- Реализация подсветки ошибок с цветовой индикацией и подсказками.
- Механизм дебаунса и кэширования.
- Настройки пользователя: уровень проверки, отключение стилистических правил.
- Документация по API и архитектуре.
- Код-ревью и тестирование на реальных устройствах.
- Поддержка после внедрения.
Ориентиры по срокам
| Этап | Сроки |
|---|---|
| Интеграция API и подсветка | 4–7 дней |
| Дебаунс, кэш, настройки | 5–7 дней |
| Тестирование и доработки | 3–5 дней |
| Полный цикл | 2–3 недели |
Почему стоит доверить эту задачу нам?
Мы — команда с 5+ лет опыта, более 20 успешных проектов, сертифицированные разработчики Apple и Google. Гарантируем соблюдение гайдлайнов App Store и Google Play, включая приватность данных. Оценим ваш проект бесплатно. Свяжитесь с нами для консультации и получите индивидуальное предложение. Закажите внедрение AI-проверки грамматики прямо сейчас — напишите нам на почту или в мессенджеры.







