Я расскажу, как вам это сделать.
Капитализация
Это довольно близко к Распознавание именованных сущностей и является примером«проблема маркировки последовательности».Собственные существительные должны быть заглавными, названия организаций, которые являются аббревиатурами, должны быть заглавными, а затем есть другие примеры, которые выходят за пределы этих категорий.Мне кажется, что это будет сложнее, чем NER, и поэтому простой словарный подход, вероятно, не будет идеальным решением.
Если бы вы использовали скрытую марковскую модель, это было бы равносильно«скрытое» состояние HMM be [lowerCase, initCaps, allCaps] и обучение некоторым данным, которые, по вашему мнению, являются правильными (например, Википедия, но есть и много других источников).Затем вы выводите скрытое состояние для слов, которые, вы не уверены, правильно написаны заглавными буквами.Существует множество библиотек HMM, и я уверен, что вы сможете найти такую, которая соответствует вашим потребностям.Я бы сказал, что попытка НММ - это хороший начальный выбор.
Не ASCII-символы
Как вы уже догадались, более сложная проблема.Если бы вы попытались сделать это с помощью HMM на уровне слов, у вас было бы огромное количество скрытых состояний, по одному на каждое акцентированное слово, которое, вероятно, было бы невозможно обучить.Эта проблема более понятна на уровне персонажа, но вы теряете огромное количество контекста, если вы рассматриваете только предыдущего персонажа.Если вы начнете использовать n-граммы вместо символов, ваши проблемы с масштабированием вернутся.Короче говоря, я не думаю, что эта проблема похожа на предыдущую, потому что количество меток слишком велико, чтобы считать это проблемой маркировки последовательности (я имею в виду, что вы можете, это просто не практично).
У меня естьне слышал об исследованиях в этой области, то опять же я не эксперт.Моим лучшим предположением будет использование общей языковой модели для языка, который вас интересует. Вы можете использовать это, чтобы дать вам вероятность предложения на языке.Затем вы можете попробовать заменить символы с акцентом, чтобы получить вероятности этих предложений и взять наиболее вероятное, или использовать какой-то порог разницы или что-то в этом роде.Вы можете довольно легко обучить n-граммовой языковой модели на большом корпусе определенного языка.
Я понятия не имею, сработает ли это на самом деле, с точки зрения точности или эффективности.У меня нет прямого опыта решения этой конкретной проблемы.
Транслитерация
Не знаю, если честно.Я не знаю, где вы могли бы найти данные для создания собственной системы.После непродолжительного поиска я нашел сервис Google Transliteration (с API).Возможно, он делает то, что вы после.У меня даже недостаточно опыта работы с другими сценариями, чтобы понять, что он делает.