ChaKi.NETは、複数のKWIC検索方法を提供しており、StringSearchはその中で最も 手軽にKWICを作成することのできる検索法になります。

コーパスを選択し終えた状態(wiki:インポートしたコーパスを操作対象として選択する)で、SearchConditions パネルのタブから"String"を選びます。

036.png

図に示すタブ内のエディットボックスSearch Expressionに、検索したい表現を入力します。 入力文字列においては単語区切りを意識する必要はありません。単純にドキュメントそのもの (表層文字列)の一部とマッチするような文字列を入力すれば、その生起箇所を中心として 文*1単位のKWICを作成します。

  • Optionsの"Case Sensitive"は、大文字・小文字を区別するか否かを指定するスイッチです。英語等の 大文字・小文字を持つ言語においてのみ意味を持ちます。デフォルトはONです。
  • 同"Enable Regular Expression"は、入力文字列を正規表現として解釈し、文単位で正規表現マッチング を行うようにするためのスイッチで、デフォルトではOFFです。 正規表現は.NET Framework正規表現に基づいており、Perlやawkで使用される一般的な文法を 使うことができます。(Perl 5の正規表現とほぼ互換性があると考えられます。) 参考リンク:http://msdn.microsoft.com/ja-jp/library/hs600312(VS.80).aspx

条件を入力し終えたら、Commandタブに移り、"Search"ボタンを押して検索を開始します。

037.png

CommandタブのGridに対象コーパスの行が現れ、その行にコーパスの語の総数(Nc, Nd)が表示された後、 Nhitカラムにこの検索に対するヒット数が表示されます。検索結果が取得されるに従い、さらに右の カラムNretが順次更新されるとともにKWICビューも更新されていきます。Nhitと同数の結果が 取得できた時点で検索終了となります。結果取得の途中で"Abort"ボタンを押して強制終了することも可能です。 下に正常に行われた検索の一例を示します。

038.png

  • ChaKi.NETの検索ではどの検索法を使用する場合も、このSearchConditionsタブにおいて 検索条件を作成し、"Search"ボタンによって実行する流れとなります。
  • ChaKi.NETは、タグベースの検索ツールであり、語境界を意識しないこのような検索に 最適化されているとはいえません。Documentが巨大である場合、そのテキストすべてを メモリに読み込んで検索を行うことになり、場合によっては検索に失敗することがあります。 そのような場合はDocumentの分割を再考慮してください。 また、検索処理本体をリモート化してサーバ側で高速検索を行い、結果だけを表示することも 検討中で、サーバ側を一定の規約に基づくWebアプリケーションとして作成しておけば 既にこの方法も利用可能となっています。(規約→要作成)

語属性再取得機能

StringSearchは、語境界が事前にはっきりとわからない場合や、同じ文字列に対する語境界が一意に 割り振られているとは限らないような場合に、まずおおざっぱな検索を行うという一種「あいまい検索」のような 用途で使用することができます。例えば前の「三四郎」の例では、形態素解析において正しく「三四郎」 と解析されている場合と、「三/四/郎」と3語に分けられている場合があったとして、 StringSearch以外の語ベースの検索だけでは後者を発見することは困難を伴います。 このような場合に、語境界を意識しない検索であるStringSearchと、語属性を後から取得する機能である 語属性再取得機能とを組み合わせると効率的な検索が可能です。

StringSearchで結果取得した後、メニューの"View"-"View Attributes" またはツールバーの039.pngを押します。次のような確認メッセージが出ますので、

040.png

"Y"を押すとTagSearchレベルの語構造表示に切り替えることができます。 これを見ると、前述の誤解析部分が含まれていることを容易に知ることができます。

041.png

なお、"View Attributes"コマンドは本来KWICビューの「1行表示」と 属性を含む「2行表示」とを切り替えるものであり、ここでは、 1行表示を属性を含む2行表示へ切り替えようとしたところ、 語属性がKWICデータに含まれていないため語属性再取得機能が 内部的に動作した、というように理解していただければと思います。


  1. *1ここでの「文」は、Mecab/ChaSenベースのコーパスの場合EOSで区切られた部分を指します。Plain Textベースのコーパスの場合についてはまだインポーターの仕様が固まっていませんが、いずれにせよインポートの結果Documentに関連付けられたText内で"\n"によって区切られた文字列を指すことになります。