トップ * 研 究 * 講 義 * その他
AWKの備忘録 * Rの備忘録 * 文体調査1 * 文体調査2

タグ付規則の変更

1. 文脈規則(CONTEXTUALRULEFILE.WSJ)の変更

規  則変更内容
(1)VB PDT WDTAG half
(2)VB PDT WDNEXTTAG many DT
文脈規則の先頭に追加。
half_VBとmany_VBという誤タグづけが多い。この誤タグづけが、さらに、to_TOへの誤タグづけを誘発するのを回避する。
(3)TO IN NEXTTAG NN
(4)TO IN NEXTTAG NNS
(5)TO IN NEXTTAG NNP
(6)TO IN NEXTTAG DT
(7)TO IN NEXTTAG JJ
(8)TO IN NEXTTAG VBG
(9)TO IN NEXTTAG VBN
(10)TO IN NEXTTAG PRP$
(11)TO IN NEXTTAG PRP
上の規則の次、もとファイル1行目(NN VB PREVTAG TO)の前に追加します。
名詞、決定辞、形容詞(過去分詞)、代名詞、動名詞など、名詞文脈の前に生じているならば、前置詞タグINを付与します。
これを有効にするには、文脈規則の他に、使用する語彙ファイル(たとえば、LEXICON.BROWN.WSJなど)を開いて、文脈規則で使用するタグを登録しておく必要があります。(18824行目のto TO RBを、to TO IN RBと変更します。)
(12)VBD VBN PREV1OR2WD has
(13)VBD VBN PREV1OR2WD had
(14)VBD VBN PREV1OR2WD having
もとファイル13行目(VBD PREV1OR2WD have)の次に追加します。
完了相のhave, has, had, havingに後続する過去・過去分詞同形をVBDからVBNに変更します。
(15)VBN VBD PREVWD who
(16)VBN VBD PREVWD which
48行目(VBN VBD PREVWD that)の次に追加します。
主格that, who, whichの直後の過去・過去分詞同形を、VBNからVBDに変更します。
(17)VBD VBN PREVWD is
(18)VBD VBN PREVWD was
(19)VBD VBN PREVWD were
61行目(VBD VBN PREV1OR2WD are)の次に追加します。
be動詞変化形の直後に生じている過去形・過去分詞同形のタグを、VBDからVBNに変更します。
22行目(VBD VBN PREV1OR2WD be)、129行目(VBD VBN PREV1OR2WD been)と違って、PREV1OR2WDでは誤タグづけが生じるので、PREVWDを使います。
(20)VB VBN PREVWD has
(21)VB VBN PREVWD had
(22)VB VBN PREVWD having
86行目(VB VBN PREVWD have)の次に追加します。
完了のhave/has/having直後に生じている原形・過去分詞同形をVBNに変更します。have to 構文や使役のhave構文で誤タグ付けが生じないように、PREV1OR2WDではなくて、PREVWDを使用します。
(23)DT RB RBIGRAM No ,
(24)DT UH RBIGRAM No .
(25)DT UH RBIGRAM no ,
284行目の次、もとファイルの最後に追加します。
単独のNo/noをRBに変更します。BIGRAMタグを使うときは、bigramsファイルに当該のbigramを予め登録しておく必要があります。
(26)RB EX WDNEXTTAG there VBP
(27)RB EX WDNEXTTAG there VBZ
(28)RB EX WDNEXTTAG there VBD
284行目の次、もとファイルの最後に追加します。
there + is/are/V のとき、thereに虚辞のEXを付与します。
(29)POS PRP LBIGRAM Let 's
(30)POS PRP LBIGRAM let 's
284行目の次、もとファイルの最後に追加します。
Let's/let'sの'sをPOSからPRPに変更します。bigramファイルに登録する必要があります。
(31)NN VB PREVWD Please
(32)NN VB PREVWD please
284行目の次、もとファイルの最後に追加します。
動詞・名詞同形ならPlease の後は動詞)
(33)NN RB WDPREVTAG VB home
(34)NN RB WDPREVTAG VBZ home
(35)NN RB WDPREVTAG VBD home
(36)NN RB WDPREVTAG VBG home
284行目の次、もとファイルの最後に追加します。
go/come homeなどのhomeにRBタグを付与します。
(37)JJ RB RBIGRAM How long
(38)JJ RB RBIGRAM how long
284行目の次、もとファイルの最後に追加します。
How/how longのlongにRBタグを付与します。bigramファイルに予め登録しておく必要があります。
(39)NNP VBP RBIGRAM Am I
(40)NNP MD RBIGRAM May I
284行目の次、もとファイルの最後に追加します。
Am I/May I〜?の Am/MayをVBP/MDに変えます。bigramファイルに予め登録しておきます。
(41)NNP MD NEXTWD n't
(42)NNP RB WDPREVTAG MD n't
284行目の次、もとファイルの最後に追加します。
Hai n't/Ai n't〜?などで、n't直前の語にMDを、n'tにはRBタグを付与します。
(43)NNP CD PREVWD Chapter
(44)NNP CD PREVWD CHAPTER
(45)NNP CD PREVWD Book
(46)NNP CD PREVWD BOOK
284行目の次、もとファイルの最後に追加します。
Chapter/Bookの後のローマ数字を、NNPからCDに変更します。


