独自の Facebook 感情分析ツール PlatoBlockchain Data Intelligence を構築する方法。垂直検索。あい。

独自のFacebook感情分析ツールを構築する方法

この記事では、(ユーザーとページの両方からの)パブリック投稿をポジティブ、ネガティブ、ニュートラルに分類できる単純なFacebook感情分析ツールを簡単に構築する方法について説明します。 FacebookのGraph API SearchとDatumbox API 1.0vを使用します。 に似ています Twitter感情分析ツール 数か月前に作成したこの実装はPHPで記述されていますが、選択したコンピューター言語で独自のツールを非常に簡単に作成できます。

更新:Datumbox Machine Learning Frameworkがオープンソースになり、無料で ダウンロード。 APIの制限に影響を与えずに感情分析分類子を作成する場合は、com.datumbox.applications.nlp.TextClassifierクラスを使用します。

ツールの完全なPHPコードは、 githubの.

Facebook感情分析はどのように機能しますか?

以前の記事で説明したように、 感情分析 高度な機械学習と自然言語処理技術を使用する必要があります。 以前の投稿では、次のようないくつかのテキスト分類子について詳しく見てきました。 ナイーブベイズ Softmax回帰最大エントロピーを使用することの重要性について説明しました 機能の選択 テキスト分類の問題で、最後に、私たちはどのように実装を開発できるかを見ました JAVAの多項式ナイーブベイズ分類器.

Facebookでの感情分析の実行は、これまでに説明した内容とそれほど変わりません。 簡単に言うと、Facebookの投稿を取得してコンテンツを抽出し、キーワードの組み合わせを抽出するためにトークン化する必要があります。 その後、分類の問題にとって重要なNグラムのみを保持するように特徴選択を実行し、ポジティブ、ネガティブ、およびニュートラルポストを識別するように分類子をトレーニングします。

上記のプロセスは、Datumboxの 機械学習API。 Facebookで感情分析を実行するために必要なことは、Graph API検索を呼び出して関心のある投稿を抽出し、テキストを抽出し、Datumbox Sentiment Analysis APIを呼び出して分類を取得することだけです。

Facebook感情分析ツールの構築

Facebook感情分析ツールを構築するには、1.0つのことが必要です。FacebookAPIを使用して、公開投稿を取得し、キーワードに基づいて投稿の極性を評価すること。 最初のタスクではFacebookのGraph API検索を使用し、XNUMX番目のタスクではDatumbox API XNUMXvを使用します。

2つのクラスを使用して、ツールの開発をスピードアップします。 Facebook PHP SDK グラフ検索とデータムボックスに簡単にアクセスできるようになります PHP-API-クライアント。 ここでも、プロセスで最も複雑なタスクはFacebookアプリケーションを作成することです。これにより、Facebookから投稿を取得できます。 Datumboxの統合は簡単です。

独自のFacebookアプリケーションを作成する

フェイスブック感情分析残念ながら、Facebookはアクセスする前に認証を義務付けました グラフ検索API。 ありがたいことに、彼らは非常に使いやすい SDK これにより、統合の技術的な詳細のほとんどが処理されます。 それを使用する前に、Facebookアカウントを使用して新しいFacebookアプリケーションを作成する必要があります。

プロセスは簡単です。 に行く Facebook開発者ページ (これまでにFacebookアプリケーションを作成したことがない場合は、登録する必要があります)。 メニューの[Apps]をクリックし、[Create New App]を選択します。

ポップアップウィンドウで、アプリケーションの表示名、名前空間を入力し、カテゴリを選択して、[アプリの作成]をクリックします。 アプリケーションが作成されたら、アプリケーションのメインページに移動し、ダッシュボードを選択します。 ここで、AppIDとApp Secretの値を取得します。 これらの値は後で必要になるため、安全な場所にコピーします。

次に、アプリケーションの設定に移動し、ページの下部にある[+アプリプラットフォーム]をクリックします。 ポップアップで[Webサイト]を選択し、[サイトのURLアドレス]にツールをアップロードする場所のURLを入力します(例:https:// localhost /)。 「変更を保存」をクリックすると完了です。

Datumbox APIキーを取得する

Datumbox APIにアクセスするには アカウント登録 無料のアカウントで、 API資格情報パネル APIキーを取得します。

Facebook感情分析クラスの開発

最後に、XNUMXつのAPIを統合する単純なクラスを記述するだけです。 最初にFacebookグラフ検索を呼び出し、認証し、投稿をフェッチしてから、それらをDatumbox APIに渡して極性を取得します。

これは、必要なコメントとともにクラスのコードです。

<?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.=("nn".$post['caption']);
            }
            if(isset($post['description'])) {
                $message.=("nn".$post['description']);
            }
            if(isset($post['link'])) {
                $message.=("nn".$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;
    }
}

上記のコンストラクタで確認できるように、2つのAPIにアクセスするために必要なキーを渡します。 publicメソッドsentimentAnalysis()で、Facebookクライアントを初期化し、認証して、投稿のリストを取得します。 アプリケーションをまだ承認していない場合、またはアカウントでFacebookにログインしていない場合は、Facebook.comにリダイレクトされてログインし、アプリケーションを認証します(これはあなたのアプリケーションであり、プライバシーの問題についての心配はありません)。 投稿のリストが取得されると、それらはDatumbox APIに渡され、極性が取得されます。

準備できた! このクラスを使用して、Facebookで感情分析を実行する準備ができました。 あなたはできる ダウンロード GithubのFacebook感情分析ツールの完全なPHPコード。

実装の使用と拡張

提供されているツールを使用するには、上記のようにFacebookアプリケーションを作成し、config.phpファイルを変更して構成する必要があります。 このファイルには、前にコピーしたDatumbox APIキー、FacebookアプリIDおよびシークレットを配置する必要があります。

最後の前回の投稿では、スタンドアロンを構築しました Twitter感情分析ツール。 10つの実装をマージして、FacebookとTwitterの両方から投稿をフェッチし、結果を単一のレポートに表示できる単一のツールを作成するのに2分以上かかりません。

記事を楽しんだら、FacebookまたはTwitterで共有してください。 🙂

タイムスタンプ:

より多くの データムボックス