情報系大学院生のブログ

M1河田。研究の備忘録として論文やプログラムについて書いています。

コーパスの加工(毎日新聞)

今回は自然言語処理の研究で行う

コーパスの処理」

について僕が行った方法などを紹介する。

使ったデータ

研究室で購入している毎日新聞のコーパスを使用した。大体こんなかんじでタイトルや本文ごとにタグが付与されている

\T1\○○山の桜、満開
\T2\ ○月○日、○○山の桜が見ごろを迎える。・・・
\P1\

コーパスでは加工しやすいようにタグ付けや区切り文字を入れている。
これを利用してデータを使える形に加工する。

やり方

今回はT2タグが付いている本文を形態素解析器にかけ、以下の要件を達成する。

(1)形態素を出現頻度の高い順に並び替える
(2)品詞を出現頻度の高い順に並び替える




まずはT2タグが付いている本文を抽出する。

grep “\T2\” <file>

つづいてT2タグを消去する。

sed “s/\T2\//g” <file>

形態素解析器は有名なmecabを使用した。

mecab <file>

mecab形態素解析を行うとこのようになる。

ない 形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
高い 形容詞,自立,*,*,形容詞・アウオ段,基本形,高い,タカイ,タカイ
高い 形容詞,自立,*,*,形容詞・アウオ段,基本形,高い,タカイ,タカイ


形態素と品詞情報はタブで区切られているため(1)を行うにはこのように書くとよい。

cut –f 1 <file> 

(2)を行うには

cut –f 2 <file>|cut –d “,” –f 1

最後に出現頻度順に並び替える処理を行う。ここではsortとuniqを使って並び替えを行うが、ここで「なぜsortを2度行うか」について注意したい。uniqは連続で重複した行のみを削除するため、「うに→いか→うに」のような並びの場合「うに」は別の単語だと判断され削除されない。そのため事前にsortで並び替えておく必要がある。

sort <file>|uniq –c|sortr –n

以上の処理で(1),(2)を達成することが出来た。最後にパイプ処理を行うことですべての作業を1行にまとめることが出来るが、メモリの関係で処理が終わらない可能性大なのであまりおすすめしない。いちおうのっけとく。

(1)grep “\T2\” <file>| sed “s/\T2\//g”|mecab|cut –f 1| sort |uniq –c|sortr -n
(2)grep “\T2\” <file>| sed “s/\T2\//g”|mecab| cut –f 2 <file>|cut –d “,” –f 1| sort |uniq –c|sortr -n

おわりに

今回はUNIXコマンドのみでコーパスを処理したが、もし同様の処理を複数回行う場合、pythonなどで正規表現などを用いて処理した方が早く終わる。しかしUNIXコマンドだと1行で書くことが出来るためコードを書く手間を短縮できる。どちらで処理するかは場合によるだろう。