2. 文脈規則(CONTEXTUALRULEFILE.WSJ)の変更の効果

 上で追加した文脈規則がどれほどの効果があるのかを調べてみます。具体的には、誤タグ付けの可能性のある文脈を検索して数え上げ、その数が多いほど効果ありと見なすことにします。(実際の効果は、規則相互の関係や、適用順序などが複雑に絡み合っていているでしょうから、ここでは数値化によって比較ができることを念頭において、単純化して作業しています。)

 この検索作業では、自作の検索ソフトKwicker1.0を使いました。検索対象は、GoTaggerのデフォルトの状態で(規則ファイル群に変更を一切加えない状態で)品詞タグ付けを行った89ファイルです。下の表は、誤タグづけが生じる文脈を正規表現で検索し、ヒットした総件数を示しています。この数値を比較することによって、文脈規則変更の効果を大まかに比較することができます。

規 則検索文字列ヒット数
(1)VB PDT WDCURRTAG halfhalf_VB_half125
(2)VB PDT WDNEXTTAG many DTmany_VB_many an?_DT_an?216
(3)TO IN NEXTTAG NNto_TO_to [^ ]+_NN_6,210
(4)TO IN NEXTTAG NNSto_TO_to [^ ]+_NNS_1,406
(5)TO IN NEXTTAG NNPto_TO_to [^ ]+_NNP_10,471
(6)TO IN NEXTTAG DTto_TO_to [^ ]+_DT_35,117
(7)TO IN NEXTTAG JJto_TO_to [^ ]+_JJ_2,144
(8)TO IN NEXTTAG VBGto_TO_to [^ ]+_VBG_1,165
(9)TO IN NEXTTAG VBNto_TO_to [^ ]+_VBN_73
(10)TO IN NEXTTAG PRP$to_TO_to [^ ]+_PRP\$_14,932
(11)TO IN NEXTTAG PRPto_TO_to [^ ]+_PRP_21,726
(12)VBD VBN PREV1OR2WD hashas_VBZ_have( [^ ]+_[^ ]+_[^ ]+)? [^ ]+_VBD_313
(13)VBD VBN PREV1OR2WD hadhad_VBD_have( [^ ]+_[^ ]+_[^ ]+)? [^ ]+_VBD_2,332
(14)VBD VBN PREV1OR2WD havinghaving_VBG_have( [^ ]+_[^ ]+_[^ ]+)? [^ ]+_VBD_200
(cf)VBD VBN PREV1OR2WD have
86行目のタグづけもれ
文脈規則の最後に追加してもよい
have_VB.?_have( [^ ]+_[^ ]+_[^ ]+)? [^ ]+_VBD_1,044
(15)VBN VBD PREVWD whowho_W(P|DT)_who [^ ]+_VBN_48
(16)VBN VBD PREVWD whichwhich_W(P|DT)_which [^ ]+_VBN_141
(17)VBD VBN PREVWD isis_VBZ_be [^ ]+_VBD_152
(18)VBD VBN PREVWD waswas_VBD_be [^ ]+_VBD_386
(19)VBD VBN PREVWD werewere_VBD_be [^ ]+_VBD_89
(20)VB VBN PREVWD hashas_VBZ_have [^ ]+_VB_3
(21)VB VBN PREVWD hadhad_VBD_have [^ ]+_VB_41
(22)VB VBN PREVWD havinghaving_VBD_have [^ ]+_VB_108
(cf)VB VBN PREVWD havehave_VB.?_have [^ ]+_VB_297
(23)DT UH RBIGRAM No ,No_DT_no ,_2,799
(24)DT UH RBIGRAM No .No_DT_no \._799
(25)DT UH RBIGRAM no ,no_DT_no ,_1,044
(26)RB EX WDNEXTTAG there VBPthere_RB_there [^ ]+_VBP_36
(27)RB EX WDNEXTTAG there VBZthere_RB_there [^ ]+_VBZ_102
(28)RB EX WDNEXTTAG there VBDthere_RB_there [^ ]+_VBD_406
(29)POS PRP LBIGRAM Let 'sLet_VB.?_let 's_POS135
(30)POS PRP LBIGRAM let 'slet_VB.?_let 's_POS94
(31)NN VB PREVWD PleasePlease_VB_please [^ ]+_NN41
(32)NN VB PREVWD pleaseplease_VB_please [^ ]+_NN51
(33)NN RB WDPREVTAG VB home_VB_[^ ]+ home_NN_554
(34)NN RB WDPREVTAG VBZ home_VBZ_[^ ]+ home_NN_46
(35)NN RB WDPREVTAG VBD home_VBD_[^ ]+ home_NN_576
(36)NN RB WDPREVTAG VBG home_VBG_[^ ]+ home_NN_310
(cf)NN RB WDPREVTAG VB east
(cf)NN RB WDPREVTAG VBZ east
(cf)NN RB WDPREVTAG VBD east
(cf)NN RB WDPREVTAG VBG east
[^ ]+_VB[ZDG]?_[^ ]+ east_NN_6
殆ど効果ありません。
(37)JJ RB LBIGRAM How longHow_WRB_how long_JJ_152
(38)JJ RB LBIGRAM how longHow_WRB_how long_JJ_233
(39)NNP VBP NEXTTAG Am PRPAm_NNP_be I_PRP_i179
(40)NNP MD NEXTTAG May PRPMay_NNP_may I_PRP_i192
(41)NNP MD NEXTWD n't_NNP_[^ ]+ n't_NNP_n't78
(42)NNP RB WDPREVTAG MD n'tn't_NNP_n't78
(43)NNP CD PREVWD ChapterChapter_NNP_chapter [^ ]+_NNP_174
(44)NNP CD PREVWD CHAPTERCHAPTER_NNP_chapter [^ ]+_NNP_1,075
(45)NNP CD PREVWD BookBook_NNP_book [^ ]+_NNP_11
(46)NNP CD PREVWD BOOKBOOK_NNP_book [^ ]+_NNP_50
(47)POS " LBIGRAM . '\._\._\. '_POS_'23,783
(48)POS " LBIGRAM , ',_,_, '_POS_'25,315

3. AWKによるタグ変更

 強力で、自在な文脈規則をうまく使うと、大小さまざまなタグ付け(変更)規則を指定することができます。

 ただし、いくつかのタグ変更に関しては、文脈規則で扱うのは面倒だったり、ムリがありそうです。たとえば、語の分割の仕方を変えたり、2つの語のタグの両方共を変更する場合です。これらに対処する方法はいくつかありそうですが、以下では、AWKを使って、タグ付けの変更をおこなってみます。

対象変更前変更後適用数
'Tis'_POS_' Tis_NNP_tis'T_PRP_it is_VBZ_be187
'Twas'_POS_' Twas_NNP_twas'T_PRP_it was_VBD_be59
'twixst'twixst_NN_'twixst'twixst_IN_'twixst2
ローマ数字[IVX]+_NNP_[IVX]+_CD_1,549