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),"")
となります。