В этом примере показано, как анализировать текстовые данные, содержащие эмодзи.
Эмодзи - это графические символы, которые отображаются в тексте. При написании текста на мобильных устройствах, таких как смартфоны и планшеты, люди используют эмодзи, чтобы сохранить текст коротким и передать эмоции и чувства.
Вы также можете использовать эмодзи для анализа текстовых данных. Например, используйте их для идентификации соответствующих строк текста или для визуализации чувств или эмоций текста.
При работе с текстовыми данными эмодзи могут вести себя непредсказуемо. В зависимости от системных шрифтов система может неправильно отображать эмодзи. Поэтому, если эмодзи отображается неправильно, то данные не обязательно отсутствуют. Возможно, система не может отобразить эмодзи в текущем шрифте.
В большинстве случаев вы можете читать эмодзи из файла (например, с помощью 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")

tokenDetails | tokenizedDocument | wordcloud