Translate

2009年12月4日

簡単テキストマイニング ExcelでKWIC (その2)

ExcelでKWICを実現する「簡単テキストマイニング ExcelでKWIC」の続きです。
KWICとは、KeyWord In Context の略で、キーワード前後の文章を抽出する技術です。

Excel KWIC

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によって文脈を簡単に理解することができます。

前回は、A6セルのキーワードの出現頻度までだったので、今回はキーワードの出現位置からになります。

B6はキーワードが最初に出現する位置で、C6が2番目に出現する位置になります。ここで求めたキーワード開始位置を使ってD6、F6でキーワード前後の文章を表示します。

指定した文字列が出現する位置を求めるには、Excelのfind()を利用します。

B6セルの説明

B1で指定したキーワードがG6の中で最初に出現する開始位置です。検索開始は1文字目からです。
=find($B$1,G6,1)

上記だとB1に指定したキーワードがG6で出現しない場合にエラー(#VALUE!)となりますので、iferror()関数を使って、キーワード存在しない場合に"-"を表記させます。

=iferror(find($B$1,G6,1),"-")

C6セルの説明

B1で指定したキーワードがG6の中で2番目に出現する開始位置です。言い換えると最初にキーワードが出現した以降で、次に最初に出現する位置となります。

最初に来ワードが出現した位置はB6です。しかし、

=find($B$1,G6,B6) ・・・① 1文字目から検索

と記載するとB6の位置からキーワードが始まっているので、B6と同じ結果になってしまいます。B6の位置から+1する必要があります。若しくは厳密にキーワードの長さ分を加算します。

=find($B$1,G6,B6+1) ・・・② 1+1=2文字目から検索
=find($B$1,G6,B6+len($B$1) ・・・③ 1+4=5文字目から検索

可視化するとこんな感じです。
K W I C

そしてエラーの場合には”-“を表示するという処理を付け加えると下記のようになります。

=iferror(find($B$1,G6,B6+len($B$1)),"-")

次に本題のキーワード前後の文章の表示です。キーワード後の方が簡単なので先にF6セルの説明をします。

F6セルの説明

文字列の一部を切り取るには、mid(文字列,開始位置,文字数)関数を使用します。

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

上記のA1セルの中で"コウイカ"は、7文字目から始まり、4文字です。

Excelで表記すると、下記のようになります。

キーワード後の文字列を切り出すためにも、このmid()関数を使用します。キーワードの直後からB2セルで指定した分だけG6から切り出します。切り出し開始位置は、1番目のキーワードであれば、B6にキーワードの長さを加算した、1+4=5文字目になります。

=mid(G6,B6+len($B$1),$B$2)

2番目の出現位置からは

=mid(G6,C6+len($B$1),$B$2)

となります。

ここからが小技です。今回の仕様では、B3に"1"か"2"と入れることによって、キーワードの出現位置が1番目か、2番目かを選択できるようにしています。これをindex()関数を使って実現しています。

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

=index(A1:E1,2)

とすると、A1:E1までの中で2番目の内容が返ってくるので「コウイカ」となります。

=index(A1:E1,5)

は、ミミイカです。

Excel KWICでは、

=index(B6:C6,$B$3)

で、B3セルに指定したn番目のキーワード開始位置を求めることができます。

=mid(G6,index(B6:C6,$B$3)+len($B$1),$B$2)

これにエラーの場合は、何も表示しないという処理を加えると

=iferror(mid(G6,index(B6:C6,$B$3)+len($B$1),$B$2),"")

となります。





0 件のコメント:

コメントを投稿

アクセス上位(過去7日間)