Кодирование текстовой информации
Чаще всего кодированию подвергаются тексты, написанные на естественных языках (русском, немецком и др.).
Основные способы кодирования текстовой информации
Существует несколько основных способов кодирования текстовой информации:
- графический, в котором текстовая информация кодируется путем использования специальных рисунков или знаков;
- символьный, в котором тексты кодируются с использованием символов того же алфавита, на котором написан исходник;
- числовой, в котором текстовая информация кодируется с помощью чисел.
Процесс чтения текста представляет собой процесс, обратный его написанию, в результате которого письменный текст преобразуется в устную речь. Чтение – это ничто иное, как декодирование письменного текста.
А сейчас обратите внимание на то, что существует много способов кодирования одного и того же текста на одном и том же языке.
Пример 1
Поскольку мы русские, то и текст привыкли записывать с помощью алфавита своего родного языка. Однако тот же самый текст можно записать, используя латинские буквы. Иногда это приходится делать, когда мы отправляем SMS по мобильному телефону, клавиатура которого не содержит русских букв, или же электронное письмо на русском языке за границу, если у адресата нет русифицированного программного обеспечения. Например, фразу «Здравствуй, дорогой Саша!» можно записать как:
Стенография
Определение 1
Стенография — это один из способов кодирования текстовой информации с помощью специальных знаков. Она представляет собой быстрый способ записи устной речи. Навыками стенографии могут владеть далеко не все, а лишь немногие специально обученные люди, которых называют стенографистами. Эти люди успевают записывать текст синхронно с речью выступающего человека, что, на наш взгляд, достаточно сложно. Однако для них это не проблема, поскольку в стенограмме целое слово или сочетание букв могут обозначаться одним знаком. Скорость стенографического письма превосходит скорость обычного в $4-7$ раз. Расшифровать (декодировать) стенограмму может только сам стенографист.
Готовые работы на аналогичную тему
Пример 2
На рисунке представлен пример стенографии, в которой написано следущее: «Говорить умеют все люди на свете. Даже у самых примитивных племен есть речь. Язык — это нечто всеобщее и самое человеческое, что есть на свете»:
Рисунок 1.
Стенография позволяет не только вести синхронную запись устной речи, но и рационализировать технику письма.
Замечание 1
Приведёнными примерами мы проиллюстрировали важное правило: для кодирования одной и той же информации можно использовать разные способы, при этом их выбор будет зависеть от цели кодирования, условий и имеющихся средств.
Если нам нужно записать текст в темпе речи, сделаем это с помощью стенографии; если нужно передать текст за границу, воспользуемся латинским алфавитом; если необходимо представить текст в виде, понятном для грамотного русского человека, запишем его по всем правилам грамматики русского языка.
Также немаловажен выбор способа кодирования информации, который, в свою очередь, может быть связан с предполагаемым способом её обработки.
Пример 3
Рассмотрим пример представления чисел количественной информации. Используя буквы русского алфавита, можно записать число «тридцать пять». Используя же алфавит арабской десятичной системы счисления, запишем: $35$. Допустим нам необходимо произвести вычисления. Естественно, что для выполнения расчётов мы выберем удобную для нас запись числа арабскими цифрами, хотя можно примеры описывать и словами, но это будет довольно громоздко и не практично.
Замечание 2
Заметим, что приведенные выше записи одного и того же числа используют разные языки: первая — естественный русский язык, вторая — формальный язык математики, не имеющий национальной принадлежности. Переход от представления на естественном языке к представлению на формальном языке можно также рассматривать как кодирование.
Криптография
В некоторых случаях возникает потребность засекречивания текста сообщения или документа, для того чтобы его не смогли прочитать те, кому не положено. Это называется защитой от несанкционированного доступа. В таком случае секретный текст шифруется. В давние времена шифрование называлось тайнописью.
Определение 2
Шифрование представляет собой процесс превращения открытого текста в зашифрованный, а дешифрование — процесс обратного преобразования, при котором восстанавливается исходный текст. Шифрование — это тоже кодирование, но с засекреченным методом, известным только источнику и адресату. Методами шифрования занимается наука криптография.
Определение 3
Криптография — это наука о методах и принципах передачи и приема зашифрованной с помощью специальных ключей информации.
Числовое кодирование текстовой информации
В каждом национальном языке имеется свой алфавит, который состоит из определенного набора букв, следующих друг за другом, а значит и имеющих свой порядковый номер.
Каждой букве сопоставляется целое положительное число, которое называют кодом символа. Именно этот код и будет хранить память компьютера, а при выводе на экран или бумагу преобразовывать в соответствующий ему символ. Помимо кодов самих символов в памяти компьютера хранится и информация о том, какие именно данные закодированы в конкретной области памяти. Это необходимо для различия представленной информации в памяти компьютера (числа и символы).
Используя соответствия букв алфавита с их числовыми кодами, можно сформировать специальные таблицы кодирования. Иначе можно сказать, что символы конкретного алфавита имеют свои числовые коды в соответствии с определенной таблицей кодирования.
Однако, как известно, алфавитов в мире большое множество (английский, русский, китайский и др.). Соответственно возникает вопрос, каким образом можно закодировать все используемые на компьютере алфавиты.
Чтобы ответить на данный вопрос, нам придется заглянуть назад в прошлое.
В $60$-х годах прошлого века в американском национальном институте стандартизации (ANSI) была разработана специальная таблица кодирования символов, которая затем стала использоваться во всех операционных системах. Эта таблица называется ASCII (American Standard Code for Information Interchange, что означает в переводе с английского «американский стандартный код для обмена информацией»).
В данной таблице представлен $7$-битный стандарт кодирования, при использовании которого компьютер может записать каждый символ в одну $7$-битную ячейку запоминающего устройства. При этом известно, что в ячейке, состоящей из $7$ битов, можно сохранять $128$ различных состояний. В стандарте ASCII каждому из этих $128$ состояний соответствует какая-то буква, знак препинания или же специальный символ.
В процессе развития вычислительной техники стало ясно, что $7$-битный стандарт кодирования достаточно мал, поскольку в $128$ состояниях $7$-битной ячейки нельзя закодировать буквы всех письменностей, имеющихся в мире.
Чтобы решить эту проблему, разработчики программного обеспечения начали создавать собственные 8-битные стандарты кодировки текста. За счет дополнительного бита диапазон кодирования в них был расширен до $256$ символов. Во избежание путаницы, первые $128$ символов в таких кодировках, как правило, соответствуют стандарту ASCII. Оставшиеся $128$ — реализуют региональные языковые особенности.
Замечание 3
Как мы знаем национальных алфавитов огромное количество, поэтому и расширенные таблицы ASCII-кодов представлены множеством вариантов. Так для русского языка существует также несколько вариантов, наиболее распространенные Windows-$1251$ и Koi8-r. Большое количество вариантов кодировочных таблиц создает определенные трудности. К примеру, мы отправляем письмо, представленное в одной кодировке, а получатель при этом пытается прочесть его в другой. В результате на экране у него появляется непонятная абракадабра, что говорит о том, что получателю для прочтения письма требуется применить иную кодировочную таблицу.
Существует и другая проблема, которая заключается в том, что алфавиты некоторых языков содержат слишком много символов, которые не позволяют помещаться им в отведенные позиции с $128$ до $255$ однобайтовой кодировки.
Следующая проблема возникает тогда, когда в тексте используют несколько языков (например, русский, английский и немецкий). Нельзя же использовать обе таблицы сразу.
Для решения этих проблем в начале $90$-х годов прошлого столетия был разработан новый стандарт кодирования символов, который назвали Unicode. С помощью этого стандарта стало возможным использование в одном тексте любых языков и символов.
Данный стандарт для кодирования символов предоставляет $31$ бит, что составляет $4$ байта за минусом $1$ бита. Количество возможных комбинаций при использовании данной кодировочной таблицы очень велико: $231 = 2 \ 147 \ 483 \ 684$ (т.е. более $2$ млрд.). Это возможно стало в связи с тем, что Unicode описывает алфавиты всех известных языков, даже «мертвых» и выдуманных, включает многие математические и другие специальные символы. И все-таки информационная емкость $31$-битового Unicode слишком велика, И как следствие, наиболее часто используют именно сокращенную $16$-битовую версию ($216 = 65 \ 536$ значений), в которой представлены все современные алфавиты. В Unicode первые $128$ кодов совпадают с таблицей ASCII.
Кодирование текстовой информации — Кодирование информации
Кодирование текстовой информации
Одна и та же информация может быть представлена (закодирована) в нескольких формах. C появлением компьютеров возникла необходимость кодирования всех видов информации, с которыми имеет дело и отдельный человек, и человечество в целом. Но решать задачу кодирования информации человечество начало задолго до появления компьютеров. Грандиозные достижения человечества — письменность и арифметика — есть не что иное, как система кодирования речи и числовой информации. Информация никогда не появляется в чистом виде, она всегда как-то представлена, как-то закодирована.
Двоичное кодирование – один из распространенных способов представления информации. В вычислительных машинах, в роботах и станках с числовым программным управлением, как правило, вся информация, с которой имеет дело устройство, кодируется в виде слов двоичного алфавита.
Начиная с конца 60-х годов, компьютеры все больше стали использоваться для обработки текстовой информации, и в настоящее время основная доля персональных компьютеров в мире (и большая часть времени) занята обработкой именно текстовой информации. Все эти виды информации в компьютере представлены в двоичном коде, т. е. используется алфавит мощностью два (всего два символа 0 и 1). Связано это с тем, что удобно представлять информацию в виде последовательности электрических импульсов: импульс отсутствует (0), импульс есть (1).
Такое кодирование принято называть двоичным, а сами логические последовательности нулей и единиц — машинным языком.
С точки зрения ЭВМ текст состоит из отдельных символов. К числу символов принадлежат не только буквы (заглавные или строчные, латинские или русские), но и цифры, знаки препинания, спецсимволы типа «=», «(«, «&» и т.п. и даже (обратите особое внимание!) пробелы между словами.
Тексты вводятся в память компьютера с помощью клавиатуры. На клавишах написаны привычные нам буквы, цифры, знаки препинания и другие символы. В оперативную память они попадают в двоичном коде. Это значит, что каждый символ представляется 8-разрядным двоичным кодом.
Рис.1 Представление символа в виде двоичного кода.
Традиционно для кодирования одного символа используется количество информации, равное 1 байту, т. е. I = 1 байт = 8 бит. При помощи формулы, которая связывает между собой количество возможных событий К и количество информации I, можно вычислить сколько различных символов можно закодировать (считая, что символы — это возможные события): К = 2I = 28 = 256, т. е. для представления текстовой информации можно использовать алфавит мощностью 256 символов.
Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, цифры, знаки, графические символы и пр.
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер — по их коду.
Удобство побайтового кодирования символов очевидно, поскольку байт — наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной символьной информации.
В процессе вывода символа на экран компьютера производится обратный процесс — декодирование, то есть преобразование кода символа в его изображение. Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице.
Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу. Понятно, что это дело условное, можно придумать множество способов кодировки.
Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.
Виды таблиц кодировок
Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, называется таблицей кодировки.
Для разных типов ЭВМ используются различные таблицы кодировки.
В качестве международного стандарта принята кодовая таблица ASCII (American Standard Code for Information Interchange — Американский стандартный код для информационного обмена), кодирующая первую половину символов с числовыми кодами от 0 до 127 ( коды от 0 до 32 отведены не символам, а функциональным клавишам).
Таблица кодов ASCII делится на две части.
Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 (00000000), до 127 (01111111).
Структура таблицы кодировки ASCII
Порядковый номер | Код | Символ |
0 — 31 | 00000000 — 00011111 | Символы с номерами от 0 до 31 принято называть управляющими. Их функция – управление процессом вывода текста на экран или печать, подача звукового сигнала, разметка текста и т.п. |
32 — 127 | 0100000 — 01111111 | Стандартная часть таблицы (английский). Сюда входят строчные и прописные буквы латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы. Символ 32 — пробел, т.е. пустая позиция в тексте. Все остальные отражаются определенными знаками. |
128 — 255 | 10000000 — 11111111 | Альтернативная часть таблицы (русская). Вторая половина кодовой таблицы ASCII, называемая кодовой страницей (128 кодов, начиная с 10000000 и кончая 11111111), может иметь различные варианты, каждый вариант имеет свой номер. Кодовая страница в первую очередь используется для размещения национальных алфавитов, отличных от латинского. В русских национальных кодировках в этой части таблицы размещаются символы русского алфавита. |
Рис. 2 Первая половина таблицы кодировки ASCII.
Обращается внимание на то, что в таблице кодировки буквы (прописные и строчные) располагаются в алфавитном порядке, а цифры упорядочены по возрастанию значений. Такое соблюдение лексикографического порядка в расположении символов называется принципом последовательного кодирования алфавита.
Для букв русского алфавита также соблюдается принцип последовательного кодирования.
Рис.3 Вторая половина таблицы кодировки ASCII.
К сожалению, в настоящее время существуют пять различных кодировок кириллицы (КОИ8-Р, Windows. MS-DOS, Macintosh и ISO). Из-за этого часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной программной системы в другую.
Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 («Код обмена информацией, 8-битный»). Эта кодировка применялась еще в 70-е годы на компьютерах серии ЕС ЭВМ, а с середины 80-х стала использоваться в первых русифицированных версиях операционной системы UNIX.
Рис.4 Кодировка КОИ8.
От начала 90-х годов, времени господства операционной системы MS DOS, остается кодировка CP866 («CP» означает «Code Page», «кодовая страница»).
Рис.5 Кодировка CP866 .
Компьютеры фирмы Apple, работающие под управлением операционной системы Mac OS, используют свою собственную кодировку Mac.
Рис.6 Кодировка Mac.
Кроме того, Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка еще одну кодировку под названием ISO 8859-5.
Рис. 7 Кодировка ISO 8859-5.
Наиболее распространенной в настоящее время является кодировка Microsoft Windows, обозначаемая сокращением CP1251. Введена компанией Microsoft; с учетом широкого распространения операционных систем (ОС) и других программных продуктов этой компании в Российской Федерации она нашла широкое распространение.
Рис. 8 Кодировка CP1251.
С конца 90-х годов проблема стандартизации символьного кодирования решается введением нового международного стандарта, который называется Unicode.
Рис.9 Кодировка Unicode.
Это 16-разрядная кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. Конечно, при этом объем занимаемой памяти увеличивается в 2 раза. Но зато такая кодовая таблица допускает включение до 65536 символов. Полная спецификация стандарта Unicode включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.
Внутреннее представление слов в памяти компьютера
с помощью таблицы ASCII
Слова | Память |
file | 01100110 01101001 01101100 01100101 |
disk | 01100100 01101001 01110011 01101011 |
Иногда бывает так, что текст, состоящий из букв русского алфавита, полученный с другого компьютера, невозможно прочитать — на экране монитора видна какая-то «абракадабра». Это происходит оттого, что на компьютерах применяется разная кодировка символов русского языка.
Рис. 10.
Таким образом, каждая кодировка задается своей собственной кодовой таблицей. Как видно из таблицы, одному и тому же двоичному коду в различных кодировках поставлены в соответствие различные символы.
Например, последовательность числовых кодов 221, 194, 204 в кодировке СР1251 образует слово «ЭВМ» (Рис. 10), тогда как в других кодировках это будет бессмысленный набор символов.
К счастью, в большинстве случаев пользователь не должен заботиться о перекодировках текстовых документов, так как это делают специальные программы-конверторы, встроенные в приложения.
Кодирование текстовой информации. Кодирование информации. Кодирование информации в ПК.
Доброго времени суток уважаемый пользователь. В этой статье мы поговорим на такие темы, как: Кодирование информации, Кодирование текстовой информации, Кодирование информации в компьютере.
Кодирование информации в компьютере.
На сегодняшний день персональный компьютер может обрабатывать числовую, текстовую, графическую, звуковую и видео информацию. Вся информация в компьютере представлена в двоичном коде, то есть используется алфавит в два символа 0 и 1. Именно в двоичном коде легч всего представить информацию как электрический импульс, его отсутствие (0), а его присутствие (1).
Такой вид кодирования принято называть двоичным, а алфавит двоичного кодирования из нулей и единиц, несущий смысловую нагрузку на компьютер принято называть машинным языком.
Примечание
Каждая цифра двоичного кода, занимает место в памяти, равное 1 биту, соответственно две цифры 2 бита, три — 3 бита и т.д…
Вид информации | Двоичный код |
---|---|
Числовая | 1001001111 |
Текстовая | 1010011101 |
Графическая | 1100101011 |
Звуковая | 1010010011 |
Видео | 1110010101 |
Чтобы посчитать колличество информации, для числа например, нужно представить это число в двоичном коде и посчитать колличество нулей и единиц.I = 28 = 256.
Примечание
Для кодирования текстовой информации обычно используют алфавит мощьностью в 256 символов…
Принцип данного кодирования заключается в том, что каждому символу (букве, знаку) соответствуе свой двоичный код от 00000000 до 11111111, так-же текстовая информация может быть представлена в десятичном коде от 0 до 255.
Нужно запомнить, что на сегодняшний день для кодирования букв российского алфавитаиспользуют пять разных кодировачных таблиц (КОИ — 8, СР1251, СР866, Мас, ISO), запомните, что тексты закодированные с помощью одной таблицы не будут корректно отображаться в другой кодировке. Это можно увидить в обьединенной таблице кодировки символов.
Для одного двоичного кода в разных таблицах соответствуют разные символы:
Двоичный код | Десятичный код | КОИ8 | СР1251 | СР866 | Мас | ISO |
---|---|---|---|---|---|---|
11000010 | 194 | б | В | — | — | Т |
На сегодняшний день перекодированием текстовых документов заботится не пользователь, а программы, которые встроены в текстовые редакторы и текстовые процессоры.16 = 65536 символов — мощность использованного алфавита.
Именно такой алфавит используется в кодировке Unicode, который стал международным стандартом для представления символьной информации в компьютере.
Глава 3 Кодирование текстовой и графической информации. Информатика: аппаратные средства персонального компьютера
Глава 3
Кодирование текстовой и графической информации
3.1. Кодирование текстовой информации
При вводе текстовой информации в компьютер символы (буквы, цифры, знаки) кодируются с помощью различных кодовых систем, которые состоят из набора кодовых таблиц, размещенных на соответствующих страницах стандартов для кодирования текстовой информации. В таких таблицах каждому символу присваивается определенный числовой код в шестнадцатеричной или десятичной системе счисления, т. е. кодовые таблицы отражают соответствие между изображениями символов и числовыми кодами и предназначены для кодирования и декодирования текстовой информации. При вводе текстовой информации с помощью клавиатуры компьютера каждый вводимый символ подвергается кодированию, т. е. преобразуется в числовой код, при выводе текстовой информации на устройство вывода компьютера (дисплей, принтер или плоттер) по числовому коду символа строится его изображение. Присвоение символу определенного числового кода является результатом соглашения между соответствующими организациями разных стран. В настоящее время нет единой универсальной кодовой таблицы, удовлетворяющей буквам национальных алфавитов разных стран.
Современные кодовые таблицы включают в себя международную и национальную части, т. е. содержат буквы латинского и национального алфавитов, цифры, знаки арифметических операций и препинания, математические и управляющие символы, символы псевдографики. Международная часть кодовой таблицы, базирующаяся на стандарте ASCII (American Standard Code for Information Interchange), кодирует первую половину символов кодовой таблицы с числовыми кодами от 0 до 7F16, или в десятичной системе счисления от 0 до 127. При этом коды от 0 до 2016 (0 ? 3210) отведены функциональным клавишам (F1, F2, F3 и т. д.) клавиатуры персонального компьютера. На рис. 3.1 приведена международная часть кодовых таблиц, основанная на стандарте ASCII. Ячейки таблиц пронумерованы соответственно в десятичной и шестнадцатеричной системе счисления.
а)
б)
Рис 3.1. Международная часть кодовой таблицы (стандарт ASCII) с номерами ячеек, представленных в десятичной (а) и шестнадцатеричной (б) системе счисления
Национальная часть кодовых таблиц содержит коды национальных алфавитов, которую называют также таблицей наборов символов (charset).
В настоящее время для поддержки букв русского алфавита (кириллицы) существует несколько кодовых таблиц (кодировок), которые используются различными операционными системами, что является существенным недостатком и в ряде случаев приводит к проблемам, связанным с операциями декодирования числовых значений символов. В табл. 3.1 приведены названия кодовых страниц (стандартов), на которых размещены кодовые таблицы (кодировки) кириллицы.
Таблица 3.1
Одним из первых стандартов кодирования кириллицы на компьютерах был стандарт КОИ8-Р. Национальная часть кодовой таблицы этого стандарта приведена на рис. 3.2.
Рис. 3.2. Национальная часть кодовой таблицы стандарта КОИ8-Р
В настоящее время применяется и кодовая таблица, размещенная на странице СР866 стандарта кодирования текстовой информации, которая используется в операционной системе MS DOS или сеансе работы MS DOS для кодирования кириллицы (рис. 3.3, а).
а)
б)
Рис. 3.3. Национальная часть кодовой таблицы, размещенная на странице СР866 (а) и на странице СР1251 (б) стандарта кодирования текстовой информации
В настоящее время для кодирования кириллицы наибольшее распространение получила кодовая таблица, размещенная на странице СР1251 соответствующего стандарта, которая используется в операционных системах семейства Windows фирмы Microsoft (рис. 3.2, б). Во всех представленных кодовых таблицах, кроме таблицы стандарта Unicode, для кодирования одного символа отводится 8 двоичных разрядов (8 бит).
В конце прошлого века появился новый международный стандарт Unicode, в котором один символ представляется двухбайтовым двоичным кодом. Применение этого стандарта – продолжение разработки универсального международного стандарта, позволяющего решить проблему совместимости национальных кодировок символов. С помощью данного стандарта можно закодировать 216 = 65536 различных символов. На рис. 3.4 приведена кодовая таблица 0400 (русский алфавит) стандарта Unicode.
Рис. 3.4. Кодовая таблица 0400 стандарта Unicode
Поясним сказанное, касающееся кодирования текстовой информации, на примере.
Пример 3.1
Закодировать слово «Компьютер» в виде последовательности десятичных и шестнадцатеричных чисел, используя кодировку СР1251. Какие символы будут отображены в кодовых таблицах СР866 и КОИ8-Р при использовании полученного кода.
Последовательности шестнадцатеричного и двоичного кода слова «Компьютер» на основе кодировочной таблицы СР1251 (см. рис. 3.3, б) будут выглядеть следующим образом:
Данная кодовая последовательность в кодировках СР866 и КОИ8-Р приведет к отображению следующих символов:
Для преобразования русскоязычных текстовых документов из одного стандарта кодирования текстовой информации в другой используются специальные программы – конверторы. Конверторы обычно встраиваются в другие программы. Примером может служить программа браузер – Internet Explorer (IE), которая имеет встроенный конвертор. Программа браузер – это специальная программа для просмотра содержимого Web-страниц в глобальной компьютерной сети Интернет. Воспользуемся этой программой для подтверждения полученного в примере 3.1 результата отображения символов. Для этого выполним следующие действия.
1. Запустим программу Блокнот (NotePad). Программа Блокнот в операционной системе Windows ХР запускается с помощью команды: [Кнопка Пуск – Программы – Стандартные – Блокнот]. В открывшемся окне программы Блокнот напечатаем слово «Компьютер» с использованием синтаксиса языка разметки гипертекстовых документов – HTML (Hyper Text Markup Language). Этот язык используется для создания документов в Интернете. Текст должен выглядеть следующим образом: <h2>Компыотер</h2>, где <h2> и </h2> теги (специальные конструкции) языка HTML для разметки заголовков. На рис. 3.5 представлен результат этих действий.
Рис. 3.5. Отображение текста в окне Блокнот
Сохраним этот текст, выполнив команду: [Файл – Сохранить как…] в соответствующей папке компьютера, при сохранении текста файлу присвоим имя – Прим, с расширением файла. html.
2. Запустим программу Internet Explorer, выполнив команду: [Кнопка Пуск – Программы – Internet Explorer]. При запуске программы появится окно, представленное на рис. 3.6
Рис. 3.6. Окно доступа в автономный режим
Выберем и активизируем кнопку Автономно при этом не произойдет подключение компьютера к глобальной сети Интернет. Появится основное окно программы Microsoft Internet Explorer, представленное на рис. 3.7.
Рис. 3.7. Основное окно Microsoft Internet Explorer
Выполним следующую команду: [Файл – Открыть], появится окно (рис. 3.8), в котором необходимо указать имя файла и нажать кнопку ОК или нажать кнопку Обзор… и найти файл Прим.html.
Рис. 3.8. Окно «Открыть»
Основное окно программы Internet Explorer примет вид, показанный на рис. 3.9. В окне отобразится слово «Компьютер». Далее, используя верхнее меню программы Internet Explorer, выполним следующую команду: [Вид – Кодировка – Кириллица (DOS)]. После выполнения этой команды в окне программы Internet Ехplorer отобразятся символы, показанные на рис. 3.10. При выполнении команды: [Вид – Кодировка – Кириллица (KOI8-R) ] в окне программы Internet Explorer отобразятся символы, показанные на рис. 3.11.
Рис. 3.9. Символы, отображаемые при кодировке СР1251
Рис. 3.10. Символы, отображаемые при включении кодировки СР866 для кодовой последовательности, представляемой в кодировке СР1251
Рис. 3.11. Символы, отображаемые при включении кодировки КОИ8-Р для кодовой последовательности, представляемой в кодировке СР1251
Таким образом, полученные с помощью программы Internet Explorer последовательности символов совпадают с последовательностями символов, полученных с помощью кодовых таблиц СР866 и КОИ8-Р в примере 3.1.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРесКак кодируется текстовая информация в компьютере
С точки зрения ЭВМ текст состоит из отдельных символов. К числу символов принадлежат не только буквы (заглавные или строчные, латинские или русские), но и цифры, знаки препинания, спецсимволы типа «=», «(«, «&» и т.п. и даже (обратите особое внимание!) пробелы между словами. Да, не удивляйтесь: пустое место в тексте тоже должно иметь свое обозначение.
Вспомним некоторые известные нам факты:
Множество символов, с помощью которых записывается текст, называется алфавитом.
Число символов в алфавите – это его мощность.
Формула определения количества информации: N = 2 b ,
где N – мощность алфавита (количество символов),
b – количество бит (информационный вес символа).
В алфавит мощностью 256 символов можно поместить практически все необходимые символы. Такой алфавит называется достаточным.
Т.к. 256 = 2 8 , то вес 1 символа – 8 бит.
Единице измерения 8 бит присвоили название 1 байт:
Двоичный код каждого символа в компьютерном тексте занимает 1 байт памяти.
Каким же образом текстовая информация представлена в памяти компьютера?
Тексты вводятся в память компьютера с помощью клавиатуры. На клавишах написаны привычные нам буквы, цифры, знаки препинания и другие символы. В оперативную память они попадают в двоичном коде. Это значит, что каждый символ представляется 8-разрядным двоичным кодом.
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер – по их коду.
Удобство побайтового кодирования символов очевидно, поскольку байт – наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов – это вполне достаточное количество для представления самой разнообразной символьной информации.
Теперь возникает вопрос, какой именно восьмиразрядный двоичный код поставить в соответствие каждому символу.
Понятно, что это дело условное, можно придумать множество способов кодировки.
Все символы компьютерного алфавита пронумерованы от 0 до 255. Каждому номеру соответствует восьмиразрядный двоичный код от 00000000 до 11111111. Этот код просто порядковый номер символа в двоичной системе счисления.
Таблица, в которой всем символам компьютерного алфавита поставлены в соответствие порядковые номера, называется таблицей кодировки.
Для разных типов ЭВМ используются различные таблицы кодировки.
Международным стандартом для ПК стала таблица ASCII (читается аски) (Американский стандартный код для информационного обмена).
Таблица кодов ASCII делится на две части.
Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 (00000000), до 127 (01111111).
Структура таблицы кодировки ASCII
Порядковый номер
Символ
0 – 31
00000000 – 00011111
Символы с номерами от 0 до 31 принято называть управляющими.
Их функция – управление процессом вывода текста на экран или печать, подача звукового сигнала, разметка текста и т.п.
32 – 127
00100000 – 01111111
Стандартная часть таблицы (английский). Сюда входят строчные и прописные буквы латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы.
Символ 32 – пробел, т.е. пустая позиция в тексте.
Все остальные отражаются определенными знаками.
128 – 255
10000000 – 11111111
Альтернативная часть таблицы (русская).
Вторая половина кодовой таблицы ASCII, называемая кодовой страницей (128 кодов, начиная с 10000000 и кончая 11111111), может иметь различные варианты, каждый вариант имеет свой номер.
Кодовая страница в первую очередь используется для размещения национальных алфавитов, отличных от латинского. В русских национальных кодировках в этой части таблицы размещаются символы русского алфавита.
Первая половина таблицы кодов ASCII
Обращаю ваше внимание на то, что в таблице кодировки буквы (прописные и строчные) располагаются в алфавитном порядке, а цифры упорядочены по возрастанию значений. Такое соблюдение лексикографического порядка в расположении символов называется принципом последовательного кодирования алфавита.
Для букв русского алфавита также соблюдается принцип последовательного кодирования.
Вторая половина таблицы кодов ASCII
К сожалению, в настоящее время существуют пять различных кодировок кириллицы (КОИ8-Р, Windows. MS-DOS, Macintosh и ISO). Из-за этого часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной программной системы в другую.
Хронологически одним из первых стандартов кодирования русских букв на компьютерах был КОИ8 («Код обмена информацией, 8-битный»). Эта кодировка применялась еще в 70-ые годы на компьютерах серии ЕС ЭВМ, а с середины 80-х стала использоваться в первых русифицированных версиях операционной системы UNIX.
От начала 90-х годов, времени господства операционной системы MS DOS, остается кодировка CP866 («CP» означает «Code Page», «кодовая страница»).
Компьютеры фирмы Apple, работающие под управлением операционной системы Mac OS, используют свою собственную кодировку Mac.
Кроме того, Международная организация по стандартизации (International Standards Organization, ISO) утвердила в качестве стандарта для русского языка еще одну кодировку под названием ISO 8859-5.
Наиболее распространенной в настоящее время является кодировка Microsoft Windows, обозначаемая сокращением CP1251.
С конца 90-х годов проблема стандартизации символьного кодирования решается введением нового международного стандарта, который называется Unicode. Это 16-разрядная кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. Конечно, при этом объем занимаемой памяти увеличивается в 2 раза. Но зато такая кодовая таблица допускает включение до 65536 символов. Полная спецификация стандарта Unicode включает в себя все существующие, вымершие и искусственно созданные алфавиты мира, а также множество математических, музыкальных, химических и прочих символов.
Содержание
Введение
Для того чтобы сохранить информацию, ее надо закодировать. Любая информация всегда хранится в виде кодов.
Код – набор условных обозначений для представления информации.
Кодирование – процесс представления информации в виде кода.
Для общения друг с другом мы используем код – русский язык. При разговоре этот код передается звуками, при письме – буквами.
Водитель передает сигнал с помощью гудка или миганием фар. Вы встречаетесь с кодированием информации при переходе дороги в виде сигналов светофора.
Закодировать можно и звуковую информацию: для этого существует особый метод кодирования – нотная грамота.
Та же проблема универсального средства кодирования достаточно успешно реализуется в отдельных отраслях техники, науки и культуры.
В качестве примеров можно привести систему записи математических выражений, телеграфную азбуку, морскую флажковую азбуку, систему Брайля для слепых и многое другое.
Таким образом, кодирование сводится к использованию совокупности символов по строго определенным правилам.
Кодировать информацию можно различными способами: устно; письменно; жестами или сигналами любой другой природы.
Единицы измерения информации
В качестве единицы информации условились принять один бит (английский bit – binary, digit – двоичная цифра).
Бит в теории информации – количество информации, необходимое для различения двух равновероятных сообщений.
В вычислительной технике битом называют наименьшую ;порцию; памяти компьютера, необходимую для хранения одного из двух знаков ;0; и ;1;, используемых для внутри машинного представления данных и команд.
Одним битом могут быть выражены два понятия: 0 или 1 (да или нет, черное или белое, истина или ложь и тому подобное).
Если количество битов увеличить до двух, то уже можно выразить четыре различных понятия:
Тремя битами можно закодировать восемь различных значений:
000 001 010 011 100 101 110 111
Увеличивая на единицу количество разрядов в системе двоичного кодирования, мы увеличиваем в два раза количество значений, которое может быть выражено в данной системе, то есть общая формула имеет вид:
где N – количество независимых кодируемых значений; m – разрядность двоичного кодирования, принятая в данной системе.
Бит – слишком мелкая единица измерения. На практике чаще применяется более крупная единица – байт, равная восьми битам.
Именно восемь битов требуется для того, чтобы закодировать любой из 256 символов алфавита клавиатуры компьютера:
Широко используются также еще более крупные производные единицы информации:
В последнее время в связи с увеличением объемов обрабатываемой информации входят в употребление такие производные единицы, как:
Как кодируется текстовая информация
Если каждому символу алфавита сопоставить определенное целое число (например, порядковый номер), то с помощью двоичного кода можно кодировать и текстовую информацию.
Для хранения двоичного кода одного символа выделен 1 байт=8 бит.
Учитывая, что каждый бит принимает значение 0 или 1, количество их возможных сочетаний в байте равно:
Значит, с помощью 1 байта можно получить 256 разных двоичных кодовых комбинаций и отобразить с их помощью 256 различных символов.
Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и заглавные буквы русского и латинского алфавита, цифры, знаки, графические символы и так далее
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111.
Таким образом, человек различает символы по их начертанию, а компьютер – по их коду.
Важно, что присвоение символу конкретного кода – это вопрос соглашения, которое фиксируется в кодовой таблице.
Кодирование текстовой информации с помощью байтов опирается на несколько различных стандартов, но первоосновой для всех стал стандарт ASCII (American Standart Code for Information Interchange), разработанный в США в Национальном институте ANSI (American National Standarts Institute).
В системе ASCII закреплены две таблицы кодирования – базовая и расширенная.
Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255.
Первые 33 кода (с 0 до 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и так далее).
Коды с 33 по 127 являются интернациональными и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания.
Коды с 128 по 255 являются национальными, то есть в национальных кодировках одному и тому же коду соответствуют различные символы.
Как кодируется графическая информации
Графическая информация на экране монитора представляется в виде растрового изображения, которое формируется из определенного количества строк, которые, в свою очередь, содержат определенное количество точек (пикселей).
Каждому пикселю присвоен код, хранящий информацию о цвете пикселя.
Для получения черно-белого изображения (без полутонов) пиксель может принимать только два состояния: «белый» или «черный».
Тогда для его кодирования достаточно 1 бита: 1 – белый, 0 – черный.
Пиксель на цветном дисплее может иметь различную окраску. Поэтому 1 бита на пиксель – недостаточно.
Для кодирования 4-цветного изображения требуется два бита на пиксель, поскольку два бита могут принимать 4 различных состояния.
Может использоваться, например, такой вариант кодировки цветов:
Цветное изображение на экране монитора формируется за счет смешивания трех базовых цветов: красного, зеленого, синего.
Из трех цветов можно получить восемь комбинаций:
- Черный – 0 0 0
- Синий – 0 0 1
- Зеленый – 0 1 0
- Голубой – 0 1 1
- Красный – 1 0 0
- Розовый – 1 0 1
- Коричневый – 1 1 0
- Белый – 1 1 1
Следовательно, для кодирования 8-цветного изображения требуется три бита памяти на один пиксель.
Для получения богатой палитры цветов базовым цветам могут быть заданы различные интенсивности, тогда количество различных вариантов их сочетаний, дающих разные краски и оттенки, увеличивается.
Шестнадцатицветная палитра получается при использовании 4-разрядной кодировки пикселя: к трем битам базовых цветов добавляется один бит интенсивности. Этот бит управляет яркостью всех трех цветов одновременно.
Также графическая информация может быть представлена в виде векторного изображения.
Векторное изображение представляет собой графический объект, состоящий из элементарных отрезков и дуг.
Положение этих элементарных объектов определяется координатами точек и длиной радиуса.
Для каждой линии указывается ее тип (сплошная, пунктирная, штрих-пунктирная), толщина и цвет.
Информация о векторном изображении кодируется как обычная буквенно-цифровая и обрабатывается специальными программами.
Качество изображения определяется разрешающей способностью монитора, то есть количеством точек, из которых оно складывается.
Чем больше разрешающая способность, то есть чем больше количество строк растра и точек в строке, тем выше качество изображение.
Как кодируется звуковая информация
Звук представляет собой звуковую волну с непрерывно меняющейся амплитудой и частотой.
Чем больше амплитуда, тем он громче для человека, чем больше частота сигнала, тем выше тон.
Программное обеспечение компьютера в настоящее время позволяет непрерывный звуковой сигнал преобразовывать в последовательность электрических импульсов, которые можно представить в двоичной форме.
Аудиоадаптер (звуковая плата) – специальное устройство, подключаемое к компьютеру, предназначенное для преобразования электрических колебаний звуковой частоты в числовой двоичный код при вводе звука и для обратного преобразования (из числового кода в электрические колебания) при воспроизведении звука.
В процессе записи звука аудиоадаптер с определенным периодом измеряет амплитуду электрического тока и заносит в регистр двоичный код полученной величины.
Затем полученный код из регистра переписывается в оперативную память компьютера.
Качество компьютерного звука определяется характеристиками аудиоадаптера: частотой дискретизации и разрядностью.
Дополнительная информация по теме
Где и как найти информацию о себе, и как удалить те данные, которые вы не хотите оставить общедоступными
Описание нескольких основных способов поиска информации на просторах Интернет для лучшего результата
Информацио о некоторых полезных сайтах, при помощи которых можно найти необходимую информацию
Статья о том, что большую часть информации о себе люди предоставляют сами, не всегда задумываясь о том, нужно ли это делать
Кодирование текстовой информации в компьютере – порой неотъемлемое условие корректной работы устройства или отображения того или иного фрагмента. Как происходит этот процесс в ходе работы компьютера с текстом и визуальной информацией, звуком – все это мы разберем в данной статье.
Вступление
Электронная вычислительная машина (которую мы в повседневной жизни называем компьютером) воспринимает текст весьма специфично. Для нее кодирование текстовой информации очень важно, поскольку она воспринимает каждый текстовый фрагмент в качестве группы обособленных друг от друга символов.
Какие бывают символы?
В роли символов для компьютера выступают не только русские, английские и другие буквы, но и еще знаки препинания, а также другие знаки. Даже пробел, которым мы разделяем слова при печатании на компьютере, устройство воспринимает как символ. Чем-то очень напоминает высшую математику, ведь там, по мнению многих профессоров, ноль имеет двойное значение: он и является числом, и одновременно ничего не обозначает. Даже для философов вопрос пробела в тексте может стать актуальной проблемой. Шутка, конечно, но, как говорится, в каждой шутке есть доля правды.
Какая бывает информация?
Итак, для восприятия информации компьютеру необходимо запустить процессы обработки. А какая вообще бывает информация? Темой этой статьи является кодирование текстовой информации. Мы уделим особенное внимание этой задаче, но разберемся и с другими микротемами.
Информация может быть текстовой, числовой, звуковой, графической. Компьютер должен запустить процессы, обеспечивающие кодирование текстовой информации, чтобы вывести на экран то, что мы, например, печатаем на клавиатуре. Мы будем видеть символы и буквы, это понятно. А что же видит машина? Она воспринимает абсолютно всю информацию – и речь сейчас идет не только о тексте – в качестве определенной последовательности нулей и единиц. Они составляют основу так называемого двоичного кода. Соответственно, процесс, который преобразует поступающую на устройство информацию в понятную ему, имеет название “двоичное кодирование текстовой информации”.
Краткий принцип действия двоичного кода
Почему наибольшее распространение в электронных машинах получило именно кодирование информации двоичным кодом? Текстовой основой, которая кодируется при помощи нулей и единиц, может быть абсолютно любая последовательность символов и знаков. Однако это не единственное преимущество, которое имеет двоичное текстовое кодирование информации. Все дело в том, что принцип, на котором устроен такой способ кодирования, очень прост, но в то же время достаточно функционален. Когда есть электрический импульс, его маркируют (условно, конечно) единицей. Нет импульса – маркируют нулем. То есть текстовое кодирование информации базируется на принципе построения последовательности электрических импульсов. Логическая последовательность, составленная из символов двоичного кода, называется машинным языком. В то же время кодирование и обработка текстовой информации при помощи двоичного кода позволяют осуществлять операции за достаточно краткий промежуток времени.
Биты и байты
Цифра, воспринимаемая машиной, кроет в себе некоторое количество информации. Оно равно одному биту. Это касается каждой единицы и каждого нуля, которые составляют ту или иную последовательность зашифрованной информации.
Соответственно, количество информации в любом случае можно определить, просто зная количество символов в последовательности двоичного кода. Они будут численно равны между собой. 2 цифры в коде несут в себе информацию объемом в 2 бита, 10 цифр – 10 бит и так далее. Принцип определения информационного объема, который кроется в том или ином фрагменте двоичного кода, достаточно прост, как вы видите.
Кодирование текстовой информации в компьютере
Вот сейчас вы читаете статью, которая состоит из последовательности, как мы считаем, букв алфавита русского языка. А компьютер, как говорилось ранее, воспринимает всю информацию (и в данном случае тоже) в качестве последовательности не букв, а нулей и единиц, обозначающих отсутствие и наличие электрического импульса.
Все дело в том, что закодировать один символ, который мы видим на экране, можно при помощи условной единицы измерения, называемой байтом. Как написано выше, у двоичного кода есть так называемая информационная нагрузка. Напомним, что численно она равняется суммарному количеству нулей и единиц в выбранном фрагменте кода. Так вот, 8 бит составляют 1 байт. Комбинации сигналов при этом могут быть самыми разными, как это легко можно заметить, нарисовав на бумаге прямоугольник, состоящий из 8 ячеек равного размера.
Выходит, что закодировать текстовую информацию можно при помощи алфавита, имеющего мощность 256 символов. В чем заключается суть? Смысл кроется в том, что каждый символ будет обладать своим двоичным кодом. Комбинации, “привязываемые” к определенным символам, начинаются от 00000000 и заканчиваются 11111111. Если переходить от двоичной к десятичной системе счисления, то кодировать информацию в такой системе можно от 0 до 255.
Не стоит забывать о том, что сейчас есть различные таблицы, которые используют кодировку букв русского алфавита. Это, например, ISO и КОИ-8, Mac и CP в двух вариациях: 1251 и 866. Легко убедиться в том, что текст, закодированный в одной из таких таблиц, не отобразится корректно в отличной от данной кодировке. Это происходит из-за того, что в разных таблицах к одному и тому же двоичному коду соответствуют различные символы.
Поначалу это было проблемой. Однако в настоящее время в программах уже встроены специальные алгоритмы, которые конвертируют текст, приводя его к корректному виду. 1997 год ознаменовался созданием кодировки под названием Unicode. В ней каждый символ имеет в своем распоряжении сразу 2 байта. Это позволяет закодировать текст, имеющий гораздо большее количество символов. 256 и 65536: есть ведь разница?
Кодирование графики
Кодирование текстовой и графической информации имеет некоторые схожие моменты. Как известно, для вывода графической информации используется периферийное устройство компьютера под названием “монитор”. Графика сейчас (речь идет сейчас именно о компьютерной графике) широко используется в самых разных сферах. Благо, аппаратные возможности персональных компьютеров позволяют решать достаточно сложные графические задачи.
Обрабатывать видеоинформацию стало возможным в последние годы. Но текст при этом значительно “легче” графики, что, в принципе, понятно. Из-за этого конечный размер файлов графики необходимо увеличивать. Преодолеть подобные проблемы можно, зная суть, в которой представляется графическая информация.
Давайте для начала разберемся, на какие группы подразделяется данный вид информации. Во-первых, это растровая. Во-вторых, векторная.
Растровые изображения достаточно схожи с клетчатой бумагой. Каждая клетка на такой бумаге закрашивается тем или иным цветом. Такой принцип чем-то напоминает мозаику. То есть получается, что в растровой графике изображение разбивается на отдельные элементарные части. Их именуют пикселями. В переводе на русский язык пиксели обозначают “точки”. Логично, что пиксели упорядочены относительно строк. Графическая сетка состоит как раз из определенного количества пикселей. Ее также называют растром. Принимая во внимание эти два определения, можно сказать, что растровое изображение является не чем иным, как набором пикселей, которые отображаются на сетке прямоугольного типа.
Растр монитора и размер пикселя влияют на качество изображения. Оно будет тем выше, чем больше растр у монитора. Размеры растра – это разрешение экрана, о котором наверняка слышал каждый пользователь. Одной из наиболее важных характеристик, которые имеют экраны компьютера, является разрешающая способность, а не только разрешение. Оно показывает, сколько пикселей приходится на ту или иную единицу длины. Обычно разрешающая способность монитора измеряется в пикселях на дюйм. Чем больше пикселей будет приходиться на единицу длины, тем выше будет качество, поскольку “зернистость” при этом снижается.
Обработка звукового потока
Кодирование текстовой и звуковой информации, как и другие виды кодирования, имеет некоторые особенности. Речь сейчас пойдет о последнем процессе: кодировании звуковой информации.
Представление звукового потока (как и отдельного звука) может быть произведено при помощи двух способов.
Аналоговая форма представления звуковой информации
При этом величина может принимать действительно огромное количество различных значений. Причем эти самые значения не остаются постоянными: они очень быстро изменяются, и этот процесс непрерывен.
Дискретная форма представления звуковой информации
Если же говорить о дискретном способе, то в этом случае величина может принимать только ограниченное количество значений. При этом изменение происходит скачкообразно. Закодировать дискретно можно не только звуковую, но и графическую информацию. Что касается и аналоговой формы, кстати.
Аналоговая звуковая информация хранится на виниловых пластинках, например. А вот компакт-диск уже является дискретным способом представления информации звукового характера.
В самом начале мы говорили о том, что компьютер воспринимает всю информацию на машинном языке. Для этого информация кодируется в форме последовательности электрических импульсов – нулей и единиц. Кодирование звуковой информации не является исключением из этого правила. Чтобы обработать на компьютере звук, его для начала нужно превратить в ту самую последовательность. Только после этого над потоком или единичным звуком могут совершаться операции.
Когда происходит процесс кодирования, поток подвергается временной дискретизации. Звуковая волна непрерывна, она развивается на малые участки времени. Значение амплитуды при этом устанавливается для каждого определенного интервала отдельно.
Заключение
Итак, что же мы выяснили в ходе данной статьи? Во-первых, абсолютно вся информация, которая выводится на монитор компьютера, прежде чем там появиться, подвергается кодированию. Во-вторых, это кодирование заключается в переводе информации на машинный язык. В-третьих, машинный язык представляет собой не что иное, как последовательность электрических импульсов – нулей и единиц. В-четвертых, для кодирования различных символов существуют отдельные таблицы. И, в-пятых, представить графическую и звуковую информацию можно в аналоговом и дискретном виде. Вот, пожалуй, основные моменты, которые мы разобрали. Одной из дисциплин, изучающей данную область, является информатика. Кодирование текстовой информации и его основы объясняются еще в школе, поскольку ничего сложного в этом нет.
|
Кодирование текстовой информации — онлайн справочник для студентов
Нередко тексты, написанные на естественных языках (английский, русский и так далее) подвергаются кодированию. О том, как кодируется текст, что такое стенография, какие существуют таблицы кодировки и многое другое, вы узнаете из этой статьи.
Есть несколько методов. Выделяют следующие способы кодирования информации:
Чтение текста является процессом, обратным его написанию и как следствие — письменная информация становится устной речью. Чтение является ничем иным как расшифровкой письменной информации. Важно отметить тот факт, что существует различные способы кодировки одной той же информации на одном конкретном языке.
Поскольку мы используем русский язык, то и текст нам привычней записывать с помощью нашего алфавита — кириллицы. Однако одну и ту же информацию можно записывать с помощью латинских букв. Иногда это приходится делать, когда необходимо отправлять SMS-сообщения по мобильному телефону, в клавиатуре которого не были реализованы буквы кириллицы, или же письмо по e-mail на русском языке, если адресат не имеет локализованное программное обеспечение. Так, например, фраза «Привет, дружище!» может быть записана как: «Privet, drushishe!».
Стенография
Стенография представляет собой метод кодирования текстовых данных посредством специальных знаков. Она является достаточно быстрым способом записи речи устной формы. Стенографию далеко не каждый может освоить, а только прошедшие специальное обучение люди, известные как стенографисты. Они обладают записывать текст параллельно произносимой выступающим человеком речи, что для обычных людей кажется достаточно сложной задачей. Однако для стенографистов это не является проблемой, так как в стенограмме одно слово или сочетание некоторых букв может быть обозначено в виде одного знака. По скорости письмо стенографического типа превосходит обычное в 4−7 раз. Произвести расшифровку по силам только самому стенографисту.
На рисунке ниже представлено то, как выглядит стенография, в которой закодирована следующая информация: «Говорить умеют все люди на свете. Даже у самых примитивных племен есть речь. Язык — это нечто всеобщее и самое человеческое, что есть на свете»: Такой метод предоставляет возможность не только производить запись, синхронную устной речи, но и сделать письменную технику более рациональной.
Приведённые выше примеры являются иллюстрацией основного правила: для того, что закодировать одну и ту же информацию можно прибегнуть к различным способам, при этом делать выбор в пользу того или иного способа нужно руководствоваться целью, условиями имеющимися для кодирования средствами.
- если необходимо записывать текст синхронно с речью, это стоит делать посредством стенографии;
- если необходимо отправить текст адресату из другой страны, можно прибегнуть к латинице;
- если нужно представить текст в форме, понятной для грамотного человека, его стоит записывать согласно грамматическим правилам русского языка.
Кроме того, немаловажное значение имеет выбор метода кодирования данных, который, помимо прочего, может иметь связь с предполагаемым методом их обработки.
Также стоит рассмотреть пример, при котором представляются числа количественной информации. Прибегнув к буквам кириллицы, можно написать число «сорок». Если же прибегнуть к арабской десятичной системе, то число будет выглядеть как 40. Как пример, поставлена задача, вычислить какое либо числовое значение. Понятное дело, что для этой задачи мы делаем выбор в пользу наиболее удобных арабских цифр, хотя ничто не мешает прибегать к словам, однако на их написание уйдет больше времени и места.
Стоит отметить, что вышеописанные примеры написания одного и того же числа базируются на совершенно разных языках. В первом случае используются буквы русского алфавита, в то время как во втором применяется формальный математический язык, который не имеет национальной привязанности. Переход от естественного языка к формальной разновидности можно считать кодированием.
Криптография
В особых случаях возникает необходимость в засекречивании информации, содержащейся в сообщениях или документации. Это нужно для того чтобы она не была прочтена сторонними людьми. Такое кодирование текста именуется защитой данных от несанкционированного доступа, при которой секретный текст зашифровывается. В далеком прошлом пытались скрывать данные посредством тайнописи.
Под шифрованием подразумевается процесс, при котором открытый текст преобразуется в зашифрованный. Дешифрование является полностью обратным процессом преобразования, цель которого — восстановление исходного текста. Шифрование тоже является кодированием, но с использованием засекреченного метода, известного лишь источнику данных и их получателю. Есть целая наука о методах шифрования, известная как криптография.
Криптография — это наука, изучающая принципы и методы передачи и приема данных, зашифрованных посредством специальных ключей. Ключи — это секретные данные, применяемые при шифровке и расшифровке информации.
Числовое кодирование данных в текстовом виде
Каждый национальный язык мира обладает собственным алфавитом, состоящим из конкретного набора последовательно расположенных символов (букв). Соответственно они обладают своим порядковым номером.
На каждую букву алфавита приходится целое положительное число — код символа, который будет храниться в памяти ПК, а при выводе на монитор или бумагу он преобразуется в тот символ, который ему соответствует. Кроме того в памяти хранятся данные о том, какая именно информация была закодирована в том или ином месте памяти. Это нужно для того, чтобы различать представленную в памяти информацию.
Прибегнув к соответствию алфавитных букв к числовым кодам можно формировать специальные таблицы кодирования. Если говорить более простым языком, символы того или иного алфавита обладают своими числовыми кодами, которые соответствуют конкретной таблице кодирования.
Однако, как известно, по всему миру имеется огромное количество языков и множество алфавитов, которые могут иметь множество отличий от остальных. Отсюда возникает вопрос: как можно закодировать каждый используемый алфавит на компьютере?
Еще в шестидесятых годах прошлого столетия американский институт ANSI занялся разработкой таблицы ASCII, задача которой – кодирование символов. В дальнейшем данная таблица стала применяться во всех операционных системах.
Эта таблица содержит стандарт кодирования на 7 бит, применив который компьютер окажется способен записывать любой символ в семи битную ячейку устройства для хранения информации. Важно отметить то, что в ячейке может быть сохранено вплоть до 128 состояний. В ASCII каждому из таких состояний соответствует тот или иной символ — буквы, знаки препинания и так далее.
С течением времени оказалось, что из-за технического прогресса такой стандарт кодирования оказался крайне мал, поскольку в стольких состояниях одной ячейки закодировать буквы каждой письменности мира не предоставляется возможным.
Для решения данной проблемы разработчиками ПО были начаты работы по созданию восьми битных стандартов кодировки. Благодаря восьмому биту удалось увеличить диапазон кодирования в 2 раза – до 256 символов. Первая половина этих символов в таких кодировках, преимущественно, соответствуют стандарту ASCII, в то время как вторая отведена на реализацию региональных языковых особенностей.
Как известно, существует целое множество алфавитов, соответственно и таблицы ASCII-кодов имеют множество вариаций. Так в случае русского языка наиболее распространенными вариантами являются Windows-1251 и Koi8-r. Из-за огромного числа вариантов таких таблиц возникают некоторые трудности. Как пример, письмо отправляется в одном варианте кодировки, в том время как адресат пытается его прочесть другой, используя совершенно другой способ кодирования символов. Вследствие этого на экране отображается набор непонятных символов и чтобы прочесть текст, потребуется соответствующая ему кодировочная таблица.
Также возникают трудности с теми языками, а алфавите содержится очень много символов, которые уместить в позиции с 128 до 255 однобайтовой кодировки невозможно.
Еще одна проблема – это когда текст содержит в себе несколько языков (допустим, русский и два любых других с латинскими буквами). В таком случае не удастся одновременно задействовать несколько таблиц.
Так было вплоть до начала девяностых годов прошлого века, пока миру не была представлена новая разработка под названием Unicode, ставшая сейчас стандартом. Она позволяла использовать в одном документе любые языки и символы.
Unicode предоставлял 31 бит, что соответствует четырем байтам без одного бита. Число вероятных комбинаций был просто огромным – свыше двух миллиардов. Это оказалось возможным благодаря тому, что стандарт описывал каждый известный алфавит, в том числе алфавиты выдуманных и давно никем не используемых языков, включая множество математических и прочих символов. Поскольку такая емкость оказалось очень большой, в основном прибегают к сокращенной версии на 16 бит со всеми современными алфавитами. Первые 128 кодов Unicode аналогичны таблице ASCII.
Смотрите также:
Кодирование и декодирование информации
Архитектура персонального компьютера
Руководство по кодированию текста в Python | Куртис Пайкс
Обучение компьютеров пониманию человеческого языка
Фото Джошуа Арагона на UnsplashПричина, по которой мы кодируем текст, заключается в том, что компьютеры не понимают символы, слова или предложения; Компьютеры могут обрабатывать только числа, поэтому, если мы хотим научить компьютеры понимать естественный язык, мы должны кодировать текстовые данные в числовой формат, прежде чем вводить их в любую машину.
Следовательно, кодирование текста можно определить как процесс преобразования текста в осмысленные числовые / векторные представления.В рамках этого процесса мы хотим сохранить контекст и зависимости между словами и предложениями, чтобы машина могла обнаруживать шаблоны, связанные с текстом, а также понимать контекст.
Существуют различные способы кодирования текста:
- Быстрое кодирование
- Кодирование на основе индексов
- Пакет слов (BOW)
- Частота термина — обратная частота документа (TF-IDF)
- Вложения слов
Это еще не весь список, но его достаточно для начала.У каждой кодировки есть свои плюсы и минусы, и каждая из них может лучше подходить для одной задачи, чем для другой. Самые простые кодировки, такие как BOW, не сохраняют порядок слов, тогда как другие используют нейронные сети, такие как Word2Vec.
Давайте реализуем их на Python.
Горячее кодирование
Горячее кодирование представляет категориальные переменные в виде двоичных векторов. Чтобы реализовать это, категориальные значения сначала должны быть сопоставлены с целым числом, затем каждое целое число должно быть представлено как двоичный вектор — это означает, что вектор будет состоять из всех нулей, кроме индекса целого числа.
# определить документыРеализация быстрого кодирования — Изображение автора
corpus = ["я не могу дождаться выхода из режима блокировки", "великобритания скоро станет бесплатной", "linkedin is social media"] # преобразование текста в промежуточные числа
token_docs = [doc .split () для документа в корпусе]
all_tokens = set ([слово для предложения в token_docs для слова в предложении])
word_to_idx = {token: idx + 1 для idx, токен в enumerate (all_tokens)} # преобразование документов в их идентификаторы токенов
token_ids = np.array ([[word_to_idx [token] для токена в token_doc] для token_doc в token_docs], dtype = object)
token_ids_padded = pad_sequences (token_ids, padding = "post")
token_ids.reshape (-1, 1) # преобразование идентификаторов токенов в одно горячее представление
one_hot = OneHotEncoder ()
X = one_hot.fit_transform (token_ids_padded) # преобразование в фрейм данных
X_df = pd.DataFrame (X.toarray ())
X_df
Каждый документ представлен тензором, и каждый тензор состоит из последовательности нулей и единиц. Хотя кодировки One-Hot сохраняют порядок слов, по мере того, как документы становятся длиннее, мы получаем очень большие разреженные векторы.
Индексное кодирование
Индексное кодирование также сохраняет порядок слов.Чтобы реализовать кодирование на основе индекса, вы просто сопоставляете каждое слово с одним индексом. Нам также нужно будет добавить отступы к каждому предложению, чтобы все они были одинаковой длины. На основе сопоставлений в словаре каждый документ представлен в виде последовательности индексов, где каждое число представляет собой кодировку одного слова.
import numpy as npИндексная кодировка Dataframe — Изображение Автор
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from tensorflow.keras.preprocessing.sequence import pad_sequences # определить документы
corpus = ["я не могу дождаться выхода из блокировки", " uk скоро станет бесплатным "," linkedin is social media "] # преобразование текста в промежуточные числа
token_docs = [doc.split () для документа в корпусе]
all_tokens = set ([слово для предложения в token_docs для слова в предложении])
word_to_idx = {token: idx + 1 для idx, token in enumerate (all_tokens)} # преобразование документов в их идентификаторы токенов
X = np.array ([[word_to_idx [token] для токена в token_doc] для token_doc в token_docs], dtype = object) # дополнение последовательностей
X_padded = pad_sequences (X, padding = "post") # преобразование в pandas df
X_df = pd.DataFrame (X_padded)
Примечание : Имена столбцов представляют, где встречаются слова в тексте
Недостаток кодирования на основе индекса состоит в том, что он вводит числовые расстояния между текстами, которые не являются реальными, например, почему слово «кошка» должно иметь индекс 1, а «собака» — номер 324?
Мешок слов (BOW)
Метод кодирования «Мешок слов» получил свое название от того факта, что любая информация или структура слов в документе отбрасываются, поэтому это похоже на то, что вы поместили набор слов в bag и встряхнул — его волнует только то, появляется ли слово в документе и сколько раз оно встречается.Неважно, где он появился.
import pandas as pdBoW dataframe — Image By Author
from sklearn.feature_extraction.text import CountVectorizer # определите документы
corpus = ["я не могу дождаться выхода из режима блокировки", "скоро скоро выйдет из строя великобритания", "linkedin is social media "] # реализация BoW
bow = CountVectorizer ()
bow.fit (corpus)
X = bow.transform (corpus) # преобразование в dataframe
X_df = pd.DataFrame (X.toarray (), columns = sorted (bow .vocabulary_))
X_df
Хотя модель BoW чрезвычайно проста для понимания и реализации, она не соответствует многим аспектам, наиболее очевидным из которых является потеря смысла, поскольку мы отбрасываем порядок слов — мы потерять контекст, в котором использовалось слово.
Частота термина — обратная частота документа (TF-IDF)
Проблема с оценкой частоты слов заключается в том, что очень часто встречающиеся слова начинают доминировать в документе, несмотря на то, что они не добавляют большого значения документу. Например, такие слова, как «and», «the», «a» и т. Д. Довольно распространены в английском языке, поэтому эти слова часто встречаются в документах. TF-IDF распознает эту проблему и наказывает слова, которые наиболее заметны во всех документах.
import pandas as pdТранспонирование фрейма данных TF-IDF — Изображение автора
from sklearn.feature_extraction.text import TfidfVectorizer # define the documents
corpus = ["я не могу дождаться выхода из режима блокировки", "великобритания скоро станет бесплатной", "linkedin is social media "] # реализовать tfidf
tfidf = TfidfVectorizer ()
tfidf.fit (corpus)
X = tfidf.transform (corpus) # преобразовать в фрейм данных
X_df = pd.DataFrame (X.toarray (), columns = sorted (tfidf .vocabulary_))
X_df.T
Однако, поскольку кодировка TF-IDF основана на кодировках BOW, она также не фиксирует положение слова в тексте, семантику и т. д. — встречается в разных документах, но это также очень легко вычислить.
Вложения слов
Вложения слов — отличный пример трансферного обучения. Трансферное обучение — это исследовательская проблема в машинном обучении, которая фокусируется на хранении знаний, полученных при решении одной проблемы, и применении их к другой, но связанной проблеме. [ Источник : Википедия].
Подробное описание того, как работают различные вложения слов или переносное обучение, выходит за рамки данной статьи, но мы все же увидим, как реализовать кодировку Word2Vec.
из gensim.models import Word2Vec # определить документы
corpus = ["я не могу дождаться выхода из режима блокировки", "великобритания скоро станет бесплатной", "linkedin is social media"] # Word2Vec model
w2v = Word2Vec (min_count = 1,
size = 20,
window = 2,
alpha = 0.03) # построение словаря
w2v.build_vocab (предложения = corpus) # обучение модели
w2v.train (предложения = corpus, total_examples = w2v.corpus_count, epochs = 10)
Примечание : будет создана специальная статья для трансферного обучения в НЛП.
Заключение
Целью кодирования текстовых данных [и всех других типов данных] является обеспечение правильного использования данных машиной. В этой статье я рассмотрел 5 различных способов кодирования ваших текстовых данных. Мне нравится использовать распределенные представления, такие как встраивание слов, когда контекст действительно имеет значение, но есть много случаев, когда эффективны более простые методы, такие как мешок слов, например задачи классификации.
Спасибо за внимание! Свяжитесь со мной в LinkedIn и Twitter, чтобы быть в курсе моего последнего сообщения об искусственном интеллекте, науке о данных и фрилансе.
Статьи по теме
NLP — Text Encoding: A Beginner’s Guide | Бишал Бозе | Analytics Vidhya
— В этом блоге мы поймем , ЧТО ТАКОЕ кодирование текста ? КАК это выполнить? А точнее ПОЧЕМУ его выполнять?
Источник: GoogleДавайте сначала попробуем понять несколько основных правил…
1. Машина не понимает символы, слова или предложения.
2. Машины могут обрабатывать только числа.
3.Текстовые данные должны быть закодированы как числа для ввода или вывода для любой машины.
ЗАЧЕМ выполнять кодирование текста?
Как упоминалось в вышеупомянутых пунктах, мы не можем передавать необработанный текст в машины в качестве входных данных до тех пор, пока мы не преобразуем их в числа, поэтому нам нужно выполнить кодирование текста.
ЧТО такое кодирование текста?
Кодирование текста — это процесс преобразования значимого текста в числовое / векторное представление с целью сохранения контекста и взаимосвязи между словами и предложениями, так что машина может понимать шаблон, связанный с любым текстом, и может различать контекст предложений .
КАК закодировать текст для любой задачи НЛП?
Существует множество методов преобразования текста в числовые векторы, это:
— Индексная кодировка
— Пакет слов (BOW)
— Кодировка TF-IDF
— Word2Vector Encoding
— BERT Encoding
Поскольку это базовое объяснение кодирования текста NLP, мы пропустим последние 2 метода, т.е.е. Word2Vector и BERT, поскольку они являются довольно сложными и мощными реализациями встраивания текста на основе метода глубокого обучения для преобразования текста в векторную кодировку.
Вы можете найти подробную информацию о Word2Vector в другом моем блоге, указанном здесь: NLP — Text Encoding: Word2Vec
Прежде чем мы углубимся в каждый метод, давайте приведем несколько основных примеров, чтобы упростить выполнение.
Корпус документов: это весь набор текста, который у нас есть, в основном наш корпус текста, может быть что угодно, например, новостные статьи, блоги и т. Д.… И т. Д.…
Пример: У нас есть 5 предложений, а именно: [«это хороший телефон», «это плохой мобильный телефон», «она хорошая кошка», «у него плохой характер», «этот мобильный телефон плохой »]
Data Corpus: это набор уникальных слов в нашем корпусе документов, то есть в нашем случае он выглядит так:
[« a »,« bad »,« cat »,« good » , «Имеет», «он», «есть», «мобильный», «не», «телефон», «она», «характер», «это»]
Мы будем придерживаться этих предложений, чтобы понять каждый метод встраивания .
Это упростит понимание и понимание интуиции, лежащей в основе этих методов.
Итак, давайте попробуем разобраться в каждом из них по отдельности:
1. Кодирование на основе индекса:Как следует из названия, на основе индекса, нам обязательно нужно дать всем уникальным словам индекс, например мы выделили наш Data Corpus, теперь мы можем индексировать их по отдельности, например…
a: 1
bad: 2
…
this: 13
Теперь, когда мы присвоили уникальный индекс всем словам, поэтому что на основе индекса мы можем однозначно идентифицировать их, мы можем преобразовать наши предложения с помощью этого основанного на индексе метода.
Очень легко понять, что мы просто заменяем слова в каждом предложении их соответствующими индексами.
Наш корпус документов становится:
[13 7 1 4 10], [13 7 1 2 8], [11 7 1 4 3], [6 5 1 2 12], [13 8 10 7 9 4]
Теперь мы закодировали все слова индексными числами, и это можно использовать в качестве входных данных для любой машины, поскольку машина понимает числа.
Но есть небольшая проблема, которую нужно решить в первую очередь, и это согласованность ввода.Наши входные данные должны быть той же длины, что и наша модель, они не могут изменяться. Он может отличаться в реальном мире, но о нем нужно позаботиться, когда мы используем его в качестве входных данных для нашей модели.
Теперь, как мы видим, в первом предложении 5 слов, а в последнем — 6 слов, это вызовет дисбаланс в нашей модели.
Итак, чтобы решить эту проблему, мы делаем максимальное заполнение, что означает, что мы берем самое длинное предложение из нашего корпуса документа и дополняем другое предложение, чтобы оно было таким же длинным. Это означает, что если все мои предложения состоят из 5 слов, а одно предложение состоит из 6 слов, я сделаю все предложения из 6 слов.
Теперь, как нам добавить сюда лишнее слово? Как в нашем случае добавить сюда этот дополнительный индекс?
Если вы заметили, мы не использовали 0 в качестве номера индекса, и желательно, чтобы он нигде не использовался, даже если у нас есть корпус данных длиной 100000 слов, поэтому мы используем 0 в качестве нашего индекса заполнения. Это также означает, что мы ничего не добавляем к нашему фактическому предложению, поскольку 0 не представляет какое-либо конкретное слово, следовательно, целостность наших предложений не нарушена.
Итак, наконец, наши кодировки на основе индекса следующие:
[13 7 1 4 10 0],
[13 7 1 2 8 0],
[11 7 1 4 3 0],
[6 5 1 2 12 0],
[13 8 10 7 9 4]
И именно так мы сохраняем целостность нашего ввода такой же, не нарушая при этом контекст наших предложений.
Индексное кодирование рассматривает информацию о последовательности в текстовой кодировке.
2. Пакет слов (BOW):Пакет слов или BoW — это еще одна форма кодирования, при которой мы используем весь корпус данных для кодирования наших предложений. Это обретет смысл, когда мы на самом деле увидим, как это сделать.
Data Corpus:
[«а», «плохо», «кот», «хорошо», «имеет», «он», «есть», «мобильный», «не», «телефон», «она» »,« Temper »,« this »]
Поскольку мы знаем, что наш корпус данных никогда не изменится, поэтому, если мы будем использовать это в качестве основы для создания кодировок для наших предложений, тогда мы будем в выигрыше, чтобы не дополнять какие-либо лишние слова.
Итак, первое предложение, которое у нас есть, звучит так: «Это хороший телефон»
Как мы можем использовать весь корпус для представления этого предложения?
Итак, наше первое предложение становится комбинацией всех слов, которые у нас есть и которых нет.
[1,0,0,1,0,0,1,0,0,1,0,0,1]
Вот как представлено наше первое предложение.
Теперь существует 2 вида ЛУКА:
1. Двоичный ЛУК.
2. BOW
Разница между ними в том, что в Binary BOW мы кодируем 1 или 0 для каждого слова, появляющегося или не появляющегося в предложении.Мы не принимаем во внимание частоту появления слова в этом предложении.
В BOW мы также принимаем во внимание частоту каждого слова, встречающегося в этом предложении.
Скажем, наше текстовое предложение — «это хороший телефон, это хороший мобильный телефон» (FYI только для справки)
Если вы внимательно посмотрите, мы учли, сколько раз использовались слова «это», «а», « есть »и« хорошо ».
Это единственное различие между Binary BOW и BOW.
BOW полностью отбрасывает информацию о последовательности наших предложений.
3. Кодировка TF-IDF:Частота термина — обратная частота документа
Как следует из названия, здесь мы даем каждому слову относительную частотную кодировку относительно текущего предложения и всего документа.
Частота термина: вхождение текущего слова в текущем предложении относительно общего количества слов в текущем предложении.
Обратная частота данных: журнал общего количества слов во всем корпусе данных w.r.t — общее количество предложений, содержащих текущее слово.
TF:
Term-FrequencyIDF:
Inverse-Data-FrequencyСледует отметить одну вещь: мы должны вычислить частоту каждого слова для этого конкретного предложения, потому что в зависимости от того, сколько раз слово встречается в В предложении значение TF может измениться, тогда как значение IDF остается постоянным до тех пор, пока не будут добавлены новые предложения.
Попробуем разобраться, экспериментируя:
Data Corpus: [«а», «плохо», «кот», «хорошо», «имеет», «он», «есть», «мобильный», « не »,« телефон »,« она »,« характер »,« это »]
TF-IDF:« это »в предложении1: количество« этого »слова в предложении1 / общее количество слов в предложении1
IDF: log (общее количество слов во всем корпусе данных / общее количество предложений, содержащих «это» слово)
TF: 1/5 = 0.2
IDF: loge (13/3) = 1,4663
TF-IDF: 0,2 * 1,4663 = 0,3226
Таким образом, мы связываем «это»: 0,3226; аналогично мы можем узнать TF-IDF для каждого слова в этом предложении, а затем остальная часть процесса останется такой же, как BOW, здесь мы заменяем слово не частотой его появления, а значением TF-IDF для этого слова.
Итак, давайте попробуем закодировать наше первое предложение: «это хороший телефон»
Поскольку мы видим, что мы заменили все слова, появляющиеся в этом предложении, их соответствующими значениями tf-idf, следует отметить одну вещь: у нас есть похожие значения tf-idf для нескольких слов.Это редкий случай, который случился с нами, поскольку у нас было мало документов и почти все слова имели примерно одинаковую частоту.
Так мы добиваемся кодировки текста TF-IDF.
Теперь мы попробуем реализовать их самостоятельно:
Это наш корпус документов, как упоминалось выше. Я настроил данные, чтобы сделать их более понятными, это даст больше смысла кодировкам.
Вот как мы создаем наш корпус данных на основе любого корпуса документов, который у нас есть.
Сначала мы выясняем максимальную длину предложения, а затем, используя наш корпус данных, мы кодируем весь наш текст с помощью схемы на основе индекса.
Реализация двоичного BoW, где мы помещаем 1 для каждого слова, встречающегося в предложении в корпусе данных, и 0 для остальных.
Реализуя BoW, здесь мы должны закодировать количество вхождений слова в этом конкретном предложении в корпус данных и 0 для остальных.
Первое вычисление частоты каждого элемента w.r.t предложения.
Создание функции для вычисления tf-idf для каждого слова в конкретном предложении, которая берет ссылку на созданные выше частоты.
Наконец, создаем векторы tf-idf для нашего модуля.
CountVectorizer из модуля Scikit-Learn дает нам представление текста в формате BoW. Мы можем использовать разные параметры для расчета двоичного BoW или BoW и многих других настроек.
TfidfVectorizer из модуля Scikit-Learn дает нам TF-IDF представления кодировки текста, аналогично CountVectorizer, мы можем установить множество параметров для преобразования.
Будет небольшая разница в значениях, так как мы реализовали базовую версию TF-IDF. В библиотеке Scikit-learn они реализуют TF-IDF разными методами, поэтому мы видим такие различия, в остальном более или менее вещи одинаковы.
Итак, вот и все: основные реализации кодирования текста NLP.
Вы можете найти код в моей ссылке на GitHub здесь .
Следующий раздел: NLP — Кодировка текста: Word2Vec
Кодирование и отправка форматированного текста
Обзор
На этом уроке учащиеся сначала знакомятся со стандартной схемой кодирования числа в текст, используемой в компьютерах и в Интернете, известной как кодирование ASCII.Студенты изобретут протокол связи, который использует только символы обычного текста ASCII для кодирования более красивого форматирования текста, такого как шрифты, цвета, размеры и т.д. правильно интерпретировать форматирование и нарисовать результат на листе бумаги.
Назначение
Этот урок дает представление о «языках программирования», предлагая учащимся изобрести способ использования простого текста ASCII для кодирования другого текста.На этом этапе мы действительно начинаем видеть, как слои за слоями кодировок — все восходящие к двоичным — работают вместе для кодирования сложной информации.
Мы также хотим подключиться к Интернету и протоколам. Информация, передаваемая через Интернет, часто должна содержать как содержание сообщения, так и информацию, которая помогает форматировать, маршрутизировать или интерпретировать эти данные.
Разработка средств для различения этих двух типов информации привела к созданию ряда широко распространенных протоколов и языков.HTML (сокращение от HyperText Markup Language) — это язык, на котором написано содержимое и форматирование веб-страницы. И протокол HTTP, или протокол передачи гипертекста, — это еще один протокол на основе ASCII, который является основой коммуникации в Интернете — он был разработан для отправки и получения данных веб-страниц через Интернет. В обоих случаях простой текст ASCII наполняется более глубоким смыслом благодаря разработке четко определенных протоколов.
Повестка дня
Начало работы (15 минут)
Активность
Заключение
Оценка
Расширенное обучение
Посмотреть на Code Studio
Цели
Студенты смогут:
- Опишите схему кодирования ASCII.
- Разработать / изобрести протокол для отправки форматированного текста с помощью Internet Simulator.
- Изобретите язык форматирования текста.
- Объясните связь между двоичным и более сложным кодированием форматированного текста
Препарат
- (Дополнительно) Бумага для плакатов
- Маркеры или мелки
- Раздел подготовлен для использования Internet Simulator в Code Studio.
Ссылки
Внимание! Сделайте копии всех документов, которыми вы планируете поделиться со студентами.
Учителям
Студентам
Словарь
- ASCII — Американский стандартный код для обмена информацией; общепризнанный формат исходного текста, понятный любому компьютеру
- код — (v) для написания кода или для написания инструкций для компьютера.
- Протокол — Набор правил, регулирующих обмен или передачу данных между устройствами.
Начало работы (15 минут)
Примечания
В предыдущих уроках мы изучили, как кодировать числа в двоичном формате, а вы также разработали протоколы для отправки списка чисел.Сегодня мы собираемся сделать еще один шаг вперед в этом методе и посмотрим, как мы можем кодировать текст с помощью двоичного представления. Надеюсь, вы начинаете понимать, что если мы сможем найти способ представления информации в виде набора чисел, то мы сможем закодировать ее в битах и сохранить эту информацию на компьютере или отправить ее через Интернет.
Учебный совет
- Обычный способ сделать это — сделать простое отображение 26 букв алфавита в числа, как в примере справа.Однако это не единственное решение.
- Студенты должны иметь возможность изобретать схему кодирования текста, как им нравится. Некоторые учащиеся могут пожелать дать обычным фразам или словам собственные последовательности битов, а не буквенно-числовые сопоставления.
- Если учащиеся быстро двигаются, предложите им добавить больше функций. Как их протоколы будут кодировать знаки препинания, заглавные буквы и специальные символы?
Подсказка:
«Одно из самых мощных способов использования Интернета — это отправка текста людям.Поскольку Интернет может передавать только биты, нам нужен способ кодирования текста битами … «
«Если бы это было ваше дело, как бы вы закодировали текст в двоичном формате? Быстро набросайте идею кодирования текста».
- Дайте студентам пару минут, чтобы они могли записать свои мысли.
- Подчеркните, что им не нужно фактически указывать каждую деталь схемы, а просто необходимо обрисовать ее структуру.
Цель обсуждения
Очков для обсуждения:
- Скорее всего, изобрел схему, которая отображала буквы алфавита и другие текстовые символы на числа.
- Есть компромиссы при принятии решения о том, сколько бит на символ, по вашему мнению, вам нужно. Насколько различаются предложения студентов?
- Чтобы передавал текстовые данные , нам всем нужно согласовать схему кодирования (предвещает ASCII)
Обсудить
Попросите учащихся сначала сравнить и сопоставить схемы кодирования со своими соседями, а затем начать обсуждение в классе. Вот несколько подсказок:
- Вам и вашему соседу пришла в голову точно такая же идея? Что было по-другому?
- Сколько битов требуется для вашей схемы кодирования? Например, сколько бит вам нужно, чтобы сказать «привет»?
- Вы учли что-нибудь, кроме букв алфавита (или целых слов)?
- Какая из схем кодирования, упомянутых до сих пор, является «лучшей»? Зачем?
Представьте схему кодирования ASCII.
Примечания
Вы только что придумали свою схему кодирования текста числами. Оказывается, для большинства символов, которые можно набирать на американской клавиатуре, существует стандартная кодировка.
Эта кодировка называется американским стандартным кодом обмена информацией или ASCII (произносится: «Аск-и»).
Учебный совет
Если позволит время, вы можете отправить студентов провести собственное «быстрое исследование» по ASCII и отчитаться.У вас должны получиться те же точки.
Быстрое действие: напишите свое имя в кодах ASCII
Используя таблицу ASCII, переведите свое имя из букв в числа с помощью таблицы ASCII.
- Напишите свое имя как: * Имя! »(Первая буква заглавная, в конце восклицательный знак)
- Дайте учащимся минуту на это
Переходное замечание
- Наличие стандартизованного протокола, такого как ASCII для кодирования текста, позволяет нам отправлять и получать текстовую информацию.
- Это очень полезно, но все же есть случаи, когда нам понадобится еще большая выразительность в наших цифровых коммуникациях.
Деятельность
Проблема форматирования текста: создание протокола для кодирования форматированного текста
Введение:
«Что, если бы вы хотели отправить форматированный текст , который включал такие вещи, как возможность подчеркивания, полужирного или курсивного начертания слов…. указать другой размер или цвет шрифта? «
Учебный совет
Вы можете опросить класс на предмет других видов форматирования текста. Некоторые вещи, которые могут появиться: таблиц или сеток текста различных начертаний шрифта (например, Arial, Times, gill sans и т. Д.) * размещение текста на странице, например, плавающие текстовые поля и т. д.
Вот такие вещи:
Примечания
Сегодня ваша задача:
- Изобретите протокол для отправки форматированного текста
- Воспользуйтесь имитатором Интернета, чтобы проверить свой протокол.
Вы также заметите, что имитатор Интернета был обновлен , так что теперь вы можете вводить текстовые символы ASCII для отправки.
Переход на Code Studio
Учебный совет
Перед тем, как начать упражнение, вы можете попросить учащихся просто попрактиковаться в отправке текстовых сообщений ASCII друг другу, чтобы почувствовать новую среду.
При этом вы должны указать, что все еще двоичное под капотом.
Вкладку My Device в Internet Simulator можно использовать для включения или выключения различных схем кодирования.
- Учащиеся должны заметить новую возможность отправлять текст.
Цель деятельности
Студенты должны определить протокол, который позволяет кодировать форматирование текста, используя только печатный набор символов ASCII, то есть 32-126.
Обычный способ сделать это — указать набор «зарезервированных слов» или символов, которые следует интерпретировать как инструкции форматирования.Например, HTML использует угловые скобки <...> с открывающими и закрывающими тегами, например:
Учащиеся, которые знакомы с HTML до этого урока, могут легко придумать схемы для простых задач; дайте им некоторые из наиболее сложных кодировок, например добавление форматирования столбцов к их тексту, размещение текста в произвольном месте на странице (например, текстовое поле), создание таблиц и т. д.
Изобретите протокол для отправки форматированного текста с помощью Internet Simulator
(из руководства)
Проезд
Совместно с партнером или небольшой командой разработайте протокол, позволяющий отправлять форматированный текст.
Руководящие принципы
И текст, и инструкции форматирования должны быть производными от печатаемого набора символов ASCII (т. Е. Кодов 32–126).
Ваш протокол должен кодировать как минимум:
Учебный совет
Дайте командам время разработать свои протоколы либо в своих руководствах по деятельности, либо на отдельном плакате, документе, слайд-шоу и т. Д.
Поощряйте студентов итеративно тестировать свои протоколы, чтобы убедиться, что они не упустили ни одного пробела в своем протоколе.
Разработайте свой протокол
Используйте место ниже, чтобы обсудить идеи для вашего протокола. Итеративно улучшайте свой протокол, тестируя его с помощью простых примеров сообщений.
Демонстрация:
- Протестируйте протоколы учащихся, предоставив отформатированное сообщение одному члену команды и попросив его отправить сообщение своему партнеру с помощью Интернет-симулятора.
- Студенты могут воссоздать сообщение вручную или в текстовом документе и сравнить результаты с предполагаемым сообщением.
- Для более убедительного доказательства попросите одного члена каждой группы перейти в другую сторону комнаты или коридора.
Заключение
Уголок содержания
Скорее всего, учащиеся изобрели текстовый код. Независимо от того, являются ли они языками форматирования, такими как HTML или Markdown, или языками программирования, такими как Java, C или Python, все эти языки имеют одну общую черту: они используют текст ASCII для кодирования другого текста или информации.
Не стесняйтесь говорить студентам, что они только что изобрели язык программирования. На данный момент код и протокол очень похожи. Несмотря на то, что это, вероятно, то, что никто другой не будет использовать, процесс, через который только что прошли студенты, дает возможность изобрести любой формальный язык или протокол, который в конечном итоге должен быть интерпретирован и обработан компьютером.
Обсудить результаты деятельности
Обсудить Используйте стратегию группового обсуждения, чтобы ответить на следующие вопросы:
- Были ли успешными большинство групп?
- Если нет, то что вызвало больше всего проблем?
- Было ли легче решить одни компоненты проблемы, чем другие?
Сравнить / сопоставить схемы кодирования с HTML
Дополнительная демонстрация
- Большинство веб-браузеров позволяют просматривать исходный код веб-сайта (например,г. Chrome позволяет это в Инструментах разработчика).
- Укажите на систему тегов, используемую для структурирования текста веб-сайта. Попросите учащихся подумать, насколько этот протокол похож или отличается от их собственного.
- Вводный HTML-код W3Schools: http://www.w3schools.com/html/html_intro.asp
- Сегодняшняя деятельность мотивирована реальной задачей — оживить веб-страницы.
- Студенты, более знакомые с HTML / CSS, могут распознать многие из этих идей, но все же может быть поучительно показать классу, что большая часть информации, необходимой для просмотра веб-страницы, — это не сам контент, а информация о том, как это должно быть. быть отформатированным.
Цель обсуждения
Есть много способов ответить на этот вопрос. Любой ответ, подтверждающий:
- последовательности двоичных состояний могут использоваться для представления чисел Цифры
- можно присвоить буквам алфавита для кодирования текста
- с обычным текстом, вы можете сделать код , который вы можете использовать для применения других значений (или форматов) к тексту
- Вы можете изобрести «язык форматирования» (например, HTML) для представления различных способов отображения текстовых сообщений.
Обсудить слои кодировок
Сделайте быстрый Think Pair Share или, возможно, назначьте этот вопрос письменной работой.
Подсказка:
«Найдите минутку, чтобы подумать об уровнях кодирования, которые позволяли передавать форматированный текст через Интернет».
«Представьте, что кто-то указал на отформатированный текст и спросил:« Вы можете мне объяснить, как он кодируется в двоичном формате? » Как бы вы это объяснили? »
- Дайте студентам возможность записать идеи.
- Обсудить с соседом.
- Поделитесь объяснениями с классом.
Оценка
Оценка урока
Рубрика:
Вопросы (можно найти как в Рубрике, так и в Code Studio):
- Сколько битов требуется для хранения числа «150» в ASCII?
- 3 бита
- 8 бит
- 16 бит
- 24 бита
- 32 бита
- Слово «Apple», переведенное на его эквивалент в кодировке ASCII, выглядит следующим образом:
- 097 112 112 108 101
- 097 108 108 111 119
- 065 112 112 108 101
- 065 110 110 105 101
- 065 108 108 111 111 119
- Какие проблемы возникли при создании рабочего протокола? Как вы относились к проблемам, чтобы их решить?
- Опишите один случай, когда сотрудничество с партнером повлияло на окончательный протокол, подготовленный вашей командой.
Оценка главы
Учебный совет
Некоторые вопросы по этой оценке могут показаться «не имеющими отношения к делу» или только косвенно связанными с материалом уроков. Это сделано намеренно, так как это хорошая имитация вопросов, которые студенты могут найти на реальном экзамене. Во многих случаях ученик, вероятно, может использовать свои суждения и интуицию, основываясь на том, что они узнали, чтобы сделать довольно хорошее предположение по вопросу.
Однако, как всегда, эти ресурсы являются лишь рекомендацией, и вы должны использовать их так, как лучше всего подходит вашему классу и их потребностям.Целью CSP является расширение участия в информатике, поэтому, если предложение этого теста в качестве теста с высокими ставками в начале года будет противоречить этой цели, возможно, попробуйте пройти оценку с меньшими ставками (разрешите учащимся работать с партнером, сделайте оценку меньше баллов и т. д.), чтобы попрактиковаться в будущем.
В Code Studio есть экзамен с несколькими вариантами ответов для этой главы. Его можно найти на сцене сразу после этого урока и использовать функцию Lockable Stages.Если вы новичок в блокируемых этапах, ознакомьтесь с разделом «Как управлять заблокированным тестом».
Расширенное обучение
- Дополнительные проблемы с кодировкой форматирования:
- Специальные символы, не найденные в кодировке ASCII (например, ñ)
- Несколько столбцов текста
- Текстовое поле в любом месте экрана
- Информационная таблица
- Продолжите изучение HTML, определив, как бы вы завершили сегодняшнюю деятельность в HTML.Далее сравните ваш собственный протокол с HTML.
- Прочтите «Раздутый на биты» (www.bitsbook.com), Глава 3, Призраки в машине, стр. 73-80 («То, что вы видите, — это не то, что знает компьютер»), затем ответьте на следующие вопросы:
- Приведите пример ваш собственный, когда простого знания того, что делает компьютер, было недостаточно — вам действительно нужно было знать, как и почему он делает то, что делает.
- Расскажите о метаданных файла и о том, как они «отпечатывают» файл. Включите обсуждение преимуществ и проблем файловых метаданных.
- Прочтите «Раздутые на биты» (www.bitsbook.com), глава 3, Призраки в машине, стр. 80-88 (Представление, реальность и иллюзия), затем ответьте на следующие вопросы:
- Как выделяется в PDF-документе работай? Какие вычислительные идеи используются?
- Продолжите изучение HTML, определив, как бы вы завершили сегодняшнюю деятельность в HTML. Далее сравните ваш собственный протокол с HTML.
Что такое кодировка UTF-8? Руководство для непрограммистов
Текст: его важность в Интернете само собой разумеется.Это первая буква «Т» в «HTTP», единственная буква «Т» в «HTML», и практически каждый веб-сайт так или иначе использует ее, будь то URL-адрес, часть маркетингового текста, обзор продукта, вирусный твит или Сообщение блога. (Привет!)
Но веб-текст на самом деле может быть не таким простым, как вы думаете. Рассмотрим тысячи языков, на которых сегодня говорят, или все знаки препинания и символы, которые мы можем добавить, чтобы улучшить их, или тот факт, что создаются новые смайлики, чтобы уловить каждую человеческую эмоцию. Как веб-сайты все это хранят и обрабатывают?По правде говоря, даже такая простая вещь, как текст, требует хорошо скоординированной, четко определенной системы для отображения в веб-браузерах.В этом посте я объясню основы одной технологии, которая имеет ключевое значение для текста в Интернете, UTF-8 . Мы изучим основы хранения и кодирования текста и обсудим, как это помогает разместить на вашем сайте привлекательные слова.
Прежде чем мы начнем, вы должны быть знакомы с основами HTML и готовы погрузиться в легкую информатику.
Что такое UTF-8?
UTF-8 означает «Формат преобразования Unicode — 8 бит». Пока это нам не помогает, так что давайте вернемся к основам.
Двоичный: как компьютеры хранят информацию
Для хранения информации компьютеры используют двоичную систему. В двоичном формате все данные представлены последовательностями из единиц и нулей. Самая основная единица двоичного кода — это бит , который представляет собой всего лишь единицу или 0. Следующая по величине единица двоичного кода, байт, состоит из 8 бит. Пример байта — «01101011».
Каждый цифровой актив, с которым вы когда-либо сталкивались, — от программного обеспечения до мобильных приложений, от веб-сайтов до историй в Instagram — построен на этой системе байтов, которые связаны друг с другом таким образом, чтобы они имели смысл для компьютеров.Когда мы говорим о размерах файлов, мы имеем в виду количество байтов. Например, килобайт — это примерно тысяча байт, а гигабайт — примерно миллиард байтов.
Текст — это один из многих ресурсов, которые хранятся и обрабатываются компьютерами. Текст состоит из отдельных символов, каждый из которых представлен в компьютерах строкой битов. Эти строки собираются в цифровые слова, предложения, абзацы, любовные романы и т. Д.
ASCII: преобразование символов в двоичные
Американский стандартный код обмена информацией (ASCII) был ранней стандартизированной системой кодирования текста.Кодирование — это процесс преобразования символов человеческих языков в двоичные последовательности, которые могут обрабатывать компьютеры.
БиблиотекаASCII включает все прописные и строчные буквы латинского алфавита (A, B, C…), каждую цифру от 0 до 9 и некоторые общие символы (например, /,! И?). Он присваивает каждому из этих символов уникальный трехзначный код и уникальный байт.
В таблице ниже показаны примеры символов ASCII с соответствующими кодами и байтами.
Символ | Код ASCII | БАЙТ |
А | 065 | 01000001 |
097 | 01100001 | |
B | 066 | 01000010 |
б | 098 | 01100010 |
Z | 090 | 01011010 |
z | 122 | 01111010 |
0 | 048 | 00110000 |
9 | 057 | 00111001 |
! | 033 | 00100001 |
? | 063 | 00111111 |
Подобно тому, как символы объединяются в слова и предложения на языке, двоичный код делает это в текстовых файлах.Итак, фраза «Быстрая коричневая лисица перепрыгивает через ленивого пса». в двоичном формате ASCII будет:
01010100 01101000 01100101 00100000 01110001
01110101 01101001 01100011 01101011 00100000
01100010 01110010 01101111 01110111 01101110
00100000 01100110 01101111 01111000 00100000
01101010 01110101 01101101 01110000 01110011
00100000 01101111 01110110 01100101 01110010
00100000 01110100 01101000 01100101 00100000
01101100 01100001 01111010 01111001 00100000
01100100 01101111 01100111 00101110
Это не имеет большого значения для нас, людей, но это хлеб с маслом для компьютера.
Число символов, которые может представлять ASCII, ограничено числом доступных уникальных байтов, поскольку каждый символ получает один байт. Если вы посчитаете, то обнаружите, что существует 256 различных способов сгруппировать восемь единиц и нулей вместе. Это дает нам 256 различных байтов или 256 способов представления символа в ASCII. Когда в 1960 году был представлен ASCII, это было нормально, поскольку разработчикам требовалось всего 128 байт для представления всех необходимых им английских символов и символов.
Но по мере глобального распространения компьютерных технологий компьютерные системы начали хранить текст не только на английском, но и на других языках, многие из которых использовали символы, отличные от ASCII.Были созданы новые системы для сопоставления других языков с одним и тем же набором из 256 уникальных байтов, но использование нескольких систем кодирования было неэффективным и запутанным. Разработчикам требовался лучший способ кодирования всех возможных символов с помощью одной системы.
Unicode: способ сохранить каждый символ, когда-либо
Введите Unicode, систему кодирования, которая решает проблему пространства ASCII. Как и ASCII, Unicode назначает уникальный код, называемый кодовой точкой , каждому символу. Однако более сложная система Unicode может генерировать более миллиона кодовых точек, чего более чем достаточно, чтобы учесть каждый символ на любом языке.
Unicode теперь является универсальным стандартом для кодирования всех человеческих языков. И да, он даже включает смайлики.
Ниже приведены несколько примеров текстовых символов и соответствующих им кодовых точек. Каждая кодовая точка начинается с буквы «U» для «Unicode», за которой следует уникальная строка символов для представления символа.
Символ | Кодовая точка |
А | U + 0041 |
U + 0061 | |
0 | U + 0030 |
9 | U + 0039 |
! | U + 0021 |
Ø | U + 00D8 |
ڃ | U + 0683 |
ಚ | U + 0C9A |
𠜎 | U + 2070E |
😁 | U + 1F601 |
Если вы хотите узнать, как генерируются кодовые точки и что они означают в Unicode, ознакомьтесь с этим подробным объяснением.
Итак, теперь у нас есть стандартизированный способ представления каждого символа, используемого каждым человеческим языком, в одной библиотеке. Это решает проблему нескольких систем маркировки для разных языков — любой компьютер на Земле может использовать Unicode.
Но только Unicode не хранит слова в двоичном формате. Компьютерам нужен способ перевода Unicode в двоичный код, чтобы его символы можно было хранить в текстовых файлах. Вот где пригодится UTF-8.
UTF-8: последний фрагмент головоломки
UTF-8 — это система кодирования Unicode.Он может преобразовать любой символ Юникода в соответствующую уникальную двоичную строку, а также может преобразовать двоичную строку обратно в символ Юникода. Это значение «UTF» или «Формат преобразования Unicode».
Существуют и другие системы кодирования Unicode, помимо UTF-8, но UTF-8 уникален, поскольку представляет символы в однобайтовых единицах. Помните, что один байт состоит из восьми бит, отсюда и «-8» в его названии.
Более конкретно, UTF-8 преобразует кодовую точку (которая представляет один символ в Unicode) в набор от одного до четырех байтов.Первые 256 символов в библиотеке Unicode, которые включают символы, которые мы видели в ASCII, представлены как один байт. Символы, которые появляются позже в библиотеке Unicode, кодируются как двухбайтовые, трехбайтовые и, возможно, четырехбайтовые двоичные единицы.
Ниже приведена та же таблица символов сверху, с выводом UTF-8 для каждого добавленного символа. Обратите внимание, что некоторые символы представлены одним байтом, а другие используют больше.
Символ | Кодовая точка | Двоичная кодировка UTF-8 |
А | U + 0041 | 01000001 |
U + 0061 | 01100001 | |
0 | U + 0030 | 00110000 |
9 | U + 0039 | 00111001 |
! | U + 0021 | 00100001 |
Ø | U + 00D8 | 11000011 10011000 |
ڃ | U + 0683 | 11011010 10000011 |
ಚ | U + 0C9A | 11100000 10110010 10011010 |
𠜎 | U + 2070E | 11110000 10100000 10011100 10001110 |
😁 | U + 1F601 | 11110000 10011111 10011000 10000001 |
Почему UTF-8 преобразует одни символы в один байт, а другие — в четыре байта? Короче для экономии памяти.Используя меньше места для представления более общих символов (например, символов ASCII), UTF-8 уменьшает размер файла, позволяя использовать гораздо большее количество менее распространенных символов. Эти менее распространенные символы кодируются в два или более байта, но это нормально, если они хранятся редко.
Пространственная эффективность — ключевое преимущество кодировки UTF-8. Если бы вместо этого каждый символ Unicode был представлен четырьмя байтами, текстовый файл, написанный на английском языке, был бы в четыре раза больше, чем тот же файл, закодированный с помощью UTF-8.
Еще одним преимуществом кодировки UTF-8 является ее обратная совместимость с ASCII. Первые 128 символов в библиотеке Unicode соответствуют символам в библиотеке ASCII, а UTF-8 переводит эти 128 символов Unicode в те же двоичные строки, что и ASCII. В результате UTF-8 может без проблем преобразовывать текстовый файл, отформатированный в ASCII, в читаемый человеком текст.
Символы UTF-8 в веб-разработке
UTF-8 — наиболее распространенный метод кодировки символов, используемый сегодня в Интернете, и набор символов по умолчанию для HTML5.Более 95% всех веб-сайтов, в том числе и ваш собственный, хранят персонажей таким образом. Кроме того, распространенные методы передачи данных через Интернет, такие как XML и JSON, кодируются стандартами UTF-8.
Так как теперь это стандартный метод кодирования текста в Интернете, все страницы вашего сайта и базы данных должны использовать UTF-8. Система управления контентом или конструктор веб-сайтов по умолчанию сохранят ваши файлы в формате UTF-8, но все же рекомендуется следить за тем, чтобы вы придерживались этой передовой практики.
Текстовые файлы, закодированные с помощью UTF-8, должны указывать на это программному обеспечению, обрабатывающему их.В противном случае программа не сможет должным образом преобразовать двоичный код обратно в символы. В файлах HTML вы можете увидеть строку кода, подобную следующему, вверху:
Это сообщает браузеру, что файл HTML закодирован в UTF-8, чтобы браузер мог преобразовать его обратно в разборчивый текст.
UTF-8 в сравнении с UTF-16
Как я уже упоминал, UTF-8 — не единственный метод кодирования для символов Unicode — существует также UTF-16.Эти методы различаются количеством байтов, необходимых для хранения символа. UTF-8 кодирует символ в двоичную строку из одного, двух, трех или четырех байтов. UTF-16 кодирует символ Unicode в строку из двух или четырех байтов.
Это различие видно из их названий. В UTF-8 наименьшее двоичное представление символа — это один байт или восемь битов. В UTF-16 наименьшее двоичное представление символа составляет два байта или шестнадцать бит.
И UTF-8, и UTF-16 могут переводить символы Unicode в удобные для компьютера двоичные файлы и обратно.Однако они несовместимы друг с другом. Эти системы используют разные алгоритмы для сопоставления кодовых точек с двоичными строками, поэтому двоичный вывод для любого заданного символа будет отличаться от обоих методов:
Символ | Двоичная кодировка UTF-8 | Двоичная кодировка UTF-16 |
А | 01000001 | 01000001 11011000 00001110 11011111 |
𠜎 | 11110000 10100000 10011100 10001110 | 01000001 11011000 00001110 11011111 |
UTF-8 предпочтительнее UTF-16 на большинстве веб-сайтов, поскольку она использует меньше памяти.Напомним, что UTF-8 кодирует каждый символ ASCII всего одним байтом. UTF-16 должен кодировать эти же символы в двух или четырех байтах. Это означает, что текстовый файл на английском языке с кодировкой UTF-16 будет как минимум в два раза больше размера того же файла с кодировкой UTF-8.
UTF-16 более эффективен, чем UTF-8, только на некоторых неанглоязычных сайтах. Если веб-сайт использует язык с символами, находящимися дальше в библиотеке Unicode, UTF-8 будет кодировать все символы как четыре байта, тогда как UTF-16 может кодировать многие из тех же символов только как два байта.Тем не менее, если ваши страницы заполнены буквами ABC и 123, придерживайтесь UTF-8.
Расшифровка мира кодировки UTF-8
Это было много слов о словах, поэтому давайте резюмируем то, что мы рассмотрели:
- Компьютеры хранят данные, включая текстовые символы, как двоичные (единицы и нули).
- ASCII был ранним способом кодирования или отображения символов в двоичный код, чтобы компьютеры могли их хранить. Однако в ASCII не было достаточно места для представления нелатинских символов и чисел в двоичном формате.
- Unicode был решением этой проблемы. Unicode присваивает уникальный «код» каждому символу на каждом человеческом языке.
- UTF-8 — это метод кодировки символов Unicode. Это означает, что UTF-8 берет кодовую точку для данного символа Юникода и переводит ее в строку двоичного кода. Он также делает обратное, считывая двоичные цифры и преобразуя их обратно в символы.
- UTF-8 в настоящее время является самым популярным методом кодирования в Интернете, поскольку он может эффективно хранить текст, содержащий любые символы.
- UTF-16 — еще один метод кодирования, но он менее эффективен для хранения текстовых файлов (за исключением тех, которые написаны на некоторых неанглийских языках).
Перевод Unicode — это не то, о чем большинству из нас нужно думать при просмотре или разработке веб-сайтов, и именно в этом суть — создать бесшовную систему обработки текста, которая работает для всех языков и веб-браузеров. Если он работает хорошо, вы этого не заметите.
Но если вы обнаружите, что страницы вашего веб-сайта занимают чрезмерно много места или если ваш текст усеян буквами и, пора применить ваши новые знания о UTF-8.
Что такое кодирование и декодирование?
Что такое кодирование и декодирование в компьютере?Кодирование и декодирование используются во многих формах связи, включая вычисления, передачу данных, программирование, цифровую электронику и человеческое общение. Эти два процесса включают изменение формата контента для оптимальной передачи или хранения.
В компьютерах кодирование — это процесс помещения последовательности символов (букв, цифр, знаков препинания и определенных символов) в специальный формат для эффективной передачи или хранения.Декодирование — это противоположный процесс — преобразование закодированного формата обратно в исходную последовательность символов.
Эти термины не следует путать с шифрованием , и расшифровкой , , которые сосредоточены на сокрытии и защите данных. (Мы можем шифровать данные без изменения кода или кодировать данные без намеренного сокрытия содержимого.)
Что такое кодирование и декодирование при передаче данных?Процессы кодирования и декодирования для передачи данных имеют интересное происхождение.Например, азбука Морзе появилась в 1838 году, когда Сэмюэл Морзе создал стандартизированные последовательности сигналов двух длительностей, названные точек и тире , для использования с телеграфом. Сегодняшние радиолюбители по-прежнему используют Q-сигналы, которые произошли от кодов, созданных генеральным почтмейстером Великобритании в начале 1900-х годов для облегчения связи между британскими кораблями и береговыми станциями.
КодировкаManchester была разработана для хранения данных на магнитных барабанах компьютера Manchester Mark 1, построенного в 1949 году.В этой модели кодирования каждая двоичная цифра или бит кодируется сначала младшим, затем старшим, либо старшим, а затем младшим за одинаковое время. Манчестерский процесс кодирования, также известный как фазовое кодирование , используется в потребительских инфракрасных протоколах, радиочастотной идентификации и связи ближнего поля.
Что такое кодирование и декодирование в программировании?
Доступ в Интернет зависит от кодирования. Унифицированный указатель ресурсов (URL), адрес веб-страницы, может быть отправлен только через Интернет с использованием Американского стандартного кода для обмена информацией (ASCII), который представляет собой код, используемый для текстовых файлов в вычислительной технике.
Вот пример кодировки ASCII для строкиВ файле ASCII 7-битное двоичное число представляет каждый символ, который может быть прописными или строчными буквами, числами, знаками препинания и другими общими символами. Однако URL-адреса не могут содержать пробелы и часто содержат символы, которых нет в наборе символов ASCII. Кодирование URL, также называемое кодированием процентов , решает эту проблему путем преобразования пробелов — в знак + или с% 20 — и символов, отличных от ASCII, в допустимый формат ASCII.
Другие часто используемые коды в программировании включают BinHex, Multipurpose Internet Mail Extensions, Unicode и Uuencode.
Ниже перечислены некоторые способы использования кодирования и декодирования в различных языках программирования.
в Java
Кодирование и декодирование в Java — это метод представления данных в другом формате для эффективной передачи информации через сеть или Интернет. Кодировщик преобразует данные в веб-представление. После получения декодер преобразует данные веб-представления в исходный формат.
В Python
В языке программирования Python кодировка представляет строку Unicode как строку байтов. Обычно это происходит, когда вы передаете экземпляр по сети или сохраняете его в файл на диске. Декодирование преобразует строку байтов в строку Unicode. Это происходит, когда вы получаете строку байтов из файла на диске или из сети.
В Swift
В языке программирования Apple Swift модели кодирования и декодирования обычно представляют собой сериализацию данных объекта из строкового формата JavaScript Object Notation.В этом случае кодирование представляет собой сериализацию, а декодирование означает десериализацию. Всякий раз, когда вы сериализуете данные, вы конвертируете их в легко переносимый формат. После транспортировки он преобразуется обратно в исходный формат. Этот подход стандартизирует протокол и обеспечивает возможность взаимодействия между различными языками программирования и платформами.
Что такое кодирование и декодирование в цифровой электронике?В электронике термины кодирование и декодирование относятся к аналого-цифровому преобразованию и цифро-аналоговому преобразованию.Эти условия могут применяться к любой форме данных, включая текст, изображения, аудио, видео, мультимедиа и программное обеспечение, а также к сигналам в датчиках, телеметрии и системах управления.
Что такое кодирование и декодирование в человеческом общении?Люди не думают об этом как о процессе кодирования или декодирования, но человеческое общение начинается, когда отправитель формулирует (кодирует) сообщение. Они выбирают сообщение, которое они передадут, и канал связи. Люди делают это каждый день, мало задумываясь о процессе кодирования.
Получатель должен понять (расшифровать) сообщение, определив значение слов и фраз, чтобы правильно интерпретировать сообщение. Затем они могут предоставить обратную связь отправителю.
И отправитель, и получатель в любом процессе связи должны иметь дело с шумом, который может мешать процессу связи. Шум включает в себя различные способы прерывания, искажения или задержки сообщений. Они могут включать в себя фактический физиологический шум, технические проблемы или семантические, психологические и культурные проблемы, которые мешают общению.
Кодирование и декодирование являются неотъемлемой частью всех коммуникаций.Эти процессы происходят почти мгновенно в любой из этих трех моделей:
- Модель трансмиссии. Эта модель коммуникации представляет собой линейный процесс, при котором отправитель передает сообщение получателю.
- Модель взаимодействия. В этой модели участники по очереди выступают в роли отправителей и получателей.
- Модель транзакции. Здесь коммуникаторы создают социальные реальности в культурном, социальном и социальном контекстах.Они общаются, чтобы установить отношения, взаимодействовать с сообществами и формировать межкультурные союзы. В этой модели участники обозначаются как коммуникаторы , а не отправители и получатели.
Расшифровка сообщений на вашем родном языке не требует усилий. Однако, когда язык незнаком, получателю может потребоваться переводчик или такие инструменты, как Google Translate, для декодирования сообщения.
Помимо основ кодирования и декодирования, возможности машинного перевода в последнее время значительно продвинулись вперед.Узнайте больше о технологиях и инструментах машинного перевода .
Кодирование и декодирование строк Base64 в Python
Введение
Вы когда-нибудь получали PDF-файл или файл изображения от кого-то по электронной почте только для того, чтобы видеть странные символы, когда открываете его? Это может произойти, если ваш почтовый сервер предназначен только для обработки текстовых данных. Файлы с двоичными данными, байты, представляющие нетекстовую информацию, например изображения, могут быть легко повреждены при передаче и обработке в текстовые системы.
КодировкаBase64 позволяет нам преобразовывать байты, содержащие двоичные или текстовые данные, в символы ASCII. Кодируя наши данные, мы повышаем шансы на их правильную обработку различными системами.
В этом руководстве мы узнаем, как работает кодирование и декодирование Base64 и как его можно использовать. Затем мы будем использовать Python для Base64 для кодирования и декодирования как текстовых, так и двоичных данных.
Что такое кодировка Base64?
КодировкаBase64 — это тип преобразования байтов в символы ASCII.В математике основание системы счисления относится к тому, сколько разных символов представляют числа. Название этой кодировки происходит непосредственно из математического определения основ — у нас есть 64 символа, которые представляют числа.
Набор символов Base64 содержит:
- 26 заглавных букв
- 26 строчных букв
- 10 номеров
-
+
и/
для новых строк (в некоторых реализациях могут использоваться другие символы)
Когда компьютер преобразует символы Base64 в двоичные, каждый символ Base64 представляет 6 бит информации.
Примечание: Это не алгоритм шифрования, и его не следует использовать в целях безопасности.
Теперь, когда мы знаем, что такое кодировка Base64 и как она представлена на компьютере, давайте подробнее рассмотрим, как она работает.
Как работает кодировка Base64?
Мы проиллюстрируем, как работает кодировка Base64, преобразовав текстовые данные, поскольку она более стандартна, чем различные двоичные форматы на выбор. Если бы мы кодировали строку Base64, мы бы выполнили следующие шаги:
- Возьмите значение ASCII каждого символа в строке
- Вычислить 8-битный двоичный эквивалент значений ASCII
- Преобразуйте 8-битные фрагменты в фрагменты по 6 бит, просто перегруппировав цифры
- Преобразует 6-битные двоичные группы в их соответствующие десятичные значения.
- Используя таблицу кодировки base64, назначьте соответствующий символ base64 для каждого десятичного значения.
Давайте посмотрим, как это работает, преобразовав строку «Python» в строку Base64.
Значения ASCII символов P, y, t, h, o, n
равны 15, 50, 45, 33, 40, 39
соответственно. Мы можем представить эти значения ASCII в 8-битном двоичном формате следующим образом:
01010000 01111001 01110100 01101000 01101111 01101110
Напомним, что символы Base64 представляют только 6 бит данных.Теперь мы перегруппируем 8-битные двоичные последовательности в блоки по 6 бит. Результирующий двоичный файл будет выглядеть так:
010100 000111 100101 110100 011010 000110 111101 101110
Примечание: Иногда мы не можем сгруппировать данные в последовательности из 6 бит. Если это произойдет, мы должны дополнить последовательность.
С нашими данными в группах по 6 бит, мы можем получить десятичное значение для каждой группы. Используя наш последний результат, мы получаем следующие десятичные значения:
20 7 37 52 26 6 61 46
Наконец, мы преобразуем эти десятичные дроби в соответствующий символ Base64, используя таблицу преобразования Base64:
Как видите, значение 20
соответствует букве U
.Затем мы смотрим на 7
и видим, что он сопоставлен с H
. Продолжая этот поиск всех десятичных значений, мы можем определить, что «Python» представлен как UHl0aG9u
в кодировке Base64. Вы можете проверить этот результат с помощью онлайн-конвертера.
Чтобы кодировать строку в Base64, мы преобразуем ее в двоичные последовательности, затем в десятичные последовательности и, наконец, используем таблицу поиска для получения строки символов ASCII. Обладая более глубоким пониманием того, как это работает, давайте посмотрим, зачем нам кодировать данные в Base64.
Зачем использовать кодировку Base64?
В компьютерах все данные разных типов передаются в виде единиц и нулей. Однако некоторые каналы связи и приложения не могут понять все биты, которые они получают. Это связано с тем, что значение последовательности единиц и нулей зависит от типа данных, которые она представляет. Например, 10110001
должен обрабатываться иначе, если он представляет собой букву или изображение.
Чтобы обойти это ограничение, вы можете кодировать свои данные в текст, повышая шансы на их правильную передачу и обработку.Base64 — популярный метод преобразования двоичных данных в символы ASCII, широко используемый в большинстве сетей и приложений.
Обычный сценарий реального мира, в котором широко используется кодировка Base64, — это почтовые серверы. Изначально они были созданы для обработки текстовых данных, но мы также ожидаем, что они будут отправлять изображения и другие мультимедийные данные с сообщением. В этих случаях ваши мультимедийные данные будут закодированы в кодировке Base64 при отправке. Затем он будет декодирован в Base64, когда он будет получен, чтобы приложение могло его использовать.Так, например, изображение в HTML может выглядеть так:
Понимая, что данные иногда необходимо отправлять в виде текста, чтобы они не были повреждены, давайте посмотрим, как мы можем использовать кодировку Python в Base64 и декодировать данные.
Кодирование строк с помощью Python
Python 3 предоставляет модуль base64
, который позволяет нам легко кодировать и декодировать информацию. Сначала мы конвертируем строку в байтовый объект.После преобразования мы можем использовать модуль base64
для его кодирования.
В новом файле encoding_text.py
введите следующее:
импортная база64
message = "Python - это весело"
message_bytes = message.encode ('ascii')
base64_bytes = base64.b64encode (message_bytes)
base64_message = base64_bytes.decode ('ascii')
печать (base64_message)
Ознакомьтесь с нашим практическим практическим руководством по изучению Git с передовыми практиками, общепринятыми стандартами и включенной шпаргалкой.Прекратите поиск в Google команд Git и фактически выучите !
В приведенном выше коде мы сначала импортировали модуль base64
. Переменная сообщения хранит нашу входную строку для кодирования. Мы конвертируем это в байтовый объект, используя метод строки
encode
, и сохраняем его в message_bytes
. Затем мы кодируем Base64 message_bytes
и сохраняем результат в base64_bytes
, используя метод base64.b64encode
.Наконец, мы получаем строковое представление преобразования Base64, декодируя base64_bytes
как ASCII.
Примечание: Обязательно используйте тот же формат кодирования, что и при преобразовании из строки в байты и из байтов в строку. Это предотвращает повреждение данных.
Запуск этого файла даст следующий результат:
$ python3 encoding_text.py
UHl0aG9uIGlzIGZ1bg ==
Теперь давайте посмотрим, как мы можем декодировать строку Base64 в ее необработанное представление.
Декодирование строк с помощью Python
Декодирование строки Base64, по сути, является обратным процессу кодирования. Мы декодируем строку Base64 в байты некодированных данных. Затем мы конвертируем байтовый объект в строку.
В новом файле с именем decoding_text.py
напишите следующий код:
импортная база64
base64_message = 'UHl0aG9uIGlzIGZ1bg =='
base64_bytes = base64_message.encode ('ascii')
message_bytes = base64.b64decode (base64_bytes)
сообщение = message_bytes.декодировать ('ascii')
печать (сообщение)
И снова нам нужен импортированный модуль base64
. Затем мы кодируем наше сообщение в байтовый объект с кодировкой ('ASCII')
. Мы продолжаем, вызывая метод base64.b64decode
для декодирования base64_bytes
в нашу переменную message_bytes
. Наконец, мы декодируем message_bytes
в строковый объект message
, чтобы он стал удобочитаемым.
Запустите этот файл, чтобы увидеть следующий результат:
$ python3 decoding_text.ру
Python - это весело
Теперь, когда мы можем кодировать и декодировать строковые данные, давайте попробуем закодировать двоичные данные.
Кодирование двоичных данных с помощью Python
Как мы упоминали ранее, кодировка Base64 в основном используется для представления двоичных данных в виде текста. В Python нам нужно прочитать двоичный файл, и Base64 закодирует его байты, чтобы мы могли сгенерировать его закодированную строку.
Давайте посмотрим, как мы можем закодировать это изображение:
Создайте новый файл encoding_binary.py
и добавьте следующее:
импортная база64
с открытым ('логотипом.png ',' rb ') как файл binary_file:
двоичный_файл_данные = двоичный_файл.read ()
base64_encoded_data = base64.b64encode (двоичные_данные_файла)
base64_message = base64_encoded_data.decode ('utf-8')
печать (base64_message)
Давайте рассмотрим приведенный выше фрагмент кода. Мы открываем файл, используя open ('my_image.png', 'rb')
. Обратите внимание, как мы передали аргумент 'rb'
вместе с путем к файлу - это говорит Python, что мы читаем двоичный файл. Без использования 'rb'
Python предположит, что мы читаем текстовый файл.
Затем мы используем метод read ()
, чтобы получить все данные в файле в переменной binary_file_data
. Подобно тому, как мы обрабатывали строки, мы Base64 закодировали байты с помощью base64.b64encode
, а затем использовали decode ('utf-8')
на base64_encoded_data
, чтобы получить данные в кодировке Base64 с использованием удобочитаемых символов.
Выполнение кода даст аналогичный результат:
$ python3 encoding_binary.ру
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8 / 9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1klEQVQ4jY2TTUhUURTHf + Fy / HrjhNEX2KRGiyIXg8xgSURuokXLxFW0qDTaSQupkHirthK0qF0WQQQR0UCbwCQyw8KCiDbShEYLJQdmpsk3895p4aSv92ass7pcfv / Zp + fcc4U6kXKe2pTY3tjSUHjtnFgB0VqchC / SY8 / 293S23f + 6VEj9KKwCoPDNIJdmr598GOZNJKNWTic7tqb27WwNuuwGvVWrAit84fsmMzE1P1 + 1TiKMVKvYUjdBvzPZXCwXzyhyWNBgVYkgrIow09VJMznpyebWE + Tdn9cEroBSc1JVPS + 6moh5Xyjj65vEgBxafGzWetTh + rr1eE / с / TMYg8hlAOvI6JP4KmwLgJ4qD0TIbliTB + sunjkbeLekKsZ6Zc8V027aBRoBRHVoduDiSypmGFG7CrcBEyDHA0ZNfNphC0D6amYa6ANw3YbWD4Pn3oIc + EdL36V3od0A + MaMAXmA8x2Zyn + IQeQeBDfRcUw3B + 2PxwZ / EdtTDpCPQLMh9TKx0k3pXipEVlknsf5KoNzGyOe1sz8nvYtTQT6yyvTjIaxsmHGB9pFx4n3jIEfDePQvCIrnn0J4B / gA5J4XcRfu4JZuRAw3C51OtOjM3l2bMb8Br5eXCsT / ж / EAAAAASUVORK5CYII =
Ваш результат может отличаться в зависимости от изображения, которое вы выбрали для кодирования.
Теперь, когда мы знаем, как Bas64 кодировать двоичные данные в Python, давайте перейдем к декодированию двоичных данных Base64.
Декодирование двоичных данных с помощью Python
Двоичный код декодирования Base64аналогичен декодированию текстовых данных Base64. Ключевое отличие состоит в том, что после того, как мы декодируем строку Base64, мы сохраняем данные как двоичный файл, а не строку.
Давайте посмотрим, как на практике декодировать двоичные данные Base64, создав новый файл с именем decoding_binary.py
. Введите следующий код в файл Python:
импортная база64
base64_img = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8 / 9hAAAACXBIWXMAAAsTAAA' \
'LEwEAmpwYAAAB1klEQVQ4jY2TTUhUURTHf + fy / HrjhNEX2KRGiyIXg8xgSURuokX' \
'LxFW0qDTaSQupkHirthK0qF0WQQQR0UCbwCQyw8KCiDbShEYLJQdmpsk3895p4aS' \
'v92ass7pcfv / zP + fcc4U6kXKe2pTY3tjSUHjtnFgB0VqchC / SY8 / 293S23f + 6VEj' \
'9KKwCoPDNIJdmr598GOZNJKNWTic7tqb27WwNuuwGvVWrAit84fsmMzE1P1 + 1TiK' \
'MVKvYUjdBvzPZXCwXzyhyWNBgVYkgrIow09VJMznpyebWE + Tdn9cEroBSc1JVPS +' \
'6moh5Xyjj65vEgBxafGzWetTh + rr1eE / c / TMYg8hlAOvI6JP4KmwLgJ4qD0TIbli' \
'TB + sunjkbeLekKsZ6Zc8V027aBRoBRHVoduDiSypmGFG7CrcBEyDHA0ZNfNphC0D' \
'6 amYa6ANw3YbWD4Pn3oIc+EdL36V3od0A+MaMAXmA8x2Zyn+IQeQeBDfRcUw3B+2' \
'PxwZ / EdtTDpCPQLMh9TKx0k3pXipEVlknsf5KoNzGyOe1sz8nvYtTQT6yyvTjIax' \
'smHGB9pFx4n3jIEfDePQvCIrnn0J4B / gA5J4XcRfu4JZuRAw3C51OtOjM3l2bMb8' \
'Br5eXCsT / w / EAAAAASUVORK5CYII ='
base64_img_bytes = base64_img.кодировать ('utf-8')
с open ('decoded_image.png', 'wb') как file_to_save:
decoded_image_data = base64.decodebytes (base64_img_bytes)
file_to_save.write (decoded_image_data)
В приведенном выше коде мы сначала преобразуем наши строковые данные Base64 в байтовый объект, который можно декодировать. Когда вы декодируете двоичный файл с помощью base64, вы, , должны знать тип данных, которые декодируются . Например, эти данные действительны только как файл PNG, а не как файл MP3, поскольку он кодирует изображение.
Когда целевой файл открыт, мы в Base64 декодируем данные с помощью base64.decodebytes
, метода, отличного от метода base64.b64decode
, который использовался со строками. Этот метод следует использовать для декодирования двоичных данных. Наконец, мы записываем декодированные данные в файл.
В том же каталоге, в котором вы выполнили decoding_binary.py
, теперь вы увидите новый файл decoded_image.png
, который содержит исходное изображение, которое было закодировано ранее.
Заключение
КодированиеBase64 - это популярный метод преобразования данных в различных двоичных форматах в строку символов ASCII. Это полезно при передаче данных в сети или приложения, которые не могут обрабатывать необработанные двоичные данные, но легко обрабатывают текст.
С Python мы можем использовать модуль base64
для кодирования и декодирования текстовых и двоичных данных Base64.
Какие приложения вы бы использовали для кодирования и декодирования данных Base64?
Как кодировать текстовые данные для машинного обучения с помощью scikit-learn
Последнее обновление 28.06.2020
Текстовые данные требуют специальной подготовки, прежде чем их можно будет использовать для прогнозного моделирования.
Текст должен быть проанализирован для удаления слов, это называется токенизацией. Затем слова необходимо закодировать как целые числа или значения с плавающей запятой для использования в качестве входных данных для алгоритма машинного обучения, называемого извлечением признаков (или векторизацией).
Библиотека scikit-learn предлагает простые в использовании инструменты для выполнения токенизации и извлечения функций из ваших текстовых данных.
В этом руководстве вы узнаете, как именно подготовить текстовые данные для прогнозного моделирования в Python с помощью scikit-learn.
После прохождения этого руководства вы будете знать:
- Как преобразовать текст в векторы подсчета слов с помощью CountVectorizer.
- Как преобразовать текст в частотные векторы слов с помощью TfidfVectorizer.
- Как преобразовать текст в уникальные целые числа с помощью HashingVectorizer.
Начните свой проект с моей новой книги «Глубокое обучение для обработки естественного языка», включающей пошаговых руководств и файлов исходного кода Python для всех примеров.
Приступим.
Как подготовить текстовые данные для машинного обучения с помощью scikit-learn
Фотография Мартина Келли, некоторые права защищены.
Сумка со словами Модель
Мы не можем работать с текстом напрямую при использовании алгоритмов машинного обучения.
Вместо этого нам нужно преобразовать текст в числа.
Мы можем захотеть выполнить классификацию документов, чтобы каждый документ был « вход », а метка класса - « выход » для нашего алгоритма прогнозирования.Алгоритмы принимают в качестве входных данных векторы чисел, поэтому нам необходимо преобразовать документы в векторы чисел фиксированной длины.
Простая и эффективная модель мышления о текстовых документах в машинном обучении называется Bag-of-Words Model или BoW .
Модель проста в том, что она отбрасывает всю информацию о порядке в словах и фокусируется на появлении слов в документе.
Это можно сделать, присвоив каждому слову уникальный номер.Тогда любой документ, который мы видим, можно закодировать как вектор фиксированной длины с длиной словаря известных слов. Значение в каждой позиции в векторе может быть заполнено счетчиком или частотой каждого слова в закодированном документе.
Это модель мешка слов, в которой нас интересуют только схемы кодирования, которые представляют, какие слова присутствуют или в какой степени они присутствуют в закодированных документах, без какой-либо информации о порядке.
Подробнее о модели мешка слов см. В руководстве:
Есть много способов расширить этот простой метод, как за счет лучшего разъяснения, что такое «слово , », так и за счет определения того, что нужно кодировать для каждого слова в векторе.
Библиотека scikit-learn предоставляет 3 различные схемы, которые мы можем использовать, и мы кратко рассмотрим каждую.
Нужна помощь с глубоким обучением текстовых данных?
Пройдите бесплатный 7-дневный ускоренный курс по электронной почте (с кодом).
Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.
Начните БЕСПЛАТНЫЙ ускоренный курс прямо сейчас
слов с CountVectorizer
CountVectorizer предоставляет простой способ как токенизировать коллекцию текстовых документов и создать словарь известных слов, так и кодировать новые документы с использованием этого словаря.
Вы можете использовать его следующим образом:
- Создайте экземпляр класса CountVectorizer .
- Вызов функции fit () для изучения словаря из одного или нескольких документов.
- Вызовите функцию transform () для одного или нескольких документов по мере необходимости, чтобы закодировать каждый как вектор.
Закодированный вектор возвращается с длиной всего словаря и целым числом, определяющим, сколько раз каждое слово появлялось в документе.
Поскольку эти векторы будут содержать много нулей, мы называем их разреженными. Python предоставляет эффективный способ обработки разреженных векторов в пакете scipy.sparse.
Векторы, возвращаемые вызовом transform (), будут разреженными векторами, и вы можете преобразовать их обратно в массивы numpy, чтобы посмотреть и лучше понять, что происходит, вызвав функцию toarray ().
Ниже приведен пример использования CountVectorizer для токенизации, создания словаря и последующего кодирования документа.
из sklearn.feature_extraction.text импорт CountVectorizer # список текстовых документов text = ["Быстрая коричневая лисица перепрыгнула через ленивого пса."] # создаем преобразование vectorizer = CountVectorizer () # токенизация и создание словаря vectorizer.fit (текст) # подвести итог печать (vectorizer.vocabulary_) # закодировать документ vector = vectorizer.transform (текст) # суммировать закодированный вектор печать (vector.shape) печать (тип (вектор)) печать (вектор.toarray ())
из sklearn.feature_extraction.text import CountVectorizer # список текстовых документов text = ["Быстрая коричневая лиса перепрыгнула через ленивого пса."] # создать преобразование векторизатор = CountVectorizer () # разметить и построить словарь vectorizer.fit (текст) # суммировать print (vectorizer.vocabulary_) # закодировать документ vector = векторизатор.transform (текст) # суммируем закодированный вектор print (vector.shape) print (type (vector)) print (vector.toarray ()) |
Выше вы можете видеть, что мы обращаемся к словарю, чтобы узнать, что именно было токенизировано, по телефону:
печать (vectorizer.vocabulary_)
печать (vectorizer.vocabulary_) |
Мы видим, что по умолчанию все слова были сделаны в нижнем регистре, а знаки препинания игнорировались.Эти и другие аспекты токенизации можно настроить, и я рекомендую вам просмотреть все параметры в документации API.
При выполнении примера сначала печатается словарь, а затем форма закодированного документа. Мы видим, что в словаре 8 слов, и поэтому длина закодированных векторов равна 8.
Затем мы можем видеть, что закодированный вектор является разреженной матрицей. Наконец, мы можем увидеть версию закодированного вектора в виде массива, показывающую количество вхождений 1 для каждого слова, кроме (индекс и идентификатор 7), для которого вхождение равно 2.
{'dog': 1, 'fox': 2, 'over': 5, 'brown': 0, 'quick': 6, 'the': 7, 'lazy': 4, 'jumped': 3} (1, 8) <класс 'scipy.sparse.csr.csr_matrix'> [[1 1 1 1 1 1 1 2]]
{'dog': 1, 'fox': 2, 'over': 5, 'brown': 0, 'quick': 6, 'the': 7, 'lazy': 4, 'jumped': 3 } (1, 8) [[1 1 1 1 1 1 1 2]] |
Важно отметить, что тот же векторизатор можно использовать для документов, содержащих слова, не включенные в словарь.Эти слова игнорируются, и в результирующем векторе не производится подсчет.
Например, ниже приведен пример использования векторизатора выше для кодирования документа с одним словом в словаре и одним словом без него.
# закодировать другой документ text2 = ["щенок"] вектор = vectorizer.transform (text2) печать (vector.toarray ())
# закодировать другой документ text2 = ["щенок"] вектор = векторизатор.преобразование (текст2) печать (vector.toarray ()) |
При выполнении этого примера печатается версия массива закодированного разреженного вектора, показывающая, что одно вхождение одного слова в словарь полностью игнорируется.
Закодированные векторы затем можно использовать напрямую с алгоритмом машинного обучения.
Word Frequency с TfidfVectorizer
Подсчет слов - хорошая отправная точка, но это очень просто.
Одна проблема с простым подсчетом состоит в том, что некоторые слова, такие как « the », будут появляться много раз, и их большое количество не будет иметь большого значения в закодированных векторах.
Альтернативой является вычисление частотности слов, и, безусловно, самый популярный метод называется TF-IDF. Это аббревиатура от « Term Frequency - Inverse Document » Frequency, которая является компонентом результирующих оценок, присваиваемых каждому слову.
- Частота термина : Суммирует, как часто данное слово встречается в документе.
- Обратная частота документа : уменьшает масштаб слов, которые часто встречаются в документах.
Не вдаваясь в математику, TF-IDF - это оценка частоты слов, которая пытается выделить слова, которые более интересны, например часто встречается в документе, но не во всех документах.
TfidfVectorizer будет токенизировать документы, изучать словарный запас и обратную частоту взвешивания документов, а также позволит вам кодировать новые документы. В качестве альтернативы, если у вас уже есть изученный CountVectorizer, вы можете использовать его с TfidfTransformer, чтобы просто вычислить обратные частоты документов и начать кодирование документов.
Используется тот же процесс создания, подгонки и преобразования, что и для CountVectorizer.
Ниже приведен пример использования TfidfVectorizer для изучения словарного запаса и инверсии частот документов в 3 небольших документах, а затем для кодирования одного из этих документов.
из sklearn.feature_extraction.text import TfidfVectorizer # список текстовых документов text = ["Быстрая коричневая лисица перепрыгнула через ленивого пса.", "Собака.", "Лиса"] # создаем преобразование векторизатор = TfidfVectorizer () # токенизация и создание словаря векторизатор.соответствовать (текст) # подвести итог печать (vectorizer.vocabulary_) печать (vectorizer.idf_) # закодировать документ vector = vectorizer.transform ([текст [0]]) # суммировать закодированный вектор печать (vector.shape) печать (vector.toarray ())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | из sklearn.feature_extraction.text import TfidfVectorizer # список текстовых документов text = [«Быстрая коричневая лиса перепрыгнула через ленивую собаку.», «Собака.», «Лисица»] # создать файл преобразование векторизатор = TfidfVectorizer () # токенизация и построение словаря vectorizer.fit (текст) # summarize print (vectorizer.vocabulary_) print (vectorizer.idf_) document encode вектор = векторизатор.transform ([text [0]])# суммировать закодированный вектор print (vector.shape) print (vector.toarray ()) |
Словарь из 8 слов извлекается из документов, и каждому слову назначается уникальный целочисленный индекс в выходном векторе.
Обратные частоты документов вычисляются для каждого слова в словаре, при этом наименьшая оценка 1,0 присваивается наиболее часто встречающемуся слову: « the » с индексом 7.
Наконец, первый документ закодирован как 8-элементный разреженный массив, и мы можем просмотреть окончательные оценки каждого слова с разными значениями для « the », « fox » и « dog » из другого слова в словаре.
{'fox': 2, 'lazy': 4, 'dog': 1, 'quick': 6, 'the': 7, 'over': 5, 'brown': 0, 'jumped': 3} [1.69314718 1.28768207 1.28768207 1.69314718 1.69314718 1.69314718 1.69314718 1.] (1, 8) [[0,36388646 0,27674503 0,27674503 0,36388646 0,36388646 0,36388646 0,36388646 0,42983441]]
{'fox': 2, 'lazy': 4, 'dog': 1, 'quick': 6, 'the': 7, 'over': 5, 'brown': 0, 'jumped': 3 } [1.69314718 1.28768207 1.28768207 1.69314718 1.69314718 1.69314718 1.69314718 1.] (1, 8) [[0,36388646 0,27674503 0,27674503 0,36388646 0,36388646] 0,36388646 |
Оценки нормализуются до значений от 0 до 1, а затем закодированные векторы документа можно использовать напрямую с большинством алгоритмов машинного обучения.
Хеширование с помощью HashingVectorizer
Счетчики и частоты могут быть очень полезными, но одним из ограничений этих методов является то, что словарный запас может стать очень большим.
Это, в свою очередь, потребует больших векторов для кодирования документов и наложит большие требования на память и замедлит алгоритмы.
Умный обходной путь - использовать односторонний хэш слов для преобразования их в целые числа. Умная часть состоит в том, что словарный запас не требуется, и вы можете выбрать вектор произвольной длины фиксированной длины. Обратной стороной является то, что хэш является односторонней функцией, поэтому невозможно преобразовать кодировку обратно в слово (что может не иметь значения для многих контролируемых учебных задач).
Класс HashingVectorizer реализует этот подход, который может использоваться для последовательного хеширования слов, а затем токенизации и кодирования документов по мере необходимости.
В приведенном ниже примере демонстрируется HashingVectorizer для кодирования одного документа.
Был выбран произвольный размер вектора фиксированной длины, равный 20. Это соответствует диапазону хеш-функции, где небольшие значения (например, 20) могут привести к хеш-коллизиям. Вспоминая классы compsci, я считаю, что есть эвристика, которую вы можете использовать для выбора длины хэша и вероятности столкновения на основе предполагаемого размера словарного запаса.
Обратите внимание, что этот векторизатор не требует вызова для размещения в документах данных обучения. Вместо этого после создания его можно использовать непосредственно для начала кодирования документов.
из sklearn.feature_extraction.text import HashingVectorizer # список текстовых документов text = ["Быстрая коричневая лисица перепрыгнула через ленивого пса."] # создаем преобразование vectorizer = HashingVectorizer (n_features = 20) # закодировать документ vector = vectorizer.transform (текст) # суммировать закодированный вектор печать (вектор.форма) печать (vector.toarray ())
из sklearn.feature_extraction.text import HashingVectorizer # список текстовых документов text = ["Быстрая коричневая лиса перепрыгнула через ленивого пса."] # создать преобразование векторизатор = HashingVectorizer (n_features = 20 ) # кодировать документ vector = vectorizer.transform (text) # суммировать закодированный вектор print (vector.shape) печать (vector.toarray ()) |
При выполнении примера образец документа кодируется как разреженный массив из 20 элементов.
Значения закодированного документа соответствуют нормализованному количеству слов по умолчанию в диапазоне от -1 до 1, но их можно сделать простыми целочисленными подсчетами, изменив конфигурацию по умолчанию.
(1, 20) [[0. 0. 0. 0. 0. 0.33333333 0. -0.33333333 0,33333333 0. 0. 0,33333333 0. 0. 0. -0.33333333 0. 0. -0,66666667 0.]]
(1, 20) [[0. 0. 0. 0. 0. 0.33333333 0. -0.33333333 0.33333333 0. 0. 0.33333333 0. 0. 0. -0.33333333 0. 0. -0.66666667 0.]] |
Дополнительная литература
В этом разделе представлены дополнительные ресурсы по теме, если вы хотите углубиться.
Обработка естественного языка
sciki-learn
Класс API
Сводка
В этом руководстве вы узнали, как подготовить текстовые документы для машинного обучения с помощью scikit-learn.
В этих примерах мы коснулись лишь поверхности, и я хочу подчеркнуть, что существует множество деталей конфигурации для этих классов, которые влияют на токенизацию документов, которые стоит изучить.
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я постараюсь ответить.
Разрабатывайте модели глубокого обучения для текстовых данных уже сегодня!
Разработка собственных текстовых моделей за считанные минуты
... всего несколькими строками кода Python
Узнайте, как это сделать в моей новой электронной книге:
Глубокое обучение для обработки естественного языка
Он предоставляет учебных пособий для самостоятельного изучения по таким темам, как:
Пакет слов, встраивание слов, языковые модели, создание титров, перевод текста и многое другое.