17.4 CTX_DOCパッケージを使用したセンチメント分析の実行

CTX_DOCパッケージのプロシージャを使用してドキュメント・セット内の単一のドキュメントでセンチメント分析を実行します。ドキュメントごとに、ドキュメント全体で1つのセンチメント・スコアを決定するか、ドキュメント内のトピックごとに個別のセンチメント・スコアを決定できます。

センチメント分析を実行する前に、ドキュメント・セットでコンテキスト索引を作成する必要があります。次のコマンドでは、camera_reviews表に含まれているドキュメント・セットでcamera_revidxコンテキスト索引が作成されます。

create index camera_revidx on camera_reviews(review_text) indextype is
ctxsys.context parameters ('lexer mylexer stoplist ctxsys.default_stoplist');

CTX_DOCパッケージでセンチメント分析を実行するには、次のいずれかの方法を使用します。

  • 必要なパラメータを使用してCTX_DOC.SENTIMENT_AGGREGATEプロシージャを実行する

    このプロシージャは、ドキュメント全体に対する単一統合センチメント・スコアを提供します。

    センチメント・スコアは-100から100の範囲の値で、センチメントの強度を示します。負のスコアは否定的なセンチメントを表し、正のスコアは肯定的なセンチメントを表します。センチメント・スコアに基づき、スコアを「強く否定(-80から-100)」、「否定(-80から-50)」、「中立(-50から+50)」、「肯定(+50から+80)」、「強く肯定(+80から+100)」などのラベルにグループ分けできます。

  • 必要なパラメータを使用してCTX_DOC.SENTIMENTプロシージャを実行する

    このプロシージャは、検索語を含むドキュメント内の個々のセグメントを返し、各セグメントに関連付けられたセグメント・スコアを提供します。

例17-2 ドキュメントの単一センチメント・スコアの取得

次の例では、clsfier_cameraセンチメント分類子を使用してドキュメント全体に対する単一の集計センチメント・スコアを提供します。センチメント分類子が作成およびトレーニングされました。ドキュメント・セットを含む表には、camera_revidxコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_idは49です。センチメント・スコアが生成されるトピックは'Nikon'です。

select ctx_doc.sentiment_aggregate('camera_revidx','49','Nikon','clsfier_camera') from dual;

CTX_DOC.SENTIMENT_AGGREGATE('CAMERA_REVIDX','49','NIKON','CLSFIER_CAMERA')
--------------------------------------------------------------------------
                            74
1 row selected.

例17-3 デフォルトの分類子を使用した単一のセンチメント・スコアの取得

次の例では、ドキュメントのセンチメント分類子を使用してドキュメント全体の集計センチメント・スコアを提供します。ドキュメント・セットを含む表には、camera_revidxコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_idは1です。

select ctx_doc.sentiment_aggregate('camera_revidx','1') from dual;

CTX_DOC.SENTIMENT_AGGREGATE('CAMERA_REVIDX','1')
--------------------------------------------
                                           2

1 row selected.

例17-4 ドキュメント内の各トピックのセンチメント・スコアの取得

次の例では、clsfier_cameraセンチメント分類子を使用してドキュメント内の各セグメントのセンチメント・スコアを生成します。センチメント分類子が作成およびトレーニングされました。ドキュメント・セットを含む表には、camera_revidxコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_idは49です。センチメント・スコアが生成されるトピックは'Nikon'です。分析結果が移入されるrestab結果表は、スニペット(CLOB)列とスコア(NUMBER)列を使用して作成されました。

exec ctx_doc.sentiment('camera_revidx','49','Nikon','restab','clsfier_camera', starttag=>'<<', endtag=>'>>');

SQL> select * from restab;
SNIPPET						
--------------------------------------------------------------------------------
     SCORE
----------
It took <<Nikon>> a while to produce a superb compact 85mm lens, but this time they finally got it right.
        65

Without a doubt, this is a fine portrait lens for photographing head-and-shoulder portraits (The only lens which is optically better is 
<<Nikon>>'s legendary 10
5mm f2.5 Nikkor lens, and its close optical twin, the 105mm f2.8 Micro Nikkor.
        75

Since the 105mm f2.5 Nikkor lens doesn't have an autofocus version, then this might be the perfect moderate telephoto lens for owners of 
<<Nikon>> autofocus 
SLR cameras.
        84
3 rows selected.

例17-5 ドキュメント内のトピックのセンチメント・スコアの取得

次の例では、tdrbrtsent03_clセンチメント分類子を使用してドキュメント内の各セグメントのセンチメント・スコアを生成します。センチメント分類子が作成およびトレーニングされました。ドキュメント・セットを含む表には、tdrbrtsent03_idxコンテキスト索引があります。センチメント分析を実行する必要のあるドキュメント表内のドキュメントのdoc_idは1です。センチメント・スコアが生成されるトピックは'movie'です。分析結果が移入されるtdrbrtsent03_rtab結果表は、スニペット列とスコア列を使用して作成されました。

SQL> exec ctx_doc.sentiment('tdrbrtsent03_idx','1','movie','tdrbrtsent03_rtab','tdrbrtsent03_cl');
PL/SQL procedure successfully completed.  

SQL> select * from tdrbrtsent03_rtab;
SNIPPET
--------------------------------------------------------------------------------      
SCORE
---------- 
the <b>movie</b> is a bit overlong , but nicholson is such good fun that the running time passes by pretty quickly
 -62

1 row selected.

関連項目: