>> 1. С помощью PCRE выкидываю из текста всё, кроме букв (\p{^L}).
>> 2. Так же убираю русские и английские буквы ([а-яa-z]).
>> 3. Если что-то осталось — считаю текст не русским и не английским, соответственно отбрасываю.
В английском тексте могут быть заимствованные слова, сохранившие оригинальное написание café, Übermensch и т.д. Кроме того, текст на языке с латинским алфавитом может набираться без диакритики, если он набирается на компьютере, на котором установлена только английская раскладка.
Сделайте для каждого нужного языка список распространённых в нём служебных слов, местоимений и т.д., которые не используются в остальных языках и проверяйте их наличие в тексте.
К примеру, для итальянского, немецкого, французского замечательно подойдут артикли, местоимения и вспомогательные глаголы (К примеру, немецкий: ein, eine, eines, einem… der, die, das, dem, den… bin, bist, ist, war, wurde… ich, er, sie..., также приставка ge- при окончании -en или -t и т.д.). Только не доверяйте одному найденному слову на 100%, к примеру, bin (нем. = «есмь») есть в английском (напр. «recycle bin», вообще, весело, наверно, немцам английский учить… сравните в этих языках значения слов mist, after, gift).
Кроме того, можно добавлять вероятность, обнаружив типичные для данного языка сочетания букв (для немецкого sch, ei...). Для определения украинского кроме наличия в тексте є, ї, і, ґ, отсутствия ы и ъ можно использовать поиск і в качестве союза.
Если языков немного, то несложно собрать данные об их особенностях.
Ещё можете поэксперементировать с Google Language API (
пример).
Кроме того, можете погуглить «language identifier», может найдётся что-то готовое подходящее.