17.5 RSIを使用したセンチメント分析の実行

XML問合せの結果セット・インタフェース(RSI)により、デフォルトのセンチメント分類子またはユーザー定義のセンチメント分類子を使用してドキュメントのセットに対してセンチメント分析を実行できます。センチメント分析を実行する必要のあるドキュメントはドキュメント表内に格納されます。

入力RSIのsentiment要素は、結果セット記述子(RSD)で指定された他の操作に加えて問合せ時にセンチメント分析を実行する必要があることを示すために使用します。sentiment要素のclassifier属性の値を指定すると、指定したセンチメント分類子がセンチメントの分析の実行に使用されます。classifier属性を省略すると、Oracle Textではデフォルトのセンチメント分類子を使用してセンチメント分析が実行されます。sentiment要素には、センチメント分析中にセンチメントを生成する必要があるトピックまたは概念を指定する、itemと呼ばれる子要素が含まれます。

各ドキュメントの単一のセンチメント・スコアまたはドキュメント内のトピックごとに個別のセンチメント・スコアを生成できます。item要素のagg属性を使用して、各ドキュメントの単一の集計センチメント・スコアを生成します。

センチメント分類を実行するには、キーワード問合せまたはABOUT演算子を使用します。ABOUT演算子を使用する場合、結果セットにはシソーラスを使用して識別されたキーワードのシノニムが含まれます。

RSIを使用してセンチメント分析を実行するには:

  1. センチメント分析の実行に使用するセンチメント分類子を作成およびトレーニングします。
  2. 分析するドキュメントとドキュメント表のコンテキスト索引を含むドキュメント表を作成します。
  3. 問合せ内の必要な要素と属性を使用してセンチメント分析を実行します。

    RSIにはsentiment要素を含める必要があります。

例17-6 センチメント分析を実行するためのRSDの入力

次の例では、センチメント分析を実行し、'lens'トピックのセンチメントを生成します。駆動問合せは'camera'のキーワード問合せです。sentiment要素は、センチメント分析をclsfier_cameraセンチメント分類子を使用して実行する必要があることを指定します。この分類子は、以前はCTX_CLS.SA_TRAIN_MODELプロシージャを使用して作成およびトレーニングしていました。camera_revidxコンテキスト索引はドキュメント・セット表にあります。

センチメント・スコアの範囲は-100~100です。正のスコアは肯定的なセンチメントを示し、負のスコアは否定的なセンチメントを示します。スコアの絶対値は、肯定的および否定的なセンチメントの大きさを示します。

センチメント分析を実行して、ドキュメント内の各トピックのセンチメント・スコアを取得するには:

  1. 検索操作の結果を格納する結果セット表rsを作成します。

    SQL> var rs clob;
    SQL> exec dbms_lob.createtemporary(:rs, TRUE, DBMS_LOB.SESSION);
    
  2. 検索問合せの一部としてセンチメント分析を実行します。

    検索されているキーワードは'camera'です。センチメント分析が実行されるトピックは'lens'です。

    begin
    ctx_query.result_set('camera_revidx','camera',' 
        <ctx_result_set_descriptor>
            <hitlist start_hit_num="1" end_hit_num="10" order="score desc"> 
            <sentiment classifier="clsfier_camera">
               <item topic="lens" /> 
               <item topic="picture quality" agg="true" />
           </sentiment> </hitlist>
       </ctx_result_set_descriptor>',:rs); 
    end; 
    / 
    
    
  3. 結果表に格納されている結果を表示します。

    他のアプリケーションでXML結果セットを使用して、さらに処理を加えることができます。簡潔にするために、一部の出力を削除しました。ドキュメント内のセグメントごとに、スコアがセグメントのセンチメント・スコアを表します。

    SQL> select xmltype(:rs) from dual; 
    XMLTYPE(:RS) 
    -------------------------------------------------------------------------------- 
    <ctx_result_set>
      <hitlist>
        <hit>
          <sentiment>
             <item topic="lens">          
                <segment>             
                   <segment_text>The first time it was sent in was because the <b>lens </b> door failed to turn on the camera 
    and it was almost to come off of its track . Eight months later, the flash quit working in all modes AND the door was 
    failing AGAIN!</segment_text>           
                    <segment_score>-81</segment_score>           
               </segment>         
            </item>        
             <item topic="picture quality"> <score> -75 </score>       
             </item>
          </sentiment>
        </hit>
        <hit>
           <sentiment>
              <item topic="lens">
                 <segment>
                     <segment_text>I was actually quite impressed with it. Powerful zoom , sharp <b>lens</b>, decent picture 
    quality. I also played with some other Panasonic models in various stores just to get a better feel for them, as well as 
    spent a few hours on </segment_text> 
                      <segment_score> 67 </segment_score>           
                </segment>        
              </item>         
                 <item topic="picture quality">  <score>-1</score>    </item>
           </sentiment>
        </hit> 
        . . . 
      . . .
      </hitlist>
    </ctx_result_set>