Можно ли как то бороться с одинаковыми по написанию символами латиницы и кириллицы?
Нужно набрать в гугле "поиск кириллицы".
Ваш Кэп.UPDМда, я думал вам нужно просто в тексте увидеть визуально) Не правильно понял вопрос.
База - это уже слишком, имхо. Ну т.е. если она не меняется, то ладно, а если каждый раз пополняется, то сегодняшняя и вчерашняя функции могут давать разные результаты, и нужно будет заново перепарсивать старые данные. Разве что нужно исправлять опечатки, но это уже более крутая задача, чем в вопросе.
Думаю, нужен хитрый алгоритм. Превосходящее число символов - верное направление. Но также, имхо, нужно учитывать процент и тип символов и порядок слов.
Тип символов. Каждому символу ставим в соответствие число, которое означает русскость от 0 до 1. Например, Б = 1, i = 0, T = 0.5, то есть три варианта. Хотя я бы сделал исключение для пары символов Р = 0.4 и Х = 0.3. Вряд ли самолёт назовут Х320 (буква ха, хз как это звучать будет). Но это может вызвать казусы, так что решать вам. Хотя можно два массива придумать для разных случаев, но это уже сложно для понимания.
1) Считаем средний вес символа в слове. Тут всё очевидно. Но если 0.5, то не спешим округлять, а переходим к п.2
2) Когда вес 0.5, смотрим на предыдущее слово, если вы уверены, что это часть названия. Например, оно с большой буквы (если вы парсите цельный текст). Если у предыдущего слова вес тоже был 0.5, то тогда уже округляете текущее слово в определенную сторону.
3) Соответственно, если три и более слова в названии, то тоже их учитываете по цепочке.
4) Если заранее можно выделить название и быть уверенным, что все слова - его части, то можно посчитать среднюю температуру по больнице. И на её основе делать выводы о каждом слове, у которого вес 0.5.
То есть название
Аве Maria T100 считаем так: первое слово вес 0.66, второе слово вес 0.3, проблемы нет, а вот третье слово вес 0.5 - проблемка. Считаем среднюю по всему названию, выходит 0.44, то есть вывод, что Т - английская.
Хотя если присмотреться, то здесь вообще хорошо бы заменить Аве на Ave, но, как писал выше, это уже другая задача. Но напишу немного про неё. Я бы на вашем месте просто делал бы русский вариант и соответствующую ему латиницу и заносил бы в базу и считал. В случае, если оба названия после приведение встречаются по 1 разу, то есть где-то привели как Аве Мария, а где-то Ave Maria, то парсер вам сигналит ошибкой, а вы уже смотрите своими глазами на название и заносите его в исключение, чтобы везде было одинаково. Также есть опечатки типа AirBus - аналогично в базу, только преобразования по регистру, и вариантов больше - все возможные комбинации, из которых для ошибки достаточно накопить два разных варианта.
Простая регулярка по диапазону символов, если код символа выше значение(по идее выше 127 идет не латиница), то менять символы по словарю.