CUBE SUGAR CONTAINER

技術系のこと書きます。

日本語の文章から文字列を検索するコマンド jpgrep をつくってみた

タイトルの通りなんだけど日本語の文章から文字列を検索するコマンドをつくってみた。 GitHub - momijiame/jpgrep: grep for japanese text

背景

例えば、次のような日本語の文章を格納したテキストファイルがあるとする。 文章には「事」と「事実」という、どちらも "事" という漢字を含んだ単語が含まれている。 この中から「事」という単語が含まれた行だけを取り出したい場合を考えてみよう。

$ cat << EOF > sample.txt
それは事実です
そういう事です
EOF

これを通常の grep コマンドで検索すると、両方の行がヒットしてしまう。

$ grep "事" sample.txt 
それは事実です
そういう事です

そんなときは今回つくった jpgrep の出番になる。 このコマンドは形態素解析の結果にもとづいて文字列を検索する。 上記でいえば「事」と「事実」は別の形態素なので区別できる。

インストール

インストールは pip コマンドで行う。

$ pip install git+https://github.com/momijiame/jpgrep.git

インストールすると jpgrep コマンドが使えるようになる。

$ jpgrep --help
Usage: jpgrep [OPTIONS] QUERY [FILES]...

Options:
  -v, --inverse
  --help         Show this message and exit.

使い方

先ほどのテキストファイルから「事」という単語を含んだ行を検索してみよう。

$ jpgrep "事" sample.txt
sample.txt:そういう事です

ちゃんと「事実」の含まれた行は除外されている。

ファイルまたはディレクトリが指定されない場合には、標準入力から読み込む。

$ cat sample.txt | jpgrep "事実"
それは事実です

一致しないものを探すときは -v (--inverse) オプションをつける。

$ cat sample.txt | jpgrep -v "事実"
そういう事です

そんなかんじ。