- 3 февраля 2014 г.
- Василис Вриниотис
- . 7 комментариев
В этой статье мы обсудим, как легко создать простой инструмент анализа настроений Facebook, способный классифицировать общедоступные сообщения (как от пользователей, так и со страниц) как положительные, отрицательные и нейтральные. Мы собираемся использовать Facebook Graph API Search и Datumbox API 1.0v. Подобно инструменту анализа настроений в Твиттере, который мы создали несколько месяцев назад, эта реализация написана на PHP, тем не менее вы можете очень легко создать свой собственный инструмент на выбранном вами языке программирования.
Обновление: платформа машинного обучения Datumbox теперь имеет открытый исходный код и бесплатна для скачать. Если вы хотите создать классификатор анализа тональности, не нарушая ограничений API, используйте класс com.datumbox.applications.nlp.TextClassifier.
Полный PHP-код инструмента можно найти на Гитхаб.
Как работает анализ настроений в Facebook?
Как мы обсуждали в предыдущих статьях, для выполнения анализа тональности требуется использование передовых методов машинного обучения и обработки естественного языка. В предыдущих сообщениях мы подробно рассмотрели несколько текстовых классификаторов, таких как наивный байесовский, регрессия Softmax и максимальная энтропия, мы обсудили важность использования выбора признаков в задачах классификации текста и, наконец, мы увидели, как можно разработать реализацию полиномиального Наивный байесовский классификатор в JAVA.
Выполнение анализа настроений на Facebook существенно не отличается от того, что мы обсуждали в прошлом. В двух словах, нам нужно получить посты в Facebook и извлечь их содержимое, а затем мы токенизируем их, чтобы извлечь их комбинации ключевых слов. После этого мы выполняем отбор признаков, чтобы оставить только те n-граммы, которые важны для задачи классификации, и обучаем наш классификатор идентифицировать положительные, отрицательные и нейтральные сообщения.
Описанный выше процесс значительно упрощается при использовании инструмента Datumbox. API машинного обучения. Все, что нужно сделать, чтобы выполнить анализ настроений в Facebook, — это вызвать поиск Graph API, чтобы извлечь интересующие сообщения, извлечь их текст и вызвать API анализа настроений Datumbox, чтобы получить их классификацию.
Создание инструмента анализа настроений Facebook
Чтобы создать инструмент анализа настроений Facebook, вам потребуются две вещи: использование API Facebook для получения общедоступных сообщений и оценка полярности сообщений на основе их ключевых слов. Для первой задачи мы будем использовать поиск Facebook Graph API, а для второй — Datumbox API 1.0v.
Мы ускорим разработку инструмента, используя 2 класса: PHP SDK для Facebook что позволит нам легко получить доступ к поиску Graph и Datumbox PHP-API-клиент. Еще раз, самая сложная задача в этом процессе — создать приложение Facebook, которое позволит нам получать сообщения из Facebook; интеграция с Datumbox — это просто.
Создание собственного приложения Facebook
К сожалению, Facebook сделал обязательной аутентификацию перед доступом их API поиска графов. К счастью, они обеспечивают очень простой в использовании SDK который заботится о большинстве технических деталей интеграции. Тем не менее, прежде чем использовать его, вы должны создать с помощью своей учетной записи Facebook новое приложение Facebook.
Процесс прост. Идти к Страница разработчиков Facebook (вам нужно будет зарегистрироваться, если вы никогда раньше не писали приложения для Facebook). Нажмите «Приложения» в меню и выберите «Создать новое приложение».
Во всплывающем окне введите отображаемое имя вашего приложения, пространство имен, выберите категорию и нажмите «Создать приложение». После создания приложения перейдите на главную страницу своего приложения и выберите «Панель мониторинга». Здесь вы получите значения AppID и App Secret. Скопируйте эти значения в безопасное место, так как они понадобятся нам позже.
Затем перейдите в настройки вашего приложения и нажмите «+ App Platform» внизу страницы. Во всплывающем окне выберите «Веб-сайт», а затем в URL-адресе сайта укажите URL-адрес места, куда вы загрузите свой инструмент (пример: https://localhost/). Нажмите «Сохранить изменения», и все готово!
Получите ключ API Datumbox
Чтобы получить доступ к API Datumbox зарегистрироваться для бесплатного аккаунта и посетите свой Панель учетных данных API чтобы получить ключ API.
Разработка класса анализа настроений Facebook
Наконец, все, что нам нужно сделать, это написать простой класс, который интегрирует два API. Сначала вызывает Facebook Graph Search, аутентифицирует, извлекает сообщения, а затем передает их API Datumbox для получения их полярности.
Вот код класса вместе с необходимыми комментариями.
<?php include_once(dirname(__FILE__).'/DatumboxAPI.php'); include_once(dirname(__FILE__).'/facebook-php-sdk/src/facebook.php'); class FacebookSentimentAnalysis { protected $datumbox_api_key; //Your Datumbox API Key. Get it from https://www.datumbox.com/apikeys/view/ protected $app_id; //Your Facebook APP Id. Get it from https://developers.facebook.com/ protected $app_secret; //Your Facebook APP Id. Get it from https://developers.facebook.com/ /** * The constructor of the class * * @param string $datumbox_api_key Your Datumbox API Key * @param string $app_id Your Facebook App Id * @param string $app_secret Your Facebook App Secret * * @return FacebookSentimentAnalysis */ public function __construct($datumbox_api_key, $app_id, $app_secret){ $this->datumbox_api_key=$datumbox_api_key; $this->app_id=$app_id; $this->app_secret=$app_secret; } /** * This function fetches the fb posts list and evaluates their sentiment * * @param array $facebookSearchParams The Facebook Search Parameters that are passed to Facebook API. Read more here https://developers.facebook.com/docs/reference/api/search/ * * @return array */ public function sentimentAnalysis($facebookSearchParams) { $posts=$this->getPosts($facebookSearchParams); return $this->findSentiment($posts); } /** * Calls the Open Graph Search method of the Facebook API for particular Graph API Search Parameters and returns the list of posts that match the search criteria. * * @param mixed $facebookSearchParams The Facebook Search Parameters that are passed to Facebook API. Read more here https://developers.facebook.com/docs/reference/api/search/ * * @return array $posts */ protected function getPosts($facebookSearchParams) { //Use the Facebook SDK Client $Client = new Facebook(array( 'appId' => $this->app_id, 'secret' => $this->app_secret, )); // Get User ID $user = $Client->getUser(); //if Use is not set, redirect to login page if(!$user) { header('Location: '.$Client->getLoginUrl()); die(); } $posts = $Client->api('/search', 'GET', $facebookSearchParams); //call the service and get the list of posts unset($Client); return $posts; } /** * Finds the Sentiment for a list of Facebook posts. * * @param array $posts List of posts coming from Facebook's API * * @param array $posts */ protected function findSentiment($posts) { $DatumboxAPI = new DatumboxAPI($this->datumbox_api_key); //initialize the DatumboxAPI client $results=array(); if(!isset($posts('data'))) { return $results; } foreach($posts('data') as $post) { //foreach of the posts that we received $message=isset($post('message'))?$post('message'):''; if(isset($post('caption'))) { $message.=("\n\n".$post('caption')); } if(isset($post('description'))) { $message.=("\n\n".$post('description')); } if(isset($post('link'))) { $message.=("\n\n".$post('link')); } $message=trim($message); if($message!='') { $sentiment=$DatumboxAPI->SentimentAnalysis(strip_tags($message)); //call Datumbox service to get the sentiment if($sentiment!=false) { //if the sentiment is not false, the API call was successful. $tmp = explode('_',$post('id')); if(!isset($tmp(1))) { $tmp(1)=''; } $results()=array( //add the post message in the results 'id'=>$post('id'), 'user'=>$post('from')('name'), 'text'=>$message, 'url'=>'https://www.facebook.com/'.$tmp(0).'/posts/'.$tmp(1), 'sentiment'=>$sentiment, ); } } } unset($posts); unset($DatumboxAPI); return $results; } }
Как вы можете видеть выше, в конструкторе мы передаем ключи, необходимые для доступа к двум API. В общедоступном методе senseAnalysis() мы инициализируем клиент Facebook, аутентифицируемся и получаем список постов. Обратите внимание: если вы еще не авторизовали свое приложение или не вошли в Facebook со своей учетной записью, вы будете перенаправлены на Facebook.com для входа и авторизации приложения (это ваше приложение, не беспокойтесь о проблемах с конфиденциальностью). После получения списка сообщений они передаются в API Datumbox для получения их полярности.
Вы готовы идти! Вы готовы использовать этот класс для анализа настроений на Facebook. Ты можешь скачать полный PHP-код инструмента анализа настроений Facebook из Github.
Использование и расширение реализации
Чтобы использовать предоставленный инструмент, вам необходимо создать приложение Facebook, как описано выше, а затем настроить его, изменив файл config.php. В этот файл вам нужно будет поместить ключ API Datumbox, идентификатор приложения Facebook и секрет, которые вы скопировали ранее.
Наконец, в предыдущем посте мы создали автономный инструмент анализа настроений в Твиттере. Вам понадобится не более 10 минут, чтобы объединить две реализации и создать единый инструмент, способный получать сообщения как из Facebook, так и из Twitter и представлять результаты в одном отчете.
Если вам понравилась статья, пожалуйста, найдите минутку, чтобы поделиться ею на Facebook или Twitter! 🙂