В этом примере показано, как искать и извлечь все доступные Tweets за последние 7 дней и импортировать их в MATLAB®. После импорта данных можно провести анализ настроений. Этот анализ позволяет вам определить субъективную информацию, такую как настроения, мнения или эмоциональные реакции, из текстовых данных. Этот пример ищет положительные и отрицательные настроения относительно отрасли финансовых услуг.
Чтобы запустить этот пример, вам нужен Twitter® учетные данные. Чтобы получить эти учетные данные, сначала войдите в свою учетную запись Twitter. Затем заполните форму в Создать заявку.
Для доступа к коду примера введите edit TwitterExample.m
в командной строке.
Создайте подключение к Twitter с помощью учетных данных. (Значения в этом примере не представляют действительные учетные данные Twitter.)
consumerkey = 'abcdefghijklmnop123456789'; consumersecret = 'qrstuvwxyz123456789'; accesstoken = '123456789abcdefghijklmnop'; accesstokensecret = '123456789qrstuvwxyz'; c = twitter(consumerkey,consumersecret,accesstoken,accesstokensecret);
Проверьте подключение к Twitter. Если на StatusCode
свойство имеет значение OK
, подключение успешно.
c.StatusCode
ans = OK
Поиск последних 100 твитов о отрасли финансовых услуг с помощью объекта подключения Twitter. Используйте поисковый термин financial services
. Импорт Tweet® данные в рабочее пространство MATLAB.
tweetquery = 'financial services'; s = search(c,tweetquery,'count',100); statuses = s.Body.Data.statuses; pause(2)
statuses
содержит данные Tweet как массив ячеек из 100 структур. Каждая структура содержит поле для текста Tweet, а остальные поля содержат другую информацию о Tweet.
Поиск и извлечение следующих 100 твитов, произошедших с момента предыдущего запроса.
sRefresh = search(c,tweetquery,'count',100, ... 'since_id',s.Body.Data.search_metadata.max_id_str); statuses = [statuses;sRefresh.Body.Data.statuses];
statuses
содержит последние 100 твитов в дополнение к предыдущим 100 твитов.
Извлечение всех доступных твитов о отрасли финансовых услуг с помощью while
цикл. Проверьте доступные данные с помощью isfield
функция и поле структуры next_results
.
while isfield(s.Body.Data.search_metadata,'next_results') % Convert results to string nextresults = string(s.Body.Data.search_metadata.next_results); % Extract maximum Tweet identifier max_id = extractBetween(nextresults,"max_id=","&"); % Convert maximum Tweet identifier to a character vector cmax_id = char(max_id); % Search for Tweets s = search(c,tweetquery,'count',100,'max_id',cmax_id); % Retrieve Tweet text for each Tweet statuses = [statuses;s.Body.Data.statuses]; end
Извлеките время создания и текст каждого Tweet. Получите время создания неструктурированных данных путем доступа к ним в массиве ячеек структур. Для структурированных данных получите доступ ко времени создания путем транспонирования поля в массиве структур.
if iscell(statuses) % Unstructured data numTweets = length(statuses); % Determine total number of Tweets tweetTimes = cell(numTweets,1); % Allocate space for Tweet times and Tweet text tweetTexts = tweetTimes; for i = 1:numTweets tweetTimes{i} = statuses{i}.created_at; % Retrieve the time each Tweet was created tweetTexts{i} = statuses{i}.text; % Retrieve the text of each Tweet end else % Structured data tweetTimes = {statuses.created_at}'; tweetTexts = {statuses.text}'; end
tweetTimes
содержит время создания для каждого Tweet. tweetTexts
содержит текст для каждого Tweet.
Создайте tweets timetable
для всех твитов с использованием текста и времени создания каждого твита.
tweets = timetable(tweetTexts,'RowTimes', ... datetime(tweetTimes,'Format','eee MMM dd HH:mm:ss +SSSS yyyy'));
Создайте глоссарий слов, которые связаны с положительными настроениями.
poskeywords = {'happy','great','good', ... 'fast','optimized','nice','interesting','amazing','top','award', ... 'winner','wins','cool','thanks','useful'};
poskeywords
- массив ячеек из векторов символов. Каждый вектор символов является словом, которое представляет собой образец положительного настроения.
Поиск слов в каждом Tweet в глоссарии положительных настроений. Определите общее количество твитов, которые содержат положительные настроения. Из общего количества положительных твитов определите общее количество ретвитов.
% Determine the total number of Tweets numTweets = height(tweets); % Determine the positive Tweets numPosTweets = 0; numPosRTs = 0; for i = 1:numTweets % Compare Tweet to positive sentiment glossary dJobs = contains(tweets.tweetTexts{i},poskeywords,'IgnoreCase',true); if dJobs % Increase total count of Tweets with positive sentiment by one numPosTweets = numPosTweets + 1; % Determine if positive Tweet is a Retweet RTs = strncmp('RT @',tweets.tweetTexts{i},4); if RTs % Increase total count of positive Retweets by one numPosRTs = numPosRTs + 1; end end end
numPosTweets
содержит общее количество твитов с положительными настроениями.
numPosRTs
содержит общее количество ретвитов с положительными настроениями.
Создайте глоссарий слов, которые связаны с негативными настроениями.
negkeywords = {'sad','poor','bad','slow','weaken','mean','boring', ... 'ordinary','bottom','loss','loser','loses','uncool', ... 'criticism','useless'};
negkeywords
- массив ячеек из векторов символов. Каждый вектор символов является словом, которое представляет собой образец негативного настроения.
Поиск слов в каждом Tweet в глоссарии негативных настроений. Определите общее количество твитов, которые содержат отрицательные настроения. Из общего количества отрицательных твитов определите общее количество ретвитов.
% Determine the negative Tweets numNegTweets = 0; numNegRTs = 0; for i = 1:numTweets % Compare Tweet to negative sentiment glossary dJobs = contains(tweets.tweetTexts{i},negkeywords,'IgnoreCase',true); if dJobs % Increase total count of Tweets with negative sentiment by one numNegTweets = numNegTweets + 1; % Determine if negative Tweet is a Retweet RTs = strncmp('RT @',tweets.tweetTexts{i},4); if RTs numNegRTs = numNegRTs + 1; end end end
numNegTweets
содержит общее количество твитов с отрицательными настроениями.
numNegRTs
содержит общее количество ретвитов с отрицательными настроениями.
Составьте таблицу со столбцами, которые содержат:
Количество твитов
Количество твитов с положительными настроениями
Количество положительных ретвитов
Количество твитов с отрицательными настроениями
Количество отрицательных ретвитов
matlabTweetTable = table(numTweets,numPosTweets,numPosRTs,numNegTweets,numNegRTs, ... 'VariableNames',{'Number_of_Tweets','Positive_Tweets','Positive_Retweets', ... 'Negative_Tweets','Negative_Retweets'});
Отображение таблицы данных Tweet.
matlabTweetTable
matlabTweetTable = 1×5 table Number_of_Tweets Positive_Tweets Positive_Retweets Negative_Tweets Negative_Retweets ________________ _______________ _________________ _______________ _________________ 11465 688 238 201 96
Из 11 465 твитов о индустрии финансовых услуг за последние 7 дней 688 твитов имеют положительные настроения, а 201 твит - отрицательные настроения. Из положительных твитов 238 твитов являются ретвитами. Из отрицательных Tweets 96 являются Retweets.