2009年12月1日火曜日

簡単テキストマイニング ExcelでKWIC

このエントリーをはてなブックマークに追加
KWICとは、KeyWord In Context の略で、キーワード前後の文章を抽出する技術です。KWICによって文脈を簡単に理解することができます。これはテキストマイニングの技術としてだけではなく、Yahoo!やGoogleなどの検索結果にも利用されています。例えば下記はGoogleで"NPSとは"で検索した結果になります。
2008年7月19日 ... そして、推奨者から批判者の比率を減算したものが、ネットプロモータースコアー(NPS)です。つまり、30%が推奨者で、20%が批判者であれば、NPSは10%となります。もし推奨者が20%で批判者が30%であれば、NPSは-10%となります。 ...
このようにキーワードを中心とした文章が掲載されていると全体を読まなくとも指定したキーワード(特定の語彙)がどのように使われているかを理解することができます。KWICを使った検索機能は、日本語では難しい係受け分析を使用するよりも、キーワード(特定の語彙)の使われ方を知る有効な手段です。但し、KWICでは、「パンが美味しい」と記載されている文章は5件というような定量的表記はできません。

EXCELでKWIC

以前、紹介したTTM: Tiny Text Minerでは、このKWICの機能を有していません。それを補う場合にEXCELで簡易的にKWICを実行してみましょう。

EXCEL KWICの完成形は下記のようになりますが、キーワードが複数回出現する文章の対応がいまひとつです。時間があれば今度はVBAで作成してみようと思います。

A B C D E F G
1 キーワード KWIC
2 文字数 20
3 出現位置 2
4
5 出現頻度 1st 2nd Befor KWD KWD After KWD 検索対象文章
6 2 1 51 キーワード前後の文章を抽出する技術です。 KWIC によって文脈を簡単に理解することができま KWICとは、KeyWord In Context の略で、キーワード前後の文章を抽出する技術です。KWICによって文脈を簡単に理解することができます。

項目説明:

入力項目

B1 検索対象とするキーワードを入力します
B2 キーワード前後の表示する文字数を指定します
B3 何番目に出現するキーワードを対象とするかを入力します
G6 検索対象とする文章

出力項目

A6 B1で入力したキーワードがG6の文章の中に何回出現するかを表示します
B6 G6の文章の中でB1で指定したキーワードが最初に出現する位置を表示します
C6 G6の文章の中でB1で指定したキーワードが2番目に出現する位置を表示します
D6 B2で指定した文字数分、キーワード前の文章を表示します
E6 B1で指定したキーワードを表示します
F6 B2で指定した文字数分、キーワード後の文章を表示します

では、順次説明をしていきます。

キーワードの出現頻度:

今回のEXCEL KWICでは、複数回出現するキーワードの対応ができていません。しかし冗長的な表現となっていますが、出現頻度が2回以下であれば、2回目に出現する位置でのKWIC表記は対応しています。出現頻度が多いキーワードは、別な工夫が必要となるので、先ずは文章内でのキーワードの出現頻度を求めます。

Excelでは、指定した文字をカウントしてくれるような関数が提供されていないので、文字列の出現頻度を求めるには工夫が必要です。そのため対象文章からカウントしたい文字列を削除して、その差分をカウントしたい文字列の長さで除算して求めます。

=(元の文章の長さ-元の文章から文字列を削除した長さ)/文字列の長さ

A B C
1 アオリイカ、コウイカ、カミナリイカ、ジンドウイカ、ミミイカ
2
3

上記で"イカ"が何回出現するかをカウントするためには、

1)文章の長さを求める
=len(A1)
結果:29

2)カウントしたい文字列を削除した文章を作成する
=substitute(A1,"イカ","")
結果:アオリ、コウ、カミナリ、ジンドウ、ミミ

3)カウントしたい文字列を削除した文章の長さ
=len(substitute(A1,"イカ",""))
結果:19

4)元の文章と文字列を削除した文章の差
=len(A1)-len(substitute(A1,"イカ",""))
結果:29-10=10

5)カウントしたい文字列の長さ
=len("イカ")
結果:2

6)出現頻度を求める
=(len(A1)-len(substitute(A1,"イカ","")))/len("イカ")
結果:(29-19)/2=5

これで"イカ"の出現頻度5回を求めることができます。

余談となりますが、この方法を用いると例文のように区切り文字で文字列が連続している場合に何個の文字列があるかも求めることができます。

=(len(A1)-len(substitute(A1,"、","")))+1

区切り文字"、"の個数+1が文字列の個数になるというわけです。

Excel KWICのA6のセルは、
=(len(G6)-len(substitute(G6,$B$1,"")))/len($B$1)
と記載します。

と、いうことで今回はここまで。
続きは次回以降に書きます。






関連記事


コメントを投稿