exponenta event banner

Анализ текстовых данных, содержащих эмодзи

В этом примере показано, как анализировать текстовые данные, содержащие эмодзи.

Эмодзи - это графические символы, которые отображаются в тексте. При написании текста на мобильных устройствах, таких как смартфоны и планшеты, люди используют эмодзи, чтобы сохранить текст коротким и передать эмоции и чувства.

Вы также можете использовать эмодзи для анализа текстовых данных. Например, используйте их для идентификации соответствующих строк текста или для визуализации чувств или эмоций текста.

При работе с текстовыми данными эмодзи могут вести себя непредсказуемо. В зависимости от системных шрифтов система может неправильно отображать эмодзи. Поэтому, если эмодзи отображается неправильно, то данные не обязательно отсутствуют. Возможно, система не может отобразить эмодзи в текущем шрифте.

Создание эмодзи

В большинстве случаев вы можете читать эмодзи из файла (например, с помощью extractFileText, extractHTMLText, или readtable) или путем копирования и вставки непосредственно в MATLAB ®. В противном случае необходимо создать эмодзи с использованием кодовых единиц Юникода UTF16.

Некоторые эмодзи состоят из нескольких UTF16 кодовых единиц Юникода. Например, эмодзи «улыбающееся лицо с солнцезащитными очками» (с кодовой точкой U + 1F60E) является единственным глифом, но состоит из двух UTF16 единиц кода "D83D" и "DE0E". Создайте строку, содержащую этот эмодзи, с помощью compose и укажите две единицы кода с префиксом "\x".

emoji = compose("\xD83D\xDE0E")
emoji = 
""

Сначала получите кодовые единицы Юникода UTF16 эмодзи. Использовать char чтобы получить числовое представление эмодзи, а затем использовать dec2hex для получения соответствующего шестнадцатеричного значения.

codeUnits = dec2hex(char(emoji))
codeUnits = 2×4 char array
    'D83D'
    'DE0E'

Реконструируйте строку композиции с помощью strjoin функция с пустым разделителем "".

formatSpec = strjoin("\x" + codeUnits,"")
formatSpec = 
"\xD83D\xDE0E"
emoji = compose(formatSpec)
emoji = 
""

Импорт текстовых данных

Извлечение текстовых данных из файла weekendUpdates.xlsx использование readtable. Файл weekendUpdates.xlsx содержит обновления состояния, содержащие хэштеги "#weekend" и "#vacation".

filename = "weekendUpdates.xlsx";
tbl = readtable(filename,'TextType','string');
head(tbl)
ans=8×2 table
    ID                                         TextData                                     
    __    __________________________________________________________________________________

    1     "Happy anniversary! ❤ Next stop: Paris! ✈ #vacation"                              
    2     "Haha, BBQ on the beach, engage smug mode!   ❤  #vacation"                  
    3     "getting ready for Saturday night  #yum #weekend "                            
    4     "Say it with me - I NEED A #VACATION!!! ☹"                                        
    5     " Chilling  at home for the first time in ages…This is the life!  #weekend"
    6     "My last #weekend before the exam  ."                                         
    7     "can’t believe my #vacation is over  so unfair"                                 
    8     "Can’t wait for tennis this #weekend  "                                   

Извлеките текстовые данные из поля TextData и просмотрите первые несколько обновлений состояния.

textData = tbl.TextData;
textData(1:5)
ans = 5×1 string
    "Happy anniversary! ❤ Next stop: Paris! ✈ #vacation"
    "Haha, BBQ on the beach, engage smug mode!   ❤  #vacation"
    "getting ready for Saturday night  #yum #weekend "
    "Say it with me - I NEED A #VACATION!!! ☹"
    " Chilling  at home for the first time in ages…This is the life!  #weekend"

Визуализация текстовых данных в облаке слов.

figure
wordcloud(textData);

Фильтрация текстовых данных по эмодзи

Определите обновления состояния, содержащие определенные эмодзи, с помощью contains функция. Найдите индексы документов, содержащих эмодзи «улыбающееся лицо с солнцезащитными очками» (с кодом U + 1F60E). Этот эмодзи содержит две единицы кода UTF16 Юникода "D83D" и "DE0E".

emoji = compose("\xD83D\xDE0E");
idx = contains(textData,emoji);
textDataSunglasses = textData(idx);
textDataSunglasses(1:5)
ans = 5×1 string
    "Haha, BBQ on the beach, engage smug mode!   ❤  #vacation"
    "getting ready for Saturday night  #yum #weekend "
    " Chilling  at home for the first time in ages…This is the life!  #weekend"
    " Check the out-of-office crew, we are officially ON #VACATION!! "
    "Who needs a #vacation when the weather is this good ☀ "

Визуализация извлеченных текстовых данных в облаке слов.

figure
wordcloud(textDataSunglasses);

Извлечение и визуализация эмодзи

Визуализация всех эмодзи в текстовых данных с помощью облака слов.

Извлеките эмодзи. Сначала маркировать текст с помощью tokenizedDocument, а затем просмотрите первые несколько документов.

documents = tokenizedDocument(textData);
documents(1:5)
ans = 
  5×1 tokenizedDocument:

    11 tokens: Happy anniversary ! ❤ Next stop : Paris ! ✈ #vacation
    16 tokens: Haha , BBQ on the beach , engage smug mode !   ❤  #vacation
     9 tokens: getting ready for Saturday night  #yum #weekend 
    13 tokens: Say it with me - I NEED A #VACATION ! ! ! ☹
    19 tokens:  Chilling  at home for the first time in ages … This is the life !  #weekend

tokenizedDocument функция автоматически обнаруживает эмодзи и назначает тип маркера "emoji". Просмотр первых нескольких сведений о маркерах документов с помощью tokenDetails функция.

tdetails = tokenDetails(documents);
head(tdetails)
ans=8×5 table
        Token        DocumentNumber    LineNumber       Type        Language
    _____________    ______________    __________    ___________    ________

    "Happy"                1               1         letters           en   
    "anniversary"          1               1         letters           en   
    "!"                    1               1         punctuation       en   
    "❤"                    1               1         emoji             en   
    "Next"                 1               1         letters           en   
    "stop"                 1               1         letters           en   
    ":"                    1               1         punctuation       en   
    "Paris"                1               1         letters           en   

Визуализация эмодзи в облаке слов путем извлечения токенов с типом токена "emoji" и ввод их в wordcloud функция.

idx = tdetails.Type == "emoji";
tokens = tdetails.Token(idx);
figure
wordcloud(tokens);
title("Emojis")

См. также

| |

Связанные темы