語彙規則(lexical rule)は、語彙素(lexeme)と呼ばれる語彙項目の基本形から新たな語彙項目を生成するための規則です。 例えば、動詞の原形から過去形を、名詞の単数形から複数形を作るといった規則が考えられます。 Enjuにおける語彙規則の種類は、"grammar/types.lil"で定義されています。 また、その実装は"devel/invlexrule.lil", "devel/lexrule.lil"および"devel/lexcommon.lil"で定義されています。 なお、語彙規則の種類および実装はEnjuの文法に特化したものになっています。
Enjuの語彙規則には、通常の語彙素から語彙項目への変換をするものと逆に語彙項目から語彙素への変換をするものの二種類があります。 これは、コーパス指向文法開発の欠点をカバーし、より多くの語彙項目を獲得するための工夫です。 コーパスから得られた語彙項目のほとんどは何らかの統語的変化を起こしているので、文法抽出の際にはまず逆方向の語彙規則を適用して語彙素を獲得します。 最後に、順方向の語彙規則をすべての語彙素に適用して辞書を拡張します。 この方法をとると、順方向の規則のみを用いるよりも多くの語彙素が得られるため語彙項目も多くなります。 また、各規則間には半順序関係が定義されており、この順序に従って一つの語彙項目(語彙素)に複数の語彙規則を重ねて適用することができます。
grammar/types.lil | 語彙規則の種類を列挙しています。各規則はlexrule型のsubtypeになっています。 |
devel/invlexrule.lil | 逆方向の語彙規則と、これを利用して語彙素を獲得するためのmayzのインタフェースreduce_lexical_template/5を実装しています。 |
devel/lexrule.lil | 順方向の語彙規則と、これを利用して語彙素から新たな語彙項目を獲得するためのmayzのインタフェースexpand_lexical_template/5, expand_lexicon/3を実装しています。 |
devel/lexcommon.lil | invlexrule, lexrule両方で使われるインタフェースを実装しています。具体的には、規則の適用順序や述語項構造の書き換え規則、語彙素であるための条件などです。 |
名前 | 動作 | 例 |
---|---|---|
動詞の語彙規則 | ||
singular3rd_verb_rule | 動詞の原形から3人称現在単数形を生成します。 | |
no_singular3rd_verb_rule | 動詞の原形から現在形(3人称単数以外)を生成します。 | |
past_verb_rule | 動詞の原形から過去形を生成します。 | |
prp_verb_rule | 動詞の原形から現在進行形を生成します。 | |
passive_verb_rule | 動詞の原形から過去分詞形(受動態)を生成します。生成された語彙項目は意味上の主語を表すbyで始まる前置詞句をcomplementにとります。 | John must love Mary. -> Mary must be loved by John. |
drop_by_rule | 受動態の動詞のcomplementから意味上の主語を示す前置詞句を取り除きます。 | Mary is loved by John. -> Mary is loved. |
perfect_verb_rule | 動詞の原形から過去分詞形(現在完了形)を生成します。 | |
wh_move_rule | 他動詞の目的語がwh移動した状態の語彙項目を生成します。 | I like apples. -> What do you like? |
attendant_prp_rule | 従属節の動詞が主節の動詞句にかかり、なおかつ主語を共有している場合の語彙項目を生成します。後にでてくるpc_prp_l_ruleとの違いは、係り先が主節全体か動詞句かという点です。 | I failed the exam though trying hard. |
clause_subject_rule | 従属節の動詞が主節の動詞句にかかり、主語を共有していない場合の語彙項目を生成します。実は主節全体が主語になっていますが、文法の制約上記述できないためunknownとなります。 | If you buy something just because it is cheap, it is of poor quality and will break straight away, meaning that you have wasted your money. |
pc_prp_r_sbj_rule | pc_*_ruleは分詞構文を扱うための語彙規則で、従属節中の動詞の語彙項目を生成します。3種類の属性によって、8種類に分類されています。
|
The weather getting worse, the picnic was cancelled. |
pc_prp_r_rule | Walking in the park, I run into Hank. | |
pc_prp_l_sbj_rule | ||
pc_prp_l_rule | I went through my pocket looking for the key. | |
pc_passive_r_sbj_rule | ||
pc_passive_r_rule | Written in plain English, the book is easy to read. | |
pc_passive_l_sbj_rule | ||
pc_passive_l_rule | ||
prp_r_adjunct_rule | 右側の名詞句を修飾する現在分詞を生成します。この名詞句は動詞の意味上の主語になります。 | A man runs. -> a running man |
prp_l_adjunct_rule | 左側の名詞句を修飾する現在分詞を生成します。この名詞句は動詞の意味上の主語になります。 | A man runs in the park. -> a man running in the park |
passive_l_adjunct_rule | 左側の名詞句を修飾する過去分詞を生成します。この名詞句は動詞の意味上の目的語になります。 | He broke the window. -> the window broken by him |
passive_r_adjunct_rule | 右側の名詞句を修飾する過去分詞を生成します。この名詞句は動詞の意味上の目的語になります。 | He broke the window. -> the broken window |
imperative_rule | 命令形を生成します。 | |
yn_question_rule | 疑問文中の助動詞を生成します。 | I can swim. -> Can you swim? |
gerund_rule | 動名詞を生成します。 | |
modal_rule | 助動詞の過去形を生成します。 | |
dative_shift_rule(*) | 与格移動を行います。 | He gave her the book. -> He gave the book to her. |
insertion_rule(*) | 補文をとる動詞において、主語と動詞が補文の中に挟まれた状態の語彙項目を生成します。 | He said, "Hello, how are you?". -> "Hello," he said, "how are you?" |
empty_insertion_rule(*) | 上と似た現象で、補文がまるごと主語と動詞の前に来ている場合の語彙項目を生成します。 | John said, "Hello." -> "Hello", John said. |
inversion_rule(*) | insertion_ruleがかかった状態で主語と動詞の順序を入れ替えます。 | "Hello", John said. -> "Hello", said John. |
particle_move_rule | 動詞の目的語と不変化詞(particle)の順序を入れ替えます。 | He gave up the game. -> He gave it up. |
名詞の語彙規則 | ||
plural_noun_rule | 名詞の単数形から複数形を生成します。 | |
noun_adjective_rule | 右側の名詞を修飾するような名詞を生成します。 | automobile factory |
前置詞の語彙規則 | ||
content_extraction_rule | 前置詞句中の名詞句がwh移動した状態の語彙項目を生成します。 | I stayed at the hotel. -> At which hotel did you stay? |
語彙規則は基本的にすべての単語に同じように適用されますが、(*)を付けた規則については特殊なケースとみなし、コーパス内で規則の適用が観測された動詞にのみ適用されます。