Main Content

絵文字を含むテキスト データの解析

この例では、絵文字を含むテキスト データを解析する方法を示します。

絵文字は、テキスト内にインラインで表示される視覚的なシンボルです。スマートフォンやタブレットなどのモバイル デバイスでテキストを書くとき、人々は絵文字を使用してテキストを短くし、感情 (emotion) や気持ち (feeling) を伝えます。

テキスト データの解析に絵文字を使用することもできます。たとえば、それらを使用して、関連するテキスト文字列を識別したり、テキストのセンチメントや感情 (emotion) を可視化したりします。

テキスト データを扱う際、絵文字は予期しない動作をすることがあります。システム フォントによっては、一部の絵文字が正しく表示されない場合があります。そのため、絵文字が正しく表示されないとしても、必ずしもデータが欠落しているとは限りません。システムが現在のフォントで絵文字を表示できない可能性があります。

絵文字の作成

ほとんどの場合、絵文字は (たとえば、extractFileTextextractHTMLText、または readtable を使用して) ファイルから読み取るか、コピーして直接 MATLAB® に貼り付けることができます。それ以外の場合は、Unicode UTF16 コード単位を使用して絵文字を作成しなければなりません。

一部の絵文字は、複数の Unicode UTF16 コード単位で構成されています。たとえば、"サングラスをかけた笑顔" の絵文字 (コード ポイント U+1F60E の😎) は 1 つのグリフですが、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")

参考

| |

関連するトピック