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