Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поддержка многоязычности и эмодзи требует применения кодировок Юникод, в которых для представления одного отображаемого символа, называемого графемой, используется более одной кодовой точки. Например, для таких эмодзи, как 🌷 и 👍, могут использоваться несколько символов, образующих фигуру с дополнительными символами для визуальных атрибутов, таких как тон кожи. Аналогично слово अनुच्छेद
(на языке хинди) кодируется как пять букв и три объединяющих знака.
Поскольку закодированные эмодзи и слова на различных языках имеют разную длину, функции языковой службы могут возвращать смещения в ответах.
Смещения в ответе API
Всякий раз, когда в ответе API возвращаются смещения, помните:
- Элементы в ответе могут быть специфичны для точки доступа, которая была вызвана.
- Полезные данные HTTP-запросов POST/GET кодируются в UTF-8, что может не совпадать с кодировкой символов, установленной по умолчанию в вашем компиляторе на стороне клиента или операционной системе.
- Смещение относится к количеству графем по стандарту Юникод 8.0.0, а не к количеству символов.
Извлечение подстрок из текста с использованием смещений
Из-за смещений могут возникать проблемы при использовании методов обработки подстрок на основе символов, например метода .NET substring(). Одна из проблем со смещением заключается в том, что метод обработки подстрок может завершить работу не в конце, а в середине графемы, закодированной несколькими символами.
Если вы используете .NET, попробуйте применить класс StringInfo, который позволяет работать со строкой как с последовательностью текстовых элементов, а не как с отдельными объектами-символами. Вы также можете поискать библиотеки разделителей графем в той программной среде, в которой работаете.
Компоненты языковой службы также возвращают эти текстовые элементы для вашего удобства.
Конечные точки, возвращающие смещение, будут поддерживать параметр stringIndexType
. Он корректирует атрибуты offset
и length
в выходных данных API в соответствии с запрошенной схемой итерации строк. В настоящее время поддерживаются три типа:
-
textElement_v8
(по умолчанию): выполняет итерации по графемам, как определено в стандарте Юникод 8.0.0. -
unicodeCodePoint
: выполняет итерации по кодовым точкам Юникода (схема по умолчанию для Python 3). -
utf16CodeUnit
: выполняет итерации по единицам кода UTF-16 (схема по умолчанию для JavaScript, Java и .NET).
Если запрошенный параметр stringIndexType
соответствует выбранной среде программирования, для извлечения подстрок можно использовать стандартные методы обработки подстрок или срезов.