絵文字を含むテキスト データの解析
この例では、絵文字を含むテキスト データを解析する方法を示します。
絵文字は、テキスト内にインラインで表示される視覚的なシンボルです。スマートフォンやタブレットなどのモバイル デバイスでテキストを書くとき、人々は絵文字を使用してテキストを短くし、感情 (emotion) や気持ち (feeling) を伝えます。
テキスト データの解析に絵文字を使用することもできます。たとえば、それらを使用して、関連するテキスト文字列を識別したり、テキストのセンチメントや感情 (emotion) を可視化したりします。
テキスト データを扱う際、絵文字は予期しない動作をすることがあります。システム フォントによっては、一部の絵文字が正しく表示されない場合があります。そのため、絵文字が正しく表示されないとしても、必ずしもデータが欠落しているとは限りません。システムが現在のフォントで絵文字を表示できない可能性があります。
絵文字の作成
ほとんどの場合、絵文字は (たとえば、extractFileText
、extractHTMLText
、または readtable
を使用して) ファイルから読み取るか、コピーして直接 MATLAB® に貼り付けることができます。それ以外の場合は、Unicode UTF16 コード単位を使用して絵文字を作成しなければなりません。
一部の絵文字は、複数の Unicode UTF16 コード単位で構成されています。たとえば、「サングラスをかけた笑顔」の絵文字 (コード ポイントは U+1F60E) は単一のグリフですが、2 つの UTF16 コード ユニット "D83D"
と "DE0E"
で構成されています。関数 compose
を使用してこの絵文字を含む文字列を作成し、接頭辞 "\x"
と共に 2 つのコード単位を指定します。
emoji = compose("\xD83D\xDE0E")
emoji = ""
まず、絵文字の Unicode UTF16 コード単位を取得します。char
を使用して絵文字の数値表現を取得し、次に dec2hex
を使用して対応する 16 進値を取得します。
codeUnits = dec2hex(char(emoji))
codeUnits = 2×4 char array
'D83D'
'DE0E'
空の区切り文字 ""
と共に関数 strjoin
を使用して、合成文字列を再構築します。
formatSpec = strjoin("\x" + codeUnits,"")
formatSpec = "\xD83D\xDE0E"
emoji = compose(formatSpec)
emoji = ""
テキスト データのインポート
readtable
を使用して、ファイル weekendUpdates.xlsx
内のテキスト データを抽出します。ファイル 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)を含むドキュメントのインデックスを検索します。この絵文字は、2 つの Unicode 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")
参考
wordcloud
| tokenizedDocument
| tokenDetails