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

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

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

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

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

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

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

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

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

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

codeUnits = dec2hex(char(emoji))
codeUnits = 2x4 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 = 5x1 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). Этот эмодзи включает эти два элемента кода "D83D" Unicode UTF16 и "DE0E".

emoji = compose("\xD83D\xDE0E");
idx = contains(textData,emoji);
textDataSunglasses = textData(idx);
textDataSunglasses(1:5)
ans = 5x1 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 = 
  5x1 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")

Смотрите также

| |

Похожие темы