« 意味の変化 - 『三省堂国語辞典』のすすめ その58 »

UNIX によるコーパスデータの処理 (5)

2009年 3月 10日 火曜日 筆者: 阪上 辰也

学習者コーパス入門 第21回

今回も、前々回前回に引き続き、「grep」コマンドのオプションを利用した発展的な使い方を紹介します。

紹介している「grep」コマンドは、検索した文字列を含む行を表示させることが主な機能です。これまでに、行数をカウントする「c オプション」と、大文字と小文字を区別せずに検索できる「i オプション」、利用できる正規表現の種類を増やす「E オプション」の3つを紹介してきました。今回は、前回の2つのオプションの復習を交えながら、新たに2つのオプションを紹介します。

まずは、指定した条件に該当”しない”行を出力させる「v オプション」です。つまり、このオプションをつけることで、不要な行を取り除くことができるようになります。ここで、具体例として、NICE の学習者の書いた作文とその添削文だけを抽出するケースを見てましょう。

NICE の各データの冒頭部分には、書いた人に関する個人情報(属性)が含まれています。個人情報を記録した行頭には、それが記録されていることを示すために、「@」がつけられています。これらの個人情報の取り除いて、学習者の書いた作文とその添削文だけを出力させる(正確には、@で始まる行以外を出力させていることになります)には、以下のコマンドを実行することになります。

grep -v “@” *.txt [Enter キーを押す](※)

上記のコマンドを実行すれば、「@」を”含まない”行が出力されるはずです。しかし、このとき、コメント行の「%COM」という行が残っていますので、この行も取り除き、「*JPN」と「%NTV」の行だけが表示されるようにしましょう。この場合は、以下のコマンドを実行します。

grep -v “@” *.txt | grep -v “%COM” [Enter キーを押す](※)

grep コマンドを連続して実行するには、「パイプ」と呼ばれる縦棒の記号「|」を挿入し、続けて新たなコマンドを入力します。始めに入力したコマンドの実行結果が、その後に続くコマンドに引き継がれています。上記のコマンドでは、最初のコマンドで、「@」を含まない行が出力されており(このときは、まだ「%COM」を含む行は出力されています)、その出力結果を利用しながら、次のコマンドにより、「%COM」を含まない行が出力されることになります。結果として、「*JPN」と「%NTV」の行だけが表示されることになります。このように、「v オプション」を利用することで、複数の行を出力させることが可能になります。

今回2つめのコマンドは、「A オプション」です。grep コマンドは、基本的に、1行だけを出力することになりますが、A オプションを利用することで、複数行の出力が可能になります。早速、実例として、以下のコマンドを入力し、実行してください。

grep -A1 “*JPN” *.txt [Enter キーを押す](※)

実行すると、「*JPN」と「%NTV」の行が表示されることになります。「A オプション」とその後に任意の数字を指定することで、指定した行に加えて、指定した数字分の行を出力させることができます。この場合、Aの直後に1を指定していますから、「*JPN」を含む行プラス1行を出力させることになり、結果として、「%NTV」の行も同時に出力されることになります。

今回紹介した2つのオプションにより、結果的には、どちらのオプションでも、学習者の書いた作文(「*JPN」の行)とその添削文(「%NTV」の行)だけを出力させることができました。このことから、同じ結果を出すために、方法が1つに限られるわけではないことが分かります。これまでに紹介した grep コマンドの各種コマンドを振り返り、いろいろなデータ抽出方法を試してみてください。

今回で「grep」コマンドの話を終えて、次回からは、また新たなコマンドを紹介します。


▼お知らせ
2008年10月4日に、学習者コーパス「NICE」の正式版を公開しました。無償で利用可能で、特別な手続きは必要ありませんので、ぜひ研究調査にご利用ください。詳しくは、こちらのサイトをご覧ください。


■筆者プロフィール
阪上辰也(さかうえ・たつや)
名古屋大学大学院 国際開発研究科 特任助教。
専門は、コンピュータを利用した外国語教育。
ウェブサイトは、sakauetatsuya.net


※編集部注
当サイト上ではいわゆる全角の引用符が表示されますが、実際の作業ではいずれもいわゆる半角の引用符を入力します。

2009年 3月 10日