Action information
284,52
рейтинг
16 октября 2012 в 14:21

Дизайн → Как определить язык напечатанного текста? (Европейские языки)

Увидев красивую и понятную блок-схему, описывающую, как отличать одну письменность от другой, я удивился. В первую очередь тому, что это оказалось кому-то интересным. Но раз уж та схема показалась любопытной, то я попробую продолжить тему, начатую уважаемым soulburner. Здесь речь пойдёт о том, как отличать друг от друга европейские языки.

Для начала – что такое европейские языки. Предлагаю ограничиться государственными языками стран Европы. Так как границы Европы – вещь спорная, то отдельно оговоримся про соседние страны. Духовно близкий Израиль, а также Грузию и Армению можно отличить по письменности из той же блок-схемы, Азербайджан и Казахстан я включу по доброте душевной, а Абхазию и Южную Осетию – в качестве прогиба перед российской властью. Так что абхазский в наш классификатор попадёт, а баскский и гэльский – ну уж нет, перебьются.

Языков больше, чем типов письменности. Поэтому диаграмка получилась большая. Отличать языки друг от друга будем в основном по особенным буквам, в частности, по буквам с диакритическими значками (диакритикой). Диакритика бывает над гласной (в букве й), над согласной (буква č) или может как-то сопровождать букву (как в букве ç; строго говоря это не дикритика вовсе, но мы здесь будем придерживаться такого жаргона). Наиболее известные (с моей точки зрения) значки в Европе — это умляут (он же диаерезис: ü), гачек (č) и акут (é).




UPD: Коллеги помогли исправить цвета, поправил пару ошибок, указанных пользователями (турецкий и польский языки), упомянул про французские артикли (если кто-то хочет реально схемой пользоваться, то они надёжно отличают французский от других романских, и встречаются не реже диакритики).
старая версия схемы .
Автор: @57DeD
ABBYY
рейтинг 284,52
Action information

Комментарии (130)

  • +23
    Серьезный кусок работы.
  • +8
    Всё хорошо, кроме допущения того, что пользователь схемы может сразу самостоятельно распознать русский язык (я хотел бы эту схему, с вашего позволения, перевести на английский и дать коллегам попользоваться).

    Есть ли какие-то критерии по которым можно отличить именно русский от других кириллических языков (украинского, болгарского, etc.)?
    • +14
      Конечно есть. Присутствие Щ, Ь, Ю или Я, указывает на русский, украинский, болгарский или белорусский. Если при этом одновременно присутствуют Ы и И — это точно русский: в болгарском и украинском нет Ы, а в белорусском — И. В болгарском ещё нет Э. А что дополнительно _есть_ в украинском и беларусском — это на схеме указано.
      • –1
        А по каким критериям Вы бы отличили текст на белорусском языке, записанный латиницей, от польского?
      • +4
        В беларуском языке нет буквы Щ
      • +2
        Там еще английский подобным образом указан. И французский в одном месте. Как отличить их?
        • +1
          по диактрическим знакам вроде — ê, è, ë, ï, ã
      • +1
        Ну а вот это на каком языке?

        Тусем, сăртсем хуп-хура
        Юрĕ кайса пĕтнĕрен,
        Тухать курăк çăп-çăра
        Хĕвел хытă хĕртнĕрен.
        Сивĕ, хаяр хĕл иртет,
        Каять йĕрсе, хурланса,
        Сивĕ куççулĕпе йĕрет
        Иртнĕ куншăн хуйхăрса.
        • –3
          Эрзянский же, в таблице не упомянут, говорят на нём в Мордовии.
          • +4
            А гугл по слову «хуйхăрса» почему-то выдает ссылки на Чувашию:)
          • +1
            Это чувашский. Алфавит эрзянского совпадает с русским. С чего вы взяли, что это эрзянский? Чувашский трудно не узнать, буквы ç, ă, ĕ однозначно указывают на него.
            • +3
              Чувашский трудно не узнать
              В самом деле, как же это мы так =)
        • +4
          Чувашский!
        • 0
          хамар ял
    • +1
      За другие языки не скажу, но про украинский могу. В украинском может встречаться апостроф <`> и перевернутая буква Е — <Є>. Нет так же твердого знака !<Ъ> и буквы !<Ы>. Характерным отличием от русского может служить то, что вместо !<Ы> пишут <И>. А, и еще нет буквы !<Ё>
      • +13
        Мне, в последнее время кажется, что многие считают, что буквы «Ё» и в русском больше нет.
        • +12
          Пока у Яндекса есть две в лого на главной, «Ё» в безопасности.
      • +1
        В белорусском тоже есть апостроф и нет твердого знака. В русском языке тоже можно встретить апостроф (д’Артаньян, но дартаньяновский; О’Нил, но: О. Генри; E-mail’ом).
        • +1
          Каюсь, пойду учить родной язык.
  • +2
    Хочу добавить, что программисты на C/Java могут воспользоваться библиотекой ICU, в которой есть не только функции определения языка, а также множество других полезных функций, связанных с локализацией.
    В принципе, описание этой библиотеки может потянуть на отдельную статью
    • +3
      А если ещё есть словари, то, конечно, язык определить проще и надёжнее. Схема предназначена скорее для людей, чем для компьютеров. Типа на девушку впечатление произвести :)
      • +1
        И зачем словари? По значениям keyCode вполне можно отличить латиницу от кириллицы, найти необычные буквы… Ну дополнительно там сдвооееенныыее глааасныеее поискать.
    • +1
      Тема называется «Как определить язык напечатанного текста?»
  • +2
    Офигенная работа, спасибо…

    На этих местах спрятанных среди огромной схемы смеялся до слез )))
    Уж не английский ли? Ой, да
    Точно не французский? Ой, он

    • +8
      Приятно слышать ;)
      Про финский не заметили?
  • +4
    по ß можно еще различать варианты немецкого. В швейцарском немецком ее нет.
    • +3
      Да она и в обычном немецком уже deprecated… Почти везде сейчас используется ss вместо эсцет. Так что совет искать эсцет скорее актуален, если перед вами текст из XX века.
  • +2
    MAH EYES! А можно не с цветами «вырвиглаз» вариант?
    • +4
      Посоветуйте, пожалуйста, с какими именно.
      • –1
        fff9c3, c7f3df, ebe0ff, ffcdbc

        На их фоне текст будет читаться гораздо лучше.
        • +1
          ОК, спасибо, постараюсь переделать позже.
        • +1
          Это вы варианты вместо 0xFF0000 предложили, или цветовую схему?
          Просто, насколько я вижу, только красный сильно глаза режет.
          • +1
            Я предлагаю заменить всю цветовую схему на «пастельную», а оформление блок-схемы сделать по ГОСТу.
            • 0
              Цвета поправил, что касается ГОСТа, то он распространяется на алгоритмы, а здесь скорее наборы эвристик. Так что форму блоков я постарался выбрать к стандартной поближе, но не совпал, разумеется.
      • +1
        Да и в целом оформить как блок-схему можно, читаться лучше будет и людей к правильному оформлению будет приучать. Правила можно посмотреть вот здесь, например.
        • +1
          не надо блок-схему, надо mind-карту, она легче читается.
  • +1
    Интересно было бы увидеть алгоритм автоопределения языка у translate.google.ru/.
    • +3
      Там гораздо проще, полагаю. Смотрим, какой словарь больше слов узнаёт — и определяем. Думаю. как-то так…
      • +3
        Фу, как грубо. На 99% уверен, что первоначальное отсеивание — по значениям юникод-символов, а дальше уже уточняющие итеррации в виде поиска ключевых основ и похожих фрагментов.
  • +1
    Не нашёл татарский.
    • +1
      Я ограничился государственными языками стран Европы. Автономии не вошли.
      • +5
        Нужна аналогичная схема про языки народов Российской Федерации.
        • +3
          Лучше сразу всего СНГ.
      • +2
        А разве каталанский язык — государственный?)
        Upd. Да, уже увидел, забыл про Андорру(
        • +2
          Да. В Андорре.
  • –1
    Расширить бы ветвь закорючек до азиатских языков
    • +2
      Азиатские были раньше, как сказано в начале.
      • +2
        Не все — есть ещё монгольский, индонезийский, вьетнамский… Возможно, расширю на них тоже.
        • +1
          Ну, они и далеко не европейские.
        • +2
          Есть еще африканские языки, тоже имеющие письменность на основе латинского алфавита. Было бы интересно для них такой определитель сделать.
  • +3
    Рядом с казахским можно было бы добавить киргизский.
    Отличается наличием Ө, ү и отсутсвием перечеркнутой ү с носовой к
    • +1
      каким таким боком вообще Казахстан и уж тем более Кыргызстан относятся к Европе?
      • –1
        Полагаю на этот вопрос автор ответил в посте
        Так как границы Европы – вещь спорная, то отдельно оговоримся про соседние страны. Духовно близкий Израиль, а также Грузию и Армению можно отличить по письменности из той же блок-схемы, Азербайджан и Казахстан я включу по доброте душевной, а Абхазию и Южную Осетию – в качестве прогиба перед российской властью. Так что абхазский в наш классификатор попадёт, а баскский и гэльский – ну уж нет, перебьются.

        Но раз включили Казахстан, то почему бы и не Кыргызстан с Узбекистаном.
        • –2
          Часть Казахстана находится в Европе (на Урале). Кроме того, это вопрос политический — казахи не очень любят, когда их причисляют к Средней Азии. Даже в СССР их вроде бы различали.
          • +1
            Как житель Казахстана не считаю, что мы живем в Европе и как-то к ней относимся. Пусть мелкий кусок и лежит теоретически, но основная часть все же в Азии. Да и казахи — все же азиаты, а не европейцы.
            • +3
              Не в обиду будь сказано. Речь шла не о том, что «Европа — значит не Азия», а о стремлении, по крайней мере части политиков, подчеркивать свою принадлежность к обоим частям света, подобно Турции или России, в качестве связующего звена. В то время как, например, Киргизия — это уже исключительно Азия.

              В целом, учитывая, что в обзор азиатских языков среднеазиатские не попали, автору следовало бы озаглавить пост как «языки Европы и бывшего СССР», и туда уже попадут все кириллические.
    • +3
      Ѳ есть в башкирском. Уфа по-башкирски пишется как Ѳфѳ.
      Башкирский от татарского можно отличить по наличию буквы Ҙ.
    • +2
      В казахском Ө тоже есть.
  • +1
    У польского указано «Перечёркнутая Ł» должно быть просто перечеркнутая L а не Ł(ведь Ł и так уже перечеркнутая, куда ей еще перечеркнутей).
    У испанского тоже указали «перевёрнутые знаки: ¡ и ¿» — они и так уже для нас перевернутые, а если их еще перевернуть то они станут нормальными для нас.
    Понятно что имелось ввиду но по смыслу неправильно написали.
    • +4
      1е правильно, а по поводу испанского не соглашусь.
      Знаки препинания имеют значение. Сравните «перевёрнутые знаки: ¡ и ¿» и «перевёрнутые знаки ¡ и ¿»
      • –3
        Что-то я не понял ход вашей мысли по поводу второго.
        • +3
          Двоеточие в «перевёрнутые знаки: ¡ и ¿» заменяет по смыслу строку ", такие как".
          • –1
            Ну я понимаю, только меня не поняли видимо.
            Я хотел сказать что «перевёрнутые знаки: ¡ и ¿» =! и? а это уже встречается не только в испанском.
            Правильным тут будет следующее: «перевернутые знаки:! и ?» — раз они перевернутые значит становятся "¡ и ¿".
            Или можно было просто написать «знаки: ¡ и ¿».
            Я надеюсь теперь все все поняли.
  • +2
    Схема большая, круто было бы кастовать в тред дизайнера, дабы он ее сделал более удобочитаемой и комфортной. А так огромный респект автору, тема интересная.
  • 0
    Еще вопрос: про ирландский Вы все написали правильно, но эти особенности характерны для всех кельтских языков. Как отличить ирландский от шотландского или от бретонского в таком случае?
    • +1
      В бретонском будут ñ которых нет в ирландском, множество окончаний и пары zh, а также очень характерное c'h.
      • 0
        Кстати, да. Про ñ я забыл совсем:))
        • 0
          А вот на слух…
          В качестве эксперимента, предлагаю найти на youtube и послушать Bro Gozh ma Zadoù (бретонский гимн) и Bro Goth agan Tasow (один из корнуэльских гимнов).
    • +1
      Попробую описать еще различия между ирландским и шотландским:
      В шотландском будет диакритика у гласных и такая à, и такая á, а в ирландском только такая á.
      При этом в шотландском могут быть слова, начинающиеся с апострофа и согласной: 's, 'g.

      А вот с корнуэльским и валлийским проще — в первом вообще нет диакритики, а во втором — только «домики» над гласными и ŵ.

      О других кельтских вообще ничего сказать не могу — лохматая экзотика.
      • 0
        Спасибо, просветили! Таких деталей я не знал:)))
  • 0
    Предлагаю ограничиться государственными языками стран Европы.

    Так что абхазский в наш классификатор попадёт, а баскский и гэльский – ну уж нет, перебьются.

    Откуда тогда в классификаторе каталанский? Вопиющая несправедливость!
    • +4
      Андорра.
      • 0
        Ух ты!
        Спасибо за просвещение.
  • +1
    это умляут (он же диаерезис: ü).

    Умляут и диаерезис разные значки: ilyabirman.ru/meanwhile/all/yo-dots/
  • 0
    Много слов с заглавной буквы (явно не имена собственные)

    Так было принято и в датском до 1948, и в английском в 18 веке — включая, например, оригинальный текст Конституции США, которая по этому классификатору окажется на немецком.
    • +1
      Предлагаемая автором методология не всегда отличается однозначностью результатов. Если ей следовать, то ретороманский можно принять и за санго, и за хауса — там используются такие же точно диакритические знаки…
    • +1
      не окажется. Там вначале вопрос «Уже не английский ли?» и только если «нет», то «Много слов с заглавной буквы». А Конституция США будет «ой, да»
  • +1
    А почему бы не использовать ngram
    • 0
      Все n-граммы запомнить сложно :)
      Схемка скорее для человеческого развлечения, я не предлагаю с её помощью что-то серьёзное программировать.
      При программировании я бы для каждого языка завёл бы множества букв «из алфавита», «возможно в заимствованиях» и «не бывает такой», плюс отслеживал бы характерные слова (см. признаки для итальянского и нидерландского).
      Ну или бы совсем из пушки по воробьям — словарями и n-граммами (при условии, что они есть в доступе).
  • +1
    Спасибо большое за огромную работу, но дизайн ужасный :(.

    Добавлю эсперанто — латиница, диакритика (c, h, g, u с диакритикой, либо используется написание ch, hh, gh, u / cx, hx, gx, ux). Много слов, заканчивающихся на «o» (там все существительные заканчиваются).
    • 0
      * уточню: данные буквы в алфавите эсперанто есть и с диакритикой и без неё. Например, есть «c» с диакритикой (читается как «ц»), а есть без диакритики (как «ч»). Это 2 разные буквы.
    • 0
      По просьбе эсперантистов поправлю:
      В эсперанто есть буквы ĉ ĝ ĥ ĵ ŝ ŭ. Диакритики углом вверх над согласными нет больше ни в каком языке, так что если таковая нашлась, то это эсперанто.
      На -о оканчиваются не все существительные, а только в именительном падеже единственного числа.
      При этом ĉ читается как ч, а c как ц, а не наоборот :)
  • 0
    Я бы вхождение в кириллице оставил как есть, а в разделе с латиницей сербскохорватский назвал хорватосербским :)
    • +1
      Лучше придумать, как различать его разновидности на глаз. Там отличий не больше, чем между текстами на украинском и на суржике с точки зрения китайца, но они есть.
  • 0
    «Много w в качестве гласной, а также dd, y» — валлийский.
  • +1
    К кириллице можно еще добавить молдавский (СССР и Приднестровье) — по букве Ӂ с краткой (читается «дж»).
    • 0
      Или русинский: одновременное использование i, и, ы и сочетания «ьы» и «йи».
    • 0
      Разве молдавский это не кириллизированная версия румынского? Насколько я знаю в Молдове — национальный язык румынский, а т.н молдавский — пережиток совка
      • 0
        То есть нет такого языка — как молдавский. Хоть и в конституции написано что национальный язык Молдовы молдавский но это только потому что не могли написать что он румынский, а на деле же чистый румынский
        • +1
          Зато с 2007 года есть черногорский, в котором от сербского еще меньше региональных отличий. Политика. Стоит отметить, что использование немецкого языка не мешает существовать независимой Австрии, так что румынские унионисты могут фапать на общий язык сколько угодно, «унире» это не поможет.
          • +1
            Языковая политика — вообще очень интересная и непредсказуемая штука. Когда-то (после присоединения Бессарабии к СССР) молдаване намеренно постулировали отличия своего языка от румынского. Когда развалился Союз — перевели свой язык на латинский шрифт и стали старательно нивелировать лексико-грамматические отличия. В бывшей Югославии, как я понимаю, ситуация с сербскохорватским языком развивалась по похожему сценарию…
            • +1
              Имхо, все там предсказуемо было. Когда великорумыны не в демократию игрались, а с фашистами заигрывали, они там развернули такую национальную политику, что и молдаване (которые постарше), и тем более буковинцы до сих пор отмечают 28 июня как день освобождения. Да и сейчас им лижут зад в основном из-за того, что они в ЕС и не «коммунисты-сталинисты». Я как-то активно спорил на ютубе с унионистами — быдло непробиваемое, фантазии хватает лишь на посыл оппонента в Сибирь (за что они получали краткую лекцию по национальной политике на отборном украинском:)).
      • 0
        А латынь, значит, пережиток древнего Рима:). Не намерен ввязываться в лингвополитические споры, но молдавская кириллица — как бы там ни было, знакомый каждому из нас артефакт советской культуры и до сих пор официальный язык ПМР, на ней что-то издается, а значит задача ее распознавания представляет интерес не только для любителей истории, как, например, изначальная румынская кириллица (другая, с особыми символами) или еще более экзотическая литовская.
      • +2
        Кириллица использовалась в Румынии вплоть до 19 века, совок тут ни при чем.
        А молдавский и румынский — это, скорее, два варианта одного и того же языка.
  • –1
    По ходу для роботов нужно будет прописывать и такие «алгоритмы»:

    мешанина из латиницы, кириллических И, Я, Д при полном отсутствии N, R, А — американская пародия на кириллицу:)
    А без перекладины: латиница — логотип Samsung, кирилица — логотип Слпслн:)
  • 0
    А не проще иметь индексированные словари для всех языков и искать по ним?
    • 0
      Ответил чуть выше (на вопрос про n-граммы).
  • 0
    Вставлю свои пять копеек, про автоматическое определение языка компьюетром.

    Один из способов определения языка, это частотный анализ текста. То есть подсчет количества каждой буквы и сочетаний этих букв в тексте. Для каждого языка свойственен «свой отпечаток». Но этот способ будет работать только для достаточно больших текстов.

    Да, может изначально частотный анализ пошел из криптографии, но его можно использовать и во вполне мирных целях)
  • 0
    >>«Какой-то вариант Сербскохорватского»

    У вас почему-то все упирается в «Черногорский» без вариантов. Здесь можно увеличить выборку до разветвления на сербский, хорватский, черногорский, албанский, боснийский.

    П.с.: в Сербии, кстати, официально существуют два написания — латиницей и (условно) кириллицей.

    • +2
      албанский отдельно
    • 0
      Кстати, а как распознать боснийский или черногорский?
      Допустим, сербский распознается по отсутствию буквосочетания -ije- на каждом шагу, вместо которого просто -e-. Хорватский — по очень «славянским» корням и названиям месяцев, похожими на украинские (они, кстати, смещены на месяц, видимо из-за разницы в климате). В описании черногорского наткнулся на такие извращения, которых не встречал даже в Цетинье. А боснийский — по «иншалла», что ли:)
  • –1
    несколько лет назад ß в немецком официально отменили.
    • 0
      Гм. А что теперь, «ss»?
      М-да, похоже, скоро и умляуты отменят…
    • 0
      несколько лет назад ß в немецком официально отменили

      То-то в Германии на каждом шагу знаки указатели ...straße…

      Может официально и отменили, но как-то никто, похоже, не торопится этим руководствоваться.
  • 0
    Баскский (euskara): букв c, q, v, w нет, диакритики, кроме ñ, тоже нет.
  • 0
    Справа налево пишется не только иврит. Как минимум арабский сюда же, а оба упомянутых алфавита хоть и основаны на финикийском письме, хоть и языки в принципе родственные, а всё же выглядят очень уж разно.
  • –2
    A ja inogda (pri otsutstvii na kompě russkoj raskladki) vot tak vot pišu latinicej po-russki ibo anglijskaja translitěracija něskoľko razdražajet, a takoj variant kažetsä vpolně jestěstvěnnym.

    Единственная найденная мной фонема русского языка, которую не передать таким способом — это оконечное «сь» как в «случилось» и т.п.
  • +1
    Про финский поправлю — в нем может встречаться Å (очень много заимствований со шведского), Š и Ž (также в заимствованных словах). Если же говорить не о заимствованных словах, то дополнительным критерием может служить отсутствие букв: C, Q, X, W, Z.
  • 0
    Добавлю от себя еще и про таджикский: наличие специфических символов ғ, ҳ, қ ,ҷ; ӣ на конце слов; в некоторых словах (в арабизмах) может встречаться твердый знак после букв, обозначающих гласные звуки.
    • 0
      То же татарский, башкирский, чеченский, мордовский, чувашский и т.д. — тоже есть специфические буквы. Причем, к примеру, татарский от башкирского можно определить или по некоторым буквам, а в отдельных предложениях определить татарский или башкирский нельзя.
      • +1
        В двух мордовских языках нет никаких специфических букв по сравнению с русским.
        • 0
          Значит про мордовский напутал, извините.
      • 0
        Татарский от таджикского отличим довольно легко — там есть специфические символы ә,ү, h. В башкирском (об этом уже писали в комментах выше) есть специфические графемы, которых больше ни в одной письменности нет.

        Чеченский — специфическая графема I, буквосочетания aь, уь, оь и т.п. Правда, его будет сложно отличить от ингушского и некоторых дагестанских.

        В чувашском — особые диакритические знаки над гласными есть (см. пример в комментах к этому топику выше).
        • 0
          В татарском есть буква җ, которой нет в башкирском, а в башкирском ғ, ҡ, ҙ, ҫ. Но при этом есть слова и предложения без этих отличий и для них нужен не графический анализ, а анализ собственно аффиксов, словаря буквосочетаний и тп.
          А то выдет, что в башкирском тексте часть текста определится как татарский, а часть как башкирский.
          При том, что в текстах бывают прямые цитаты из другого языка, в том числе и русского.
          При этом все эти меры не спасут от диалектизмов и диалектных «вариатов» грамматики, в которых бывают в татарском башкирские ғ и ҡ, а в некоторых башкирских — татарское җ.

          Впрочем колебания в грамматике это любого диалекта любого языка, в том числе и русского.

          Также интересно, есть ли распознавание церковнославянского, древнеисландского, языка тюрки и старых грамматик, к примеру, датского или норвежского.
          • 0
            Конечно, без частотного анализа грамотное распознавание невозможно, здесь я с Вами согласен.
  • –1
    А насколько близка данная схема к программе Полиглот 3000 (http://www.polyglot3000.com/ru/index.shtml)?
  • 0
    Где-то в начале 80-х годов подобную схему напечатал журнал «Химия и жизнь» (www.hij.ru). Я тогда ходил в школу, над ней долго сидел и почти всю выучил. И до сих пор с определением языков всё хорошо :)

    Так вот, авторы тогда сказали, что они не авторы, а схема переводная — с какого-то англоязычного источника. В архивах журнала искать страшно, там куча PDF… Да, ладно, та схема была не лучше — хоть и построже, чем эта.

    Спасибо!
  • +1
    Читаемость блок-схемы очень сильно страдает из-за привязки к ширине хабра. Такие штуки лучше делать в ширину и немалым размером.
  • 0
    В определителе абхазского языка советую использовать буквы Ҩ, Ҽ, Ҿ, Ҟ,Ҵ, Ҧ вместо Ҩ, Ҽ, Ҿ, Ҳ, Џ, Ҷ. Буквы Ҳ, Џ, Ҷ встречаются и в других кириллических алфавитах из блок-схемы, предложенные — только в абхазском.

    И да, спасибо за включение абхазского в схему. Иҭабуп даараӡа, сҳабраҩыза!*

    *Большое спасибо, мой хабрадруг (абх.)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Дизайн