日羅翻訳支援システムと 日羅翻訳システム論 国際文化学部国際文化学科、山本昌弘ゼミ 4 年 学籍番号 04G0302 秋山 孝之 2008 年 1 月 29 日 目 次 0 はじめに ・・・4 1 機械翻訳について ・・・6 1.1 機械翻訳の流れ 1.1.1 形態素解析、形態素生成 1.1.2 構文解析、構文生成 1.2 翻訳システムの種類 1.2.1 中間言語方式 1.2.2 トランスファ方式 1.2.3 翻訳メモリ方式 2 ラテン語の基礎 ・・・16 2.1 ラテン語の名詞 2.1.1 性の区別 2.1.2 格変化と単複の変化 2.1.3 変化パターン 2.1.4 翻訳システムにおけるラテン語名詞のあり方 2.2 ラテン語の動詞 2.2.1 主語に依存した変化、及び活用形 2.2.2 過去形、及び未来形 2.2.3 その他の変化 2.3 ラテン語の文法 3 日本語とラテン語の摺り合わせ 名詞 3.1.1 3.1.2 3.1.3 3.2 動詞 3.3 文法 ・・・26 3.1 4 主格 客語 連体格、及び連用格 形態素解析システム Sen ・・・36 2 4.1 4.2 4.3 5 Sen とは Sen による日本語形態素解析 Java プログラムからの Sen の活用 日羅翻訳支援システム ・・・41 5.1 5.2 5.3 システムの趣旨 システムの使用環境、及び構成 システムの機能 5.3.1 主語を判断する機能 5.3.2 対格を判断する機能 5.3.3 属格を判断する機能 5.3.4 与格を判断する機能 5.3.5 奪格を判断する機能 5.3.6 動詞を判断する機能 5.4 システムの流れ 5.4.1 インターフェース 5.4.2 主語を判断するメソッド 5.4.3 対格、属格、与格、奪格を判断するメソッド 5.4.4 動詞を判断するメソッド 5.5 使用の際の注意点 6 問題点と課題 ・・・57 7 終わりに ・・・58 8 参考文献 ・・・60 3 0 はじめに 卒業制作を決定するにあたり、私が前提としていた基準は以下の四つである。 ・ 自分の実力で製作できるものかどうか ・ 自分にとって必要なものかどうか ・ 社会的な価値があるものかどうか ・ 独創性があるものかどうか 卒業制作を決定する頃、苦労していたことがあった。それは、毎週課される 「ラテン語」の講義の課題だった。どうにもこうにも時間がかかって仕方が ない。 「ラテン語なんて、どうせ英語や、既に単位を取ったフランス語と似て いるのだろう。どちらもインド・ヨーロッパ語族の言語だし。 」とたかをくく って受講してみたのが甘かった。英語やフランス語の講義のときは、Web 上に 無料の翻訳ソフトがあって、それを利用して課題や予習復習をしていたのだ が、探してみてもラテン語には無料の翻訳ソフトが見当たらない。結局、学 期を通して課題は全て手作業で行った。 (余談だが、成績は 優 であった。 ) しかし、かの詩人ゲーテをして曰く、 「若者は、年寄りがした苦労と全く同じ 苦労をする必要はない。 」後世の学徒が私と同じ作業を繰り返すのはどうにも 忍びない、むしろもっと上の段階で苦労をするべきである、と私は考えた。 しかし、完全な日羅相互翻訳システムの製作はどうも私の手に余りそうなの で、 「日羅翻訳支援システム」とその基礎となる「日羅翻訳システム論」を製 作することを思い立った。 「日羅翻訳支援システム」と「日羅翻訳システム論」ならば、私のプログラ ミング能力と言語学の知識を駆使すれば、どうにかなりそうだ。 (実際は更な る修練と勉強が必要だったが)そして、既に単位は取ったとはいえ、当時は 確かにそれらが必要だった。また、今では古語という扱いだが、西洋の古い 貴重書にはラテン語表記のものも多く、医学や生物学の分野では未だにラテ ン語が使われている、という点では社会的な価値も充分にあると言える。そ して、散々探しても日羅翻訳を自動で行ってくれるソフトウェアは存在しな かった。これらを踏まえた上で、 「日羅翻訳支援システム」と「日羅翻訳シス テム論」は上記の四つの条件を踏まえていると判断し、その製作を行った。 本論文は 1「機械翻訳について」、2「ラテン語の基礎」、3「日本語とラテ 4 ン語の摺り合わせ」の三項を「日羅翻訳システム論」に位置づけ、4「形態 素解析エンジン Sen」、5「日羅翻訳支援システム」の二項で実際に製作した ソフトウェアの紹介及び説明を行うものとする。 5 1 機械翻訳について 本システムは日本語をラテン語に翻訳する手引きとなるような構文解析、形 態素解析、及び形態素生成、構文生成を行う。かといって、機械翻訳の流れ というのは必ずしもこの方法のみに限定されるわけではない。例えば、日本 語と韓国語を相互翻訳する場合、構文解析と構文生成の作業は必要なくなる。 日本文「りんごは赤い」の文章を韓国文に翻訳する場合、語順はそのままに 「りんご」 、「は」 、「赤い」の単語をそのまま韓国語に置き換えれば韓国文の 出来上がりである。大切なのは、翻訳される前の言語「起点言語」と、翻訳 された後の言語「目標言語」にそれぞれどのような特徴があるのかを捉え、 それに合った形態素生成、構文生成の方法を適用することである。言語ごと の特徴は 2「ラテン語の基本」及び3「日本語とラテン語の摺り合わせ」で述 べるとして、本項では私が選んだ翻訳方法とその意義について述べる。 1.1 機械翻訳の流れ まずは下の図 1-1 を参照していただきたい。 図 1-1 6 このピラミッド状のツリーの、一番左下の「起点言語」が、これから翻訳し ようとしている文章にあたる。これを右下の「目標言語」にすることで翻訳 が完成する。見ていただくと分かるとおり、起点言語から目標言語に至るル ートは様々で、どのルートを選ぶかは翻訳者の自由である。このピラミッド 自体には特に名称は無いが、翻訳機に頼らない翻訳においても、基本的には この方法で行われている。上智大学で翻訳の理論と実践の研究と講義を行っ ている広田紀子教授は、その著書において、翻訳の流れを以下のように捉え ている。 「原文を読み、テーマと文章の用語を読み取る。原文の記事の背景と文章の 特徴を理解するため読者として理解しにくい点を詳しく調べる。内容が理解 できた上で、原文の形に合う訳語を選択して、原文を換えないでよい部分、 換えなければならない部分を見極める。 」(『翻訳論-言葉は国境を越える-』26 頁) 「原文を読み、テーマと文章の用語を読み取る。原文の記事の背景と文章の 特徴を理解するため読者として理解しにくい点を詳しく調べる。 」とは、ピラ ミッドの左側面の、形態素解析、構文解析、意味解析、すなわち解析の作業 に他ならない。それに対し、 「原文の形に合う訳語を選択して、原文を換えな いでよい部分、換えなければならない部分を見極める。」とは、ピラミッドの 右側面の、意味生成、構文生成、形態素生成、すなわち生成の作業にあたる。 1.1.1 形態素解析、形態素生成 翻訳機による翻訳作業は、まずは起点言語の文章に「形態素解析」を行うこ とから始まる。形態素とは、単語よりも小さい最小の意味単位のことを指す。 「拍または音節が、単独でまたは二つ以上結合して、意義(一般には意味と 呼ぶ)を担う形となる、それが形態素である。」( 『日本語概説』71 頁) 7 例えば、「ペン」は二音節二拍で、字を書く道具を指す。このように、発音 と意味が備わった最小の文字列のことを形態素と呼ぶ。先ほど、 「単語よりも 小さい」と述べたが、日本語においては、単語がそのまま発音と意味が備わ った最小の単位であるため、日本語の形態素解析とは単語に分割することで あると理解して欲しい。一方で、単語が語幹と接辞に分けられる言語、代表 的なものではインド・ヨーロッパ語族の言語全般、では 1 つの単語が複数の 形態素に分割される。参考までに英単語「unhappily」を形態素に分割すると 以下の通りである。 Unhappily = un + happi + ly 形態素ごとに区切り、それぞれの形態素に品詞の情報を加えることを形態素 解析という。逆に、与えられた形態素を結合させ単語の形にすることを形態 素生成と呼ぶ。 1.1.2 構文解析、構文生成 構文解析とは、形態素列から、形態素が文の中でどのような役割を持ってい るか判断することである。図 1-2 は日本語の文章を構文解析し、構文木を得 た例である。 図 1-2 8 形態素解析から得られた品詞情報を元にして、その構文的役割を導き出すの が構文解析の役割である。こうすることで、誰が(主語 S)何をした(動詞及 び述語 V)という文の主題が理解できるようになる。これは文の意味を理解 する上で役立つ。逆に、文法のルールに従って構築された構文木の、末節の 部分に形態素を当てはめていくことを構文生成と呼ぶ。 1.2 翻訳システムの種類 現存する翻訳システムは大別すると主に三つに分類される。中間言語方式と トランスファ方式と翻訳メモリ方式である。これらの中から、起点言語と目 標言語が何であるか、プログラムチームの技術力などを参考にして一つが選 ばれる。今回、私はトランスファ方式を選択した。本項では全方式の概要を 述べるとともに、日羅翻訳支援システムにおいてはトランスファ方式を用い るのが有効であると判断した理由についても言及する。 1.2.1 中間言語方式 次頁の図 1-3 の赤い矢印で表したルートが中間言語方式と呼ばれる翻訳シ ステムである。 9 図 1-3 ソシュールは言語には2つの枠組みがあるとした。一つは 日本語 や ラ テン語 、 英語 といった「個別言語」、すなわち「ラング」 (仏 langue)で あり、単語や文法などを包括した言語そのものを指す。もう一つは、そのラ ングを用いてなされた「発話のまとまり」 、すなわち「パロール」 (仏 parole) である。翻訳は本来、パロールを対象としたものである。姫路工業大学の平 子義雄教授は、ラングとパロール、そして翻訳の対象について以下のように 述べている。 「翻訳の対象は静的(スタティック)なものではなく、動的(ダイナミック) なものである。ラングは一つの体系、いわば公共の財産目録として静的・潜 在的なもの、一つの制度、一つのイデオロギーである。他方パロールは、そ の体系を実際に用いてなされる個人的な顕在化の行為(いわば実存表現)と して、そのつど一回だけ成立する動的なものだ。<ここは人が通る>と言う とき、その言葉の意味は、 「ここは」 「人が」 「通る」などの、辞書に載ってい る語義の静的な組み合わせなのではない。それは「だから安心だ」という意 味で翻訳すべきものかもしれないし、あるいは「だからいやなのだ」という 意味なのかもしれない。意味はその場限りで一回的に成り立つ、動的なもの なのである。」( 『翻訳の原理-異文化をどう訳すか-』14 頁) 10 また、平子教授は、比較言語学や対照言語学といった大仰なものは翻訳に対 して大きな比重を占めるものではないとも述べている。 「比較言語学はラングそのものの研究であり、翻訳論と重なることはほとん どない。 (中略)確かに対照言語学の視点、言語文化まるごとの対照研究とい う視点は、翻訳にとって大いに参考になる。しかし翻訳論はラングの研究(個 別言語学や対照言語学)ではない。」 (『翻訳の原理-異文化をどう訳すか-』22 頁) それに対して「中間言語方式」というのは、起点言語、目標言語の各ラング を比較し、言語超越的な「中間言語」を作成することから始まる。起点言語 の持つ「意味」と目標言語の持つ「意味」の全く重なるものを人工的に言語 (ラング)としたのが中間言語である。起点言語のテクストが伝えたいメッ セージ(意味)を目標言語に正しく伝えることができるのが中間言語方式の 大きな利点である。つまり、意味内容の等価性を保持する、意訳のレベルの 翻訳が可能になる。一方、後述のトランスファ方式はこの「意味」の伝達を 行わないため、往々にして「何を言いたいのかよく分からない」テクストが 出来上がる。谷崎潤一郎曰く、「翻訳調の化け物」、である。 この方式は、 「言語道具説」という言語観の上に成り立っている。すなわち、 「宇宙とは普遍的な構造であり、それを認識する人間の精神も普遍的構造を 持つ、という宇宙観が前提にある。それによれば、人間みなが同じものを見 ているのであり、ただラングごとに表示(言い方)が異なるだけである。宇 宙の存在物が名詞で、その特性が形容詞で、また宇宙の過程が動詞で、それ ぞれ表される。 」 (『翻訳の原理-異文化をどう訳すか-』45 頁)という観点であ る。確かに、全ての単語が普遍的な意味を持つのならば、同一の意味を持っ た中間言語を作ることは容易い。 しかし実際は、どんな起点言語、目標言語に対しても中間言語方式を採用で きるかと言うと、そうではない。実務的な翻訳には重要では無いとされる比 較言語学や対照言語学についての知識が必要となる上、二つの言語の性質が 近似しているか否かが関わってくる。例えば、英語の「paper」を英和辞典で 引いてみると、 「紙、新聞(紙) 、手形、紙幣、身分証明書、書類、論文、(学 11 生の)学期末レポート、 試験問題、答案、一包み、壁紙」( 『EXCEED 英和 辞典』)と、名詞に限定してもこれだけの数の意味がある。英語の「paper」 と全くイコールになるただ一つの日本語というものは存在しないのである。 中間言語を作るということは、 「紙」を意味する paper、例えば paperα、 「新 聞」を意味する paper、例えば paperβ、といったように意味の摺り合わせを 行った上で、新しい言語(ラング)を作るということに他ならない。 中間言語方式は、同一語族、すなわち言語学の歴史上、同一の祖語から派生、 発達したとされる言語同士には非常に有効であろう。しかし、言語学上、日 本語は同一祖語を持つ他の言語が存在しない孤立言語に分類されるため、比 較的容易に日本語との中間言語を作成できると思われるのは、文法や単語が よく似ている中国語と韓国語くらいである。 後のラテン語の項も参考にしていただきたいが、私が中間言語方式を採択し なかった理由は三つあり、一つはラテン語と日本語の意味的な共通点が多く ないという点、一つはそれら二言語間で単語の数が大きくかけ離れていると いう点、そして私の言語学の知識量とプログラムの技術力が共に充分ではな いという点にある。 1.2.2 トランスファ方式 ことあるごとに「人が作るの翻訳文には到底及ばない」と揶揄されるのがこ のトランスファ方式の翻訳システムである。それは当然といえば当然であり、 人の行う翻訳作業においては、翻訳システムを通した結果(もしくは手ずか ら翻訳した結果)を「下訳文」と呼び、これはあくまでも翻訳を確実なもの にする基礎の部分であるからだ。機械翻訳が行うのはここまでの作業で、人 が行う場合はここからさらに、原文を照らし合わせて原文から離れないよう に下訳文を推敲し、場合によっては第三者によるチェック、編集が入る。 1.1「機械翻訳の流れ」で述べた、翻訳作業の最初の部分が以下の図の通り である。図は『翻訳論-言葉は国境を越える-』(広田紀子著)を参考にした。 Web 上に存在する無料の翻訳ソフトウェアではおよそ以下の手順までである。 12 図 1-4 そして推敲が入って整形されて翻訳文が出来上がる。有料の翻訳ソフトウェ アが謳う「プロの翻訳家と同レベル」となるとここまでであろう。このレベ ルならば読者が読んでも違和感を持たなくなる。 図 1-5 本システムでは下訳文レベルの形態素列を作ることが目的としており、私の 言語学の知識量とプログラムの技術力を加味した上で、トランスファ方式を 採択した。次頁の図 1-6 の赤い矢印で表したルートがトランスファ方式と呼 ばれる翻訳システムである。 13 図 1-6 どの段階で起点言語側から目標言語側に移るか、ピラミッド内の右向きの矢 印、は起点言語と目標言語がそれぞれ何であるかによって決まってくる。例 えば、最底辺の起点言語から目標言語へ直接置き換える場合、これは分かり にくい日本語の文章を分かりやすい日本語の文章に正す「推敲」に他ならな い。二段目の形態素列を介したルートをとる場合、これは似た構文を持つ言 語同士の翻訳に有効である。具体的には日本語と中国語、韓国語、または同 語族同士の翻訳のことを指す。三段目の構文木を介するルート、今回日羅翻 訳を行う上で採択したルート、これは異なる構文構造を持つ言語間での翻訳 に有効である。 トランスファ方式は、中間言語方式とは違い、「言語世界観説」という言語 観の上に立っている。言語世界観説とは、ラングはそれが成立した文化の影 響を受けるため、文化が異なればラング(すなわち文法や単語)に変化が現 れるのは当然であるとする言語観である。ただし、翻訳システムが言語の背 景にある文化を理解して、それに合わせて翻訳文を作ってくれる、というわ けではない。全くその逆である。二言語間の意味の完全なる等価変換は不可 能であるため、そもそもそれをしない(もしくは できない )という立場で ある。いずれにせよ、文法構造を形骸化し、単語は品詞情報のみを管理する ことで翻訳文を作成することができるのがトランスファ方式の強みである。 三つの翻訳方式の中では最も単純なこのトランスファ方式が私の技術力には 14 合っていると判断し、その強みを活かすことにした。 1.2.3 翻訳メモリ方式 実例型翻訳方式とも呼ばれ、前述の二つの方式に比べて、言語学的見地から は乖離した方式とも言えるだろう。大量の翻訳事例を格納した翻訳メモリを 用意し、入力文との類似度から最も類似しているとされる翻訳事例を雛形に して訳文を作る。単独でこの方式が使われることもあるが、前述の中間言語 方式、トランスファ方式と併用することも可能である。以下に具体例を示す。 格納されている用例 : Sports is good for you. : X is good for you. ⇒ 運動は身体に良い ⇒ X は身体に良い 入力文 : Vegetable is good for you ↓ X : Vegetable ⇒ 野菜 ↓ 出力文 : 野菜は身体に良い 実装した翻訳メモリのデータ量に応じて、その精度は変化する。かつてはプ ロの翻訳家が実例を登録するという手法が主であったが、近年はネットワー ク介して、ユーザーが行った翻訳事例をサーバーに蓄積するといった方法も とられている。本システムを作成するにあたり、特殊な用法や慣用句につい てのみ別途翻訳メモリを実装することも考えたが、今回は見送った。 15 2 ラテン語の基本 ここでは、単純な機械翻訳を行う上で知っておきたいラテン語の文法につい て述べる。本システムは比較的単純な単文からなる日本語文章を対象として いるため、それに相応するレベルのラテン語文法を読者諸兄に紹介する。ま た、本システムでは羅日辞書は用意していない。そのため、ユーザーが辞書 を作成する上で、あるいは既存の辞書を本システムに合わせて変更する上で、 ラテン語とその日本語の意味をどのような形で整理するか、各自判断してい ただくと共に、私が考える最適な方法もお勧めしておくとする。 2.1 ラテン語の名詞 ラテン語辞書で名詞の項目を作成する上で留意する点は三つ。一つはイン ド・ヨーロッパ語族にはよく見られる、 「性」の区別。一つは六種類の格変化。 一つは単数か複数かの区別である。 2.1.1 性の区別 名詞に性の区別がある、ということは日本人にはいまいち馴染みが無いこと と思う。一方でインド・ヨーロッパ語族の諸言語においてはよく見られる。 その成立には諸説あるが、生物の雌雄を区別することが重要であった古代ヨ ーロッパの文化的背景が関わっているらしいが、なぜ雌雄の区別が重要であ ったのかということ自体にもまた諸説ある。そういった背景があったために、 全ての名詞、無生物に対しても性の区別をせざるを得なくなったということ なのであろう。しかし、例えば「テーブル」がドイツでは男性名詞なのに対 して、オランダでは女性名詞になり、英語にいたってはそもそも性の区別が 無い、というような点を踏まえると性の区別というものは現代においては非 論理的であるという見方が強い。京都大学名誉教授、渡辺実氏は次のように 論じている。 「性が名詞につきまとい、それが名詞を修飾する形容詞の語形変化を規定す る、といった所にまで及ぶのは、やはり無駄なことと言う他はない。数や性、 16 とりわけ性は、無用のものとして消え去って当然であり、現に英語では、全 くと言ってよいほど名詞の性の区別を捨て去る所に来ているのなど、勢いの おもむく方向を示しているものと言ってよいであろう。」 (『日本語概説』163 頁) ただ、形容詞が係る名詞の性に対して変化すること、このことが韻を踏んだ 文章を作ることに適しているということから、名詞、ひいては形容詞の性の 区別が支持されていることも無視できない。 2.1.2 格変化と単複の変化 単語の変化形の多さが特徴のひとつに上げられるインド・ヨーロッパ語族の 源流に程近いラテン語もまた、その特徴を有している。六種類の格変化とは 具体的には主格、呼格、属格、与格、対格、奪格のことを指す。それぞれの 格の意味を次の通りである。 主格:主語または述語になる場合の変化形 例)Puella cantat. 少女は歌っている Puella sum. 少女がいる (puella は「少女」の主格) 呼格:呼びかけ 例)O nautae! 船乗りたちよ! (nautae は「船乗り」の呼格変化) 属格:所属、所有を表す変化形 例)filia poetae 詩人の娘 (poetae は「詩人」の属格変化) 与格:間接目的語 例)puellae 少女に 対格;直接目的語 例)Poeta puellae rosas donat. 詩人は少女にバラを贈る(rosas は「バラ」 17 の対格変化) 属格:名詞の副詞的用法 例)Puella pila ludit. 少女はボールで遊んでいる(pila は「ボール」の奪格 変化) また、単語を複数形にする場合、ご存知の通り英語であれば s をそのまま つけるか、es にするか、といったルールが存在している。ラテン語の場合は、 前述したそれぞれの格変化に対して、単数形と複数形が存在する。一つの名 詞につき、六種類の格変化と単複の変化があるため、計十二個の変化形を持 つことになる。一つの名詞が持つ変化形の数を表 2-1 に示す。ラテン語の変 化形の多さを理解していただけるだろう。 表 2-1 数による変化 格変化 ラテン語 2 6 ギリシャ語 3 4 ドイツ語 2 4 オランダ語 2 2 フランス語 2 1 英語 2 2 日本語 1 1 また、次頁の表 2-2 は例として fabula「物語」 (男性名詞)の変化形を表し たものである。 18 表 2-2 単 数 複 数 主 格 fabula fabulae 呼 格 fabula fabulae 属 格 fabulae fabularum 与 格 fabulae fabulis 対 格 fabulam fabulas 奪 格 fabula fabulis 2.1.3 変化パターン 前頁の fabula は第1変化名詞に分類され、前頁の表は第一変化名詞に共通 する変化パターンである。この第○変化名詞という分類は、主格の語尾(接 辞)の形によって第 5 変化名詞まで存在し、それぞれの変化パターンは異な っている。 表 2-3 第 2 変化名詞、dominus(主人)の変化形 単 数 複 数 主 格 dominus domini 呼 格 domine domini 属 格 domini dominorum 与 格 domino dominis 対 格 dominum dominos 奪 格 domino dominis 19 表 2-4 第 3 変化名詞、flumen(川)の変化形 単 数 複 数 主 格 flumen flumina 呼 格 flumen flumina 属 格 fluminis fluminum 与 格 flumini fluminibus 対 格 flumen flumina 奪 格 flumine fluminibus 表 2-5 第4変化名詞、manus(手)の変化形 単 数 複 数 主 格 manus manus 呼 格 manus manus 属 格 manus manuum 与 格 manui minibus 対 格 manum manus 奪 格 manu manibus 20 表 2-6 第5変化名詞、res(物、事)の変化形 単 数 複 数 主 格 res res 呼 格 res res 属 格 rei rerum 与 格 rei rebus 対 格 rem res 奪 格 re rebus 2.1.4 翻訳システムにおけるラテン語名詞のあり方 これまで見ていただいたとおり、それぞれのパターンにおいて一つの名詞は 様々なルールで変化している。加えて、例外的な変化パターンも含めると十 を超えるパターンが存在する。名詞によってどの変化パターンが適用される かは主格の接辞に注目すれば分かるため、普通の日羅辞書では主格のみを表 記している。しかし、接辞は変化パターンによって異なるため、ルール化は 難しい。辞書を作る際には、一つの単語でも変化形はそれぞれ別の項目を作 って格納するべきである。 2.2 ラテン語の動詞 動詞の変化形の多さは名詞のそれ以上である。変化の仕方も様々で、ルール を一本化させるのは難しい。辞書を作る上では大いに泣かされるであろう部 分の一つである。本システムでは単純な日本語の文章を対象としているため、 現在形、過去形、未来形の三種類の変化形だけは最低限把握しておく必要が ある。以下に述べた内容から各自の判断を仰ぎたいが、名詞と同様に変化形、 活用形共に様々であるため、辞書を作る際には、それぞれの変化形ごとに項 目を作るべきである。 21 2.2.1 主語に依存した変化、及び活用形 例によって英語を引き合いに出すが、be 動詞の変化の仕方を思い出して欲しい。 一人称単数系の主語から始まり、三人称複数系の主語にいたるまで、be 動詞は 様々な変化を見せた。ラテン語の場合は、全ての動詞が主語に応じてそのような 六つの変化形を持つ。さらに一人称単数現在形の形によって、五つの活用形を持 つ。下表を参考にして各自判断してもらいたいところだが、活用のルールをプロ グラム化するよりも、全ての変化形を一つ一つ辞書に登録した方が翻訳システム 上では使い勝手がいいだろう。 表 2-7 単 数 複 数 単 数 複 数 1 2 3 4 5 6 1 2 3 4 5 6 第 1 活用 amo amas amat amamus amatis amant 第 2 活用 moneo mones monet monemus monetis monent 第 3 活用変則型 第 4 活用 capio capis capit capimus capitis capiunt audio audis audit audimus auditis audiunt 第 3 活用 rego regis regit regimus regitis regunt 22 2.2.2 過去形、及び未来形 ラテン語文法における過去形には二種類あり、それぞれ別の変化形を持つ。 一つは、過去の行為の継続、反復、習慣、試み、開始などを表し、また情況 を描写する未完了過去。もう一つは過去における一回的な行為をあらわす、 完了。本システムでは 過去形 で一本化する。未完了過去か、完了かは変 換する再にユーザーに文脈から判断してもらう。また、未来の出来事を表す 文章を作る際、日本語、英語は助動詞を使うことで表すが、ラテン語は動詞 の未来形が存在する。 完了形、未来形、いずれも 2.2.1「主語に依存した変化、及び活用形」の変 化の仕方を引き継いで様々な変化をするため、一本化したルールは存在しな い。 表 2-8 未完了過去の変化例 カッコ内の数字は活用形 単 数 複 数 1 2 3 4 5 6 amo(1) amabam amabas amabat amabamus amabatis amabant moneo(2) monebam monebas monebat monebamus monebatis monebant rego(3) regebam regebas regebat regebamus regebatis regebant audio(4) audiebam audiebas audiebat audiebamus audiebatis audiebant 23 表 2-9 完了の変化例 カッコ内の数字は活用形 単 数 複 数 1 2 3 4 5 6 amo(1) moneo(2) rego(3) audio(4) amavi amavisti amavit amavimus amavistis amaverunt monui monuisti monuit monuimus monuistis monuerunt rexi rexisti rexit reximus rexistis rexerunt audivi audivisti audivit audivimus audivistis audiverunt 表 2-10 未来形の変化例 カッコ内の数字は活用形 単 数 複 数 1 2 3 4 5 6 amo(1) amabo amabis amabit amabimus amabitis amabunt moneo(2) monebo monebis monebit monebimus monebitis monebunt rego(3) regam reges reget regemus regetis regent audio(4) audiam audies audiet audiemus audietis audient 2.2.3 その他の変化 ここで説明する動詞の変化形は本システムでは実装していないが、ラテン語 文法の動詞に対する理解を深める上では必要である。 24 命令形の文章を作るためには、命令法と呼ばれる変化形の動詞が用いられる。 命令法能動相、命令法受動相の二種類が存在し、いずれも主語と活用形の影 響を受けて六種類の変化と五つの変化パターンが存在する。 受動文に用いられる動詞の変化は三つあり、受動相現在、受動相未完了過去、 受動相未来がある。いずれも主語と活用形の影響を受けて六種類の変化と五 つの変化パターンが存在する。 不定法には能動相と受動相、それぞれ過去、現在、未来があり、計六種類の 変化形がある。これはフランス語文法のそれに近いと言えよう。一方、動名 詞は現在形の語尾に-ndi をつけるだけなので、多くの変化形を持つラテン語 動詞においては唯一ルール化がしやすい。 2.3 ラテン語の文法 ラテン語の語順は主語が最初、動詞が最後というルールが一般的であるが、 実のところは一番伝えたいものを最初に、次に伝えたいものを最後にすると いうのが本来的なルールである。 語順の可変性が乏し いと言われている英 語の第四文型を思い起こして欲しい。主語(S) 、動詞(V) 、間接目的語(O1)、 直接目的語(O2)といったように、前置詞が無い場合は複数ある目的語の位 置は決まってくる。一方、ラテン語は語順の可変性から、韻を踏んだ文章を 作りやすい。詩人や戯曲作家にラテン語が好まれた理由はその点にあると言 えよう。 ラテン語には、その他にも関係詞や不定詞、動名詞を用いた文法もあるが、 今回のシステムは比較的単純な単文のみを対象としているため説明も割愛す る。 25 3 日本語とラテン語の摺り合わせ ラテン語の基礎の部分は2「ラテン語の基本」で説明したとおりだが、機械 翻訳を行う上では日本語との類似点と相違点を明らかにし、いかに単純なル ールでニつの言語を結びつけるかが重要となる。本項では、名詞、動詞、形 容詞をニつの言語の間でどのように置き換えるか、そして文法を考慮し、ど のような語順にするか、言語学的見地から結論付ける。 3.1 名詞 「ラテン語の名詞」=「日本語の名詞」というわけにはいかないのは 2.1「ラ テン語の名詞」で説明したとおりである。日本人がラテン語を学ぶ上では、 便宜上主格を基本形と位置づけているが、ラテン語名詞には日本語動詞の終 止形のような所謂「基本形」が存在しない。例えば、表 2-2 の fabula は「物 語」と紹介したが、実際は「物語は」 「物語が」さらには「物語よ」、である。 つまり、ラテン語の名詞(と呼ばれているもの)は日本語では名詞句にあた る。 意味のある文を成立させるために、単語あるいは語句が持つ意義のことを 構文的職能 と呼ぶ。言葉(ラングではなくパロール)が文の中でその存 在意義を持つためには、 素材表示の職能 と 関係構成の職能 の二つが必 要である。前者は構文的職能を持つ最小単位(日本語ならば句、ラテン語な らば単語)が有する意味を指し、後者は構文的職能を持つ最小単位が文中で どんな働きをするかを表す 26 図 3-1 例えば、日本語名詞「物語」は、このままの形で は構文的職能を持たないといえる。なぜならば、素 材表示の職能は有するが、関係構成の職能を持たな いからである。「物語」の素材表示とは「あるまと まった内容のことを話すこと。ものがたること。ま た、その内容。話。談話。(後略)」( 『大辞林 第二 版』 )。要するに、辞書的な意味のことである。この 「物語」が、 「物語は」となると構文的職能を持つ 形になる。助詞「は」を与えられたことによって、 これは主語である という役割が客観的に分かる ようになったと言えよう。京都大学名誉教授、渡辺 実氏は著書において以下のように述べている。 「日本語が傾向として、素材表示と関係構成の両要素を、それぞれ別々の 単語として外形化することを好む言語だということは、大局的に認められる 事実なのである。」( 『日本語概説』157 頁) 一つの文を「車」に例えるとすると、素材は「鉄」 、 「ゴム」、 「プラスチック」 などである。ただそれらの素材を揃えただけでは車は作れない。 「鉄-ボディ」、 「ゴム-タイヤ」、 「プラスチック-ハンドル」といったように、それぞれに対し て役割を与えてやればよい。もちろん、作り手が設計図(文法)を熟知して いる必要があることは言うまでもない。文を作る、ということは多少の差異 はあれども基本的にはこの例に示したとおりである。 ただし、これはあくまでも教科書的な事例であって、例えば「私、りんご、 食べる。」といったような文章でも、 私 が主語で 食べる が述語である ことは察しがつく。このように、実務的に言えば、文法や文脈から人間は構 文的職能を想像して文の内容を理解することができる。しかし、 「考える」と いうことを行わない機械翻訳については、そういったことには期待できない。 そのため、機械翻訳を行う上では(本システムに限らず)、文の全ての成分に すべからく構文的職能を持たせるべきである。 27 日本語のように、単語が単独では関係構成の職能を持たないため、構文的職 能を持ち得ない言語のことを膠着語(agglutinative languages)という。 「関係構成の要素が膠のような働きをして、素材表示の要素が貼り合わされ つなぎ合わされて行くような印象を与えることに基づく名称だ、と考えてよ いだろう。」 (『日本語概説』157 頁) これに対してラテン語は一つの単語の中に複数の形態素(語幹と接辞)を持 ち、それぞれが素材表示の職能と関係構成の職能を持つ。 図 3-2 図 3-2 は fabula の単数形対格、 fabulam の構造を示したものであ る。語幹「fabul」が「物語」とい う素材を表し、接辞「am」が単数 形で対格であるという関係構成を 表す。このように、素材表示の職能 と関係構成の職能のそれぞれを単語として分離することができない言語を屈 折語(inflectional language)という。 「単語の一部、たいていの場合は語尾の部分が語形変化して、同じ素材に異 なる関係を与えて行く有様が、語尾が折れ屈って異なる関係構成的職能を表 わし別けるように見える印象からの、命名と解してよいであろう。 」 (『日本語 概説』161 頁) ここまで述べきたったように、一言に「名詞」と言っても日本語とラテン語 ではその構造自体が異なっている。それを踏まえた上で、日本語の名詞句の 基本的な構造的職能、すなわち「主格」、「客語」、「連用格」、「連体格」にラ テン語の名詞の変化形を機械的に当てはめる理論を以下に論ずる。 28 3.1.1 主格 日本語の主格意識は薄い。特に英語のそれと比べてみると一目瞭然である。 それだけに、主格の判断については曖昧さが伴い、未だに議論の対象となっ ている。平安時代までは、主格を表わす助詞は無かった。 今は昔、竹取の翁といふものありけり(竹取物語) 昔、男ありけり(伊勢物語) 「構文」という概念は、西洋の言語学の影響を受けたとするのが通説で、主 格を意識するようになったことを裏付ける最も古い例は江戸時代の国学者、 富士谷成章(1738-79)であり、また本居宣長(1730-1801)や彼の息子春庭 (1763-18)らもまたその著書の中で、格助詞「が」を主格の関係構成の職能 を持つと述べている。その理論が今日でも一定の支持を受けている一方で、 近代日本語学で議論の的となっているのが係助詞「は」を主格とするか否か である。 「 「は」は一つの事柄を特に採り出して示す機能を有し、 「ぞ」はそのついた 事柄を強める機能を有すると考えられ、どちらも、主語を表わす機能の助詞 ではない。」 (『国語の論理-古代語から近代語へ-』30 頁) このように、係助詞「は」は主格として認めないとする見方もあるが、 「は」 で主格を表して文を作ることが今や普通となっていることもまた事実である。 ゆえに、本システムにおいては、係助詞「は」もまた主格の因子であると認 める立場をとる。そして、格助詞「が」と係助詞「は」のいずれかを関係構 成の職能として保持している名詞句を主格であると判断をし、これがラテン 語名詞の主格の変化形と等価であるとした。 ここで付け加えておきたいのは、本来的な日本語学において、主格の判断に は必ずしも助詞の情報のみに頼る理論しかないわけではない。述語に重きを 29 置き、その述語へどのような係り受けが行っているか調べることによって句 の働きを判別するという方法も存在する。述語に係る句は、主語か連用格の 二種類に限定されるからである。 図 3-3 今回はこの方法は使用していないので紹介に止めるが、例えば日本語による 自動対話システムなどを作る場合は、この方法で句の働きを判別することが 有効であろう。ただし、本システムにおいてはラテン語名詞の持つ変化形と その関係構成の職能のあり方に着目したため、助詞による格意識を利用する 理論を構築した。 3.1.2 客語 客語とは要するに直接目的語のことであるが、「主」に対して「客」という ことで、便宜上「客語」で統一して論ずることとする。主格を表わす助詞が 「が」であったように、客語を表わす助詞も存在し、それは「を」である。 しかし、それが必要十分というわけではない。 「 この本も読む 何か食べよう 等の文で、 「この本」 「何か」は、それぞれ、客語となっている。また、反対 に、 「を」が使われていても、 30 塀の上を歩く 家の前を通る の場合には、 「塀の上」「家の前」は、それぞれ、客語ではない。この「を」 は、下にくる動詞の表わす動作が、そこを移動してゆくという場所を示す働 きをしており、客語を示す語ではない。」 ( 『国語の論理-古代語から近代語へ-』 48 頁) しかし、格助詞「を」が客語の関係構成の職能を持つということを、本居宣 長は『詞玉緒』、富士谷成章は『あゆひ抄』 、皆川淇園(1734-1807)は『助字 詳解』において支持している。ゆえに、本システムにおいては格助詞「を」 が客語の関係構成の職能を持つと認め、日本語名詞と「を」を組み合わせた 名詞句が、ラテン語名詞の対格と等価であると判断した。 3.1.3 連体格、及び連用格 栗原の姉歯の松の人ならば都のつといにいざと言はましを(伊勢物語・第 14 段) 体言に係る名詞句、すなわち連体格に助詞「の」を関係構成の職能として付 帯させることは平安時代から行われており、それは今日でも変わらない。し かし、その逆、助詞「の」がついていれば必ず連体格になる、と断言するこ とはできない。 君恋ふる涙の床にみちぬればみをつくしとぞ我はなりける(古今集・恋二・ 五六七) この場合の「の」は主格を表わしている。しかし、近代語においては助詞「の」 は連体格で使用することが一般的であり、本システムにおいては助詞「の」 を関係構成の職能として有する名詞句は、ラテン語名詞の属格の変化形と等 価であると判断した。その代わり、前述のような助詞「の」を主格として捉 えた文章を正確に訳すことはできない。 31 日本語では 連用格 と一言で表わされるが、これに対応するラテン語名詞 の変化形は与格と属格の二つである。連用格については日本語とラテン語で、 その格の判断方法にずれがあるために注意が必要である。 例文1)私は 少女に 例文2)私は 夏に バラを贈る。 バラを贈る。 このような「に」を用いた二つの文章を例にとると、日本語ではいずれも連 用格として処理されるが、ラテン語の場合は例文1の「少女に」は間接目的 語を表わす与格 puellae(少女に) 時を表わす奪格 aestate であるのに対して、例文2の「夏に」は (夏に) となる。助詞「に」を含む名詞句が、与格になるべきなのか奪格 になるべきなのかは、上記のように動詞や構文構造によって縛られるもので は な い 。 し か し 、 こ こ は ラ テ ン 語 の 教 本 、 中 山 恒 夫 教 授 の 『 Classica Grammatica Latina』 (13 頁)、及び大西英文教授の『はじめてのラテン語』 (60 頁)での分類方法を参考にし、格助詞「に」は与格として処理するもの とする。これについてはラテン語学者の方は不満を持つかもしれないが、ト ランスファ方式を用いた機械翻訳においては極力曖昧さを排除したいため、 多少強引な線引きをさせていただくことにする。 奪格は 2.1.2「格変化と単複の変化」の項で 名詞の副詞的用法 とだけ述 べた。その用法は様々であり、同じ連用格である与格に相応しないものは全 て 奪 核 と言 っ ても よ い。 本 シス テ ムに お いて は 『 Classica Grammatica Latina』(13 頁)を参考にし、格助詞「で」「から」「より」の3つを奪格を表 わすものとする。 3.2 動詞 日本語の動詞には、インド・ヨーロッパ語族の言語のような過去形や未来形 の変化形を持たない。と言うと、 「あれ?」と首をかしげる方がいるかもしれ ない。しかし、よく思い出して欲しい。日本語の動詞の変化形は、未然形、 連用形、終止形、連体形、仮定形、命令形しか無い。そして、その動詞に対 して時世の情報を与えるのが助動詞である。 32 図 3-4 図 3-4 のように、動詞の連用形「書い」に過去を表わ す時世の意味を持つ助動詞「た」を組み合わせることで、 過去の動作を表わす職能を動詞句が持つことになる。未 来形についても同様で、終止形「書く」に助動詞「だろ」 「う」をそれぞれ組み合わせることによって、未来の動 作を表わす職能を動詞句が持つことになる。 本システムでは、現在形、過去形、未来形の三つのパターンを想定している ため、助動詞によって動詞の変化形を規定する方法をとる。具体的には、日 本語の形態素列中に助動詞「た」もしくは「だ」が存在したら、動詞に過去 形であるという情報を付与する。また、助動詞「だろ」が存在したら、動詞 に未来形であるという情報を付与する。 3.3 文法 ラテン語の文の成分は、格変化によってその職能を与えられるため、文頭と 文末以外であればどこに配置しても問題ない。 Poetae puellae rosas donat. 娘は少女にバラを贈る この文章が、 Poetae rosas puellae donat. 娘はバラを少女に贈る こうなったとしても、日本語の内容的には問題はないし、ラテン語にとって もまた問題はない。このような語順の自由さが日本語とラテン語には共通し ており、文法によって語順を細かく規定している言語とは異なっている。こ のことについて、日本ロマンス語学会所属の与謝野達氏は次のように述べて 33 いる。 「文章を構成する単語の語順について見ると、ラテン語と日本語には、可変 性が確保されている点で共通性があります。ラテン語でも、強調したい言葉 によって語順は変わってきますが、日本語で広く見られるパターン、主語(S)、 目的語(O)、動詞(V)は、ラテン語においても普通のパターンです。その 意味で両言語は、文中の単語の位置などによって、語と語の関係が決まって くる、したがって語順の可変性に乏しくなるフランス語や英語とは大きく異 なります。」 (『ラテン語と日本語の語源的関係』5 頁) ただし、2.3「ラテン語の文法」でも触れている通り、一般的なルールとし ては最初に主語、最後に動詞を持ってくること、となっている。しかし、実 際にラテン語で書かれた古文を読んでみると、そのルールが守られていない 文も多い。本システムにおいては、近代インド・ヨーロッパ語(英語やフラ ンス語)に則って、「最初が主語、最後は動詞」ということでルール化した。 つまり、日本語文章中で、主格であると判断したものはラテン語文では文頭 に、動詞句であると判断したものはラテン語文では文末におくことにする。 さらには、ラテン語には主格の代名詞は省略しても構わないというルールも あり、これもまた日本語とよく似ている。その例としてよく挙げられるのが、 川端康成の『雪国』の冒頭である。 国境の長いトンネルを抜けるとそこは雪国であった。 この文は翻訳者を大いに悩ませたという。日本文学の英訳の第一人者、エド ワード・G・サイデンスティッカーもまた、大変に苦労したのだという。 「国語としてはなんの不自然さもない、この文も、英語という眼から見れば、 主語が書かれていないということで、唐突な表現と感ぜられたのであろう。 そして、この文は結局、次のような英語で発表された。 The train came out of the long tunnel into the snow country. The train という、国語では使われていなかった主語が加えられている。」 34 ( 『国語の論理-古代語から近代語へ-』1 頁) 一方、ラテン語での主語の省略の例は以下のようなものがある。 Doceo te linguam Latinam. 私は君にラテン語を教える この文からは、主語としてあるべき、 「私」の単数主格形「ego」が抜け落ち ている。この件についても、機械翻訳のユーザーはより分かりやすい文章を 求めているだろうと判断し、出力した構文生成の結果では主格の代名詞は省 略しない。 35 4 形態素解析エンジン Sen 本システムでは日本語の形態素解析を行う部分に、形態素解析エンジン 「Sen」を使用した。本項では簡単ではあるが Sen について説明をする。 4.1 Sen とは その元は、京都大学情報学研究科、日本電信電話株式会社コミュニケーショ ン科学基礎研究所共同研究ユニットプロジェクトにて C++を用いて開発され たオープンソース形態素解析エンジン「MeCab」である。それを工藤拓氏が Java へポーティングし、やはりオープンソースとして公開しているのが 「Sen」である。ライブラリとして組み込みやすく設計されており、形態素を 使用するプログラムにおいては大いに助けになる。 4.2 Sen による日本語形態素解析 Sen には DOS プロンプト上で動作するサンプルプログラムが同梱されてい る。その実行例をここに示す。 「ライブラリとして組み込みやすく設計されて おり、形態素を使用するプログラムにおいては大いに助けになる。 」という長 めの一文を入力した結果が、次頁の図 4-1 である。 36 図 4-1 出力結果を説明すると、一つの形態素につき、「形態素」、「単語の基本形」、 「品詞情報(及び活用形) 」、カッコ内の数字は左から順に、 「形態素の始まり の位置」、「形態素の終わりの位置」、「形態素の長さ」を表わしている。そし て、カタカナで表記されているのが「読み」と「発音」である。入力文を別 途用意した IPA 辞書に照らし合わせて、上記の六つの情報と共に配列に組み 込むのが Sen の働きで、このサンプルプログラムはその配列の内容を全て表 示させたものである。 37 IPA の日本語辞書に 378,227 語が登録されているが、それに無い単語につ いては品詞不能(null)を返す。 38 4.3 Java プログラムからの Sen の活用 Sen は String と Stream のどちらの入力にも対応している。今回は String の入力文を対象としているため、String 解析に関わるメソッドを以下に紹介 する。 「クラス StringTagger のメソッド」 ・static StringTagger getInstance(java.util.Locale locale) Locale を指定して、インスタンスを生成する 。 今回は日本語の 自称を用意したため、日本語を指定する。 ・Token[] analyze(String input) 文字列 input を形態素解析し、形態素を表すクラス Token のイン スタンスの配列を返す。 ・boolean hasNext() 次の形態素があれば真を返す。 ・ Token next() 次のクラス Token のインスタンスを返す。 「クラス Token のメソッド」 ・ String toString() 切り出された形態素 ・ String getBasicString() 単語の基本形 ・ String getPos() 品詞情報及び活用形 ・ int start() 形態素の始まりの位置 ・ int end() 形態素の終わりの位置 39 ・ int length() 形態素の長さ ・ String getReading() 読み ・ String getPronunciation() 発音 詳しくは後述の4「日本語解析及びラテン語構文生成システム」の項で 述べるが、3「日本語とラテン語の摺り合わせ」の理論を実践するために は、品詞情報や読みの情報を含んだ日本語形態素列が必要になる。そのた めには、Sen をライブラリとして導入することが有効であった。 40 5 日羅翻訳支援システム 5.1 システムの趣旨 本システムは先に述べた日羅翻訳システム論に基づき、入力された日本 語文の解析を行い、得られた形態素を選別し、ラテン語文法に従って並べ なおす作業を行うシステムである。既に述べたとおり、日本語は膠着語で あるため、名詞に対しては助詞が、動詞に対しては助動詞が付帯すること で構文構造の職能を持つのに対して、ラテン語は屈折語であるため助詞や 助動詞は存在しない。つまり、そういった品詞は除外し、「日本語単語に ラテン語の格変化の情報を加えたもの」を中間表現の因子として(中間言 語ではない)、その羅列を出力する。具体的には以下の例文の通りである。 入力) 私は 本を 読んだ ↓ 出力) 私 本 読む 主格 与格 一人称単数 過去形 この中間表現を、 「ラテン語風日本語」と呼ぶことにする。あとは、この ラテン語風日本語を元にして、上から順に単語と変化形を日羅辞書から適 当なものを選んで置き換えれば、正しいラテン語が出来上がるという寸法 である。代名詞「私」の主格「ego」、名詞「本」の与格「libro」、動詞「読 む」の一人称単数完了形「legi」にそれぞれ置き換えると以下のようにな る。 Ego libro legi. これは間違いなく、ラテン語で「私は本を読んだ。」の意味を持つ一文で ある。 41 今回、日羅辞書は作成していないため、この置き換えの作業のみは各ユ ーザーに任せるとする。 5.2 システムの使用環境及び構成 対応 OS: WindowsXP 32bit 使用言語:Java (version 1.4.2_11) 「主語を処理するメソッド」、 「動詞を処理するメソッド」 、といったように 一つ一つの処理ごとに作成できるので、使用言語はオブジェクト指向のある Java を選択した。 Java には対象ユーザーごとに、 ・ Java2 Platform, Standard Edition(J2SE) ・ Java2 Platform, Enterprise Edition(J2EE) ・ Java2 Platform, Micro Edition(J2ME) ・ の三種類のプラットフォームが存在し、上から順に、デスクトップマシン用、 ウェブサーバ用、スマートフォンのような携帯端末用となっている。今回は Web を利用したシステムではなく、携帯端末での使用も想定していないため、 本システムの使用をデスクトップマシンに限定し J2SE を選択した。 5.3 システムの機能 本システムの有する機能は ・ 主格を判断する ・ 対格を判断する ・ 属格を判断する ・ 与格を判断する ・ 奪格を判断する 42 ・ 動詞を判断する の6つで、簡単な単文であればラテン語風日本語を生成することが可能であ る。 5.3.1 主語を判断する機能 入力された日本語文を形態素解析し、品詞が「格助詞」で読みが「ガ」であ る形態素と、品詞が「係助詞」で読みが「ハ」である形態素の、一つ前の形 態素を主語であると判断し、 「主格」であるということを併記して表示させる。 さらに、それを出力形態のラテン語風日本語の最初に移動させる。また、代 名詞であれば何人称の代名詞なのか、その読み(一人称であれば「オレ」 「ワ タシ」 「ボク」 、二人称であれば「アナタ」 「キミ」 「オマエ」、それらに当ては まらなければ三人称)から判断し、動詞にその情報を付与する。当然他にも 一人称、二人称を表わす代名詞はあるが、今回は便宜上この6つに限定する。 例) 私は ⇒ 私 一人称単数 主格 5.3.2 対格を判断する機能 入力された日本語文を形態素解析し、品詞が「格助詞」で基本形が「を」で ある形態素の一つ前の形態素を直接目的語の名詞であると判断し、 「対格」で あるということを併記して表示させる。ラテン語、日本語、共に基本の語順 である「S(主語)+ O(目的語)+ V(動詞)」であることを想定している ため、ラテン語風日本語での位置の変更はない。 例) 彼を ⇒ 彼 対格 43 5.3.3 属格を判断する機能 入力された日本語文を形態素解析し、品詞が「助詞」で基本形が「の」であ る形態素の一つ前の形態素を連体格の名詞であると判断し、 「属格」であると いうことを併記して表示させる。ラテン語、日本語、共に基本の語順である 「S(主語)+ O(目的語)+ V(動詞) 」であることを想定しているため、 ラテン語風日本語での位置の変更はない。 例) 彼の ⇒ 彼 属格 5.3.4 与格を判断する機能 入力された日本語文を形態素解析し、品詞が「格助詞」で基本形が「に」で ある形態素と、品詞が「格助詞」で基本形が「へ」である形態素の一つ前の 形態素を連用格の名詞であると判断し、 「与格」であるということを併記して 表示させる。ラテン語、日本語、共に基本の語順である「S(主語)+ O(目 的語)+ V(動詞)」であることを想定しているため、ラテン語風日本語での 位置の変更はない。 例) 彼に ⇒ 彼 与格 5.3.5 奪格を判断する機能 入力された日本語文を形態素解析し、品詞が「格助詞」で基本形が「で」で ある形態素、品詞が「格助詞」で基本形が「から」である形態素、品詞が「格 助詞」で基本形が「より」である形態素の一つ前の形態素を連用格の名詞で あると判断し、「奪格」であるということを併記して表示させる。ラテン語、 日本語、共に基本の語順である「S(主語)+ O(目的語)+ V(動詞) 」で あることを想定しているため、ラテン語風日本語での位置の変更はない。 44 例) 彼から ⇒ 彼 奪格 5.3.6 動詞を判断する機能 入力された日本語文を形態素解析し、品詞が「動詞」であるものを基本形に し、ラテン語風日本語の最後に移動させる。また、品詞が「助動詞」である もので基本形が「た」もしくは「だ」である形態素が存在したら過去形、品 詞が「助動詞」で基本形が「だろ」である形態素が存在したら未来形という 時世の情報をそれぞれ加える。 例) 読ん(だ) ⇒ 読む 過去形 45 5.4 システムの流れ 図 5-1 大まかな流れとしては図 5-1 の通りである。5.3「シス テムの機能」で紹介した機能 を上から順に行い、最終的に ラテン語風日本語 を出力す る。 これらのプログラ ムについ て、以下に詳述する。なお、 分かりやするために、一部の グローバル変数に ついては ローカル変数とし てメソッ ド内に記述している。 46 5.4.1 インターフェース 図 5-2 図 5-2 は原寸大である。文字は MS 明朝、サイズは大きめの 20 で太字表示。 品詞情報などの表示があるため横に広めにした。プログラムソースは次頁の 通りである。 47 import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import java.awt.Font; private void initGUI() { setLayout(new BorderLayout()); // 結果履歴表示エリア dialogueArea = new JTextArea(); dialogueArea.setFont(new Font("MS 明朝", Font.BOLD, 20)); dialogueArea.setEditable(false); dialogueArea.setLineWrap(true); dialogueArea.append("ここに表示されます¥n¥n"); // メッセージ入力エリア inputField = new JTextField(""); inputField.setFont(new Font("MS 明朝", Font.BOLD, 20)); inputField.selectAll(); // パネルに追加 JScrollPane scrollPane = new JScrollPane(dialogueArea); scrollPane.setAutoscrolls(true); add(scrollPane, BorderLayout.CENTER); add(inputField, BorderLayout.SOUTH); inputField.addActionListener(this); } 48 5.4.2 主語を判断するメソッド import net.java.sen.StringTagger; import net.java.sen.Token; //Sen のパッケージ導入 static String Subject(String pn) //入力された単数形の代名詞 pn を断定する { String Subject; String[] fps = new String[] {"オレ","ワタシ","ボク"}; //一人称の読み String[] sps = new String[] {"アナタ","キミ","オマエ"}; //二人称の読み if(pn.equals(fps[0]) || pn.equals(fps[1]) || pn.equals(fps[2])){ Subject ="一人称単数"; } else if (pn.equals(sps[0]) || pn.equals(sps[1]) || pn.equals(sps[2])){ Subject ="二人称単数"; } else { Subject ="三人称単数"; } return Subject; } static String SubjectS(String pns) //入力された複数形の代名詞 pns を断定する { String SubjectS; String[] fps = new String[] {"オレ","ワタシ","ボク"}; //一人称の読み String[] sps = new String[] {"アナタ","キミ","オマエ"}; //二人称の読み if(pns.equals(fps[0]) || pns.equals(fps[1]) || pns.equals(fps[2])){ SubjectS ="一人称複数"; } else if (pns.equals(sps[0]) || pns.equals(sps[1]) || pns.equals(sps[2])){ SubjectS ="二人称複数"; } else { SubjectS ="三人称複数"; } 49 return SubjectS; } 文字列配列の fps には一人称、sps には二人称の代名詞の「読み」の情報が 格納してある。5.3.1「主語を判断する機能」で述べたとおり、本システムで は初期状態ではそれぞれ 3 種類しか対応していないが、格納する文字列に追 加をすることは可能で、その場合には、それ以下の if 文の条件に || s1.equals(fps[x]) (x は加えた代名詞の数+2)を付け加える必要がある。ま た、主語の中に接尾詞の「たち」を拾った場合も同様の方法で人称を判断し ているが、こちらは ○人称複数 というかたちで出力する。 50 public void actionPerformed(ActionEvent e) { // 入力メッセージを取得 String input = inputField.getText(); try { Token[] token = tagger.analyze(input); //日本語配列// Token[] ratin = new Token[token.length]; //ラテン語配列// String[] kaku = new String[token.length]; //目的語名詞の格変化// int j = 0; //ラテン語構文生成時の語順// String sub = ""; //動詞に関連付ける主語の種類。空白で初期化// if (token != null) { for (int i = 0 ; i < token.length; i++) //主語判定// { String gpos = new String(token[i].getPos()); String[] subpp = {"格助詞","係助詞"}; //主格の助詞// String[] subpp2 = {"が","は"}; //助詞の基本形// String str = new String(token[i].toString()); if ((gpos.matches(".*" + subpp[0] + ".*") && str.equals(subpp2[0])) || (gpos.matches(".*" + subpp[1] + ".*") && str.equals(subpp2[1]))) { kaku[j] = "主格"; if (token[i-1].getPos().matches(".*" + "接尾" + ".*")) { ratin[j] = token[i-2]; //助詞の 1 個前は接尾語なので、 2 個前を主語とする// sub = SubjectS(ratin[j].getReading()); dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" + ratin[j].getPos() + "¥t" + sub + "¥t" + kaku[j] + "¥n"); j++; } else { ratin[j] = token[i-1]; //token[0]に助詞は来ないので -1 してもよい// sub = Subject(ratin[j].getReading()); dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" 51 + ratin[j].getPos() + "¥t" + sub + "¥t" + kaku[j] + "¥n"); j++; } } }; 「形態素」、「単語の基本形」、 「品詞情報(及び活用形) 」、「形態素の始まり の位置」、「形態素の終わりの位置」、「形態素の長さ」、「読み」 、「発音」の全 ての情報が格納される Token 配列を作る。一つは形態素解析を行った結果が そのまま入る token、もう一つはラテン語特有の情報を持たせた形態素配列 ratin である。最終的に、ダイアログに表示されるのはこの ratin 配列に格納 された、「ラテン語風日本語」である。そして、if 文で String getPos で得た token 配列中の形態素の品詞情報と、予め作っておいた文字列配列 subpp 内 の品詞情報とをマッチングし、同時に String toString で得た基本形と配列 subpp2 内の基本形とをマッチングする。これらの条件に合致した形態素 token[x]の一つ前の形態素 token[x-1]が、主語を表わす名詞になるので、これ をラテン語配列の最初、ratin[0]として格納する。要するに、token[x]が主格 を表わす助詞「が」もしくは「は」であり、それらの一つ前にある単語こそ が主格としての素材表示の職能を持つ形態素である。ただし、助詞の一つ前 が接尾詞の「たち」である場合は、この限りではない。その場合は助詞の二 つ前、すなわち token[x-2]を主語として断定する。また、日本文は助詞や接 尾詞から開始することはないので、x-1 や x-2 が負の値となってエラーを出す ようなことは起こらない。以上が主語の判断に関わるプログラムである。 52 5.4.3 対格、属格、与格、奪格を判断するメソッド for (int i = 0 ; i < token.length; i++) //主格以外の名詞の格断定// { String gpos = new String(token[i].getPos()); String pp = new String("助詞"); String[] obj = {"を","の","に","へ","で","から","より"}; String str = new String(token[i].toString()); if (gpos.matches(".*" + pp + ".*") && str.equals(obj[0])){ ratin[j] = token[i-1]; kaku[j] = "対格"; dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" + ratin[j].getPos() + "¥t" + kaku[j] + "¥n"); j++; } else if (gpos.matches(".*" + pp + ".*") && str.equals(obj[1])) { ratin[j] = token[i-1]; kaku[j] = "属格"; dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" + ratin[j].getPos() + "¥t" + kaku[j] + "¥n"); j++; } else if ((gpos.matches(".*" + pp + ".*") && str.equals(obj[2])) || (gpos.matches(".*" + pp + ".*") && str.equals(obj[3]))) { ratin[j] = token[i-1]; kaku[j] = "与格"; dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" + ratin[j].getPos() + "¥t" + kaku[j] + "¥n"); j++; } else if ((gpos.matches(".*" + pp + ".*") && str.equals(obj[4])) || (gpos.matches(".*" + pp + ".*") && str.equals(obj[5]))|| (gpos.matches(".*" + pp + ".*") && str.equals(obj[6]))) { ratin[j] = token[i-1]; 53 kaku[j] = "奪格"; dialogueArea.append(j + "¥t" + ratin[j].toString() + "¥t" + ratin[j].getPos() + "¥t" + kaku[j] + "¥n"); j++; } }; if 文の条件式は、形態素の品詞の中に 助詞 の二文字を含み(格助詞、副 助詞、係助詞、終助詞、など全て) 、なおかつそれぞれの格を示す助詞の基本 形が合致する場合を指す。格を示す助詞の一つ前の形態素に対して、格の情 報を渡して出力する。 5.4.4 動詞を判断するメソッド static String Times(String time) //入力された文字列 time が過去を指すのか未来 を指すのか判定 { String Times; String[] avstr = new String[] {"た","だ","だろ"}; //過去と未来を表わす 助動詞の基本形 if(time.equals(avstr[0]) || time.equals(avstr[1])) { Times ="過去形"; } else if (time.equals(avstr[2])){ Times ="未来形"; } else { Times ="現在形"; } return Times; } 54 これは引数が、助動詞で基本形が た だ のものが一つでもあれば過去 形、 だろ のものが一つでもあれば未来形であるという情報を得るクラスで ある。具体的には以下のように使う。 for (int i = 0 ; i < token.length; i++) //助動詞判定// { String pv = new String("助動詞"); String gpos = new String(token[i].getPos()); if (gpos.matches(".*" + pv + ".*")) { tms = Times(token[i].toString()); break;} else {tms = "現在形";} }; 選択肢は過去と現在と未来しかないので、「∼だっただろう」といった文章 の場合は、最初に出てきた時世の助動詞「だ」を拾って、過去形であるとい う判断を下す。このように、未来完了などの特殊な用例については対象外で ある。 for (int i = 0 ; i < token.length; i++) //動詞判定// { String v = new String("動詞"); String pv = new String("助動詞"); String adjn = new String("形容動詞"); String gpos = new String(token[i].getPos()); String str = new String(token[i].toString()); if (gpos.matches(".*" + v + ".*") && !gpos.matches(".*" + pv + ".*") && !gpos.matches(".*" + adjn + ".*")) { ratin[j] = token[i]; //動詞をラテン語配列に送る// 55 dialogueArea.append(j + "¥t" + ratin[j].getBasicString() + "¥t" + ratin[j].getPos() + "¥t" + sub + tms + "¥n"); j++; } }; } if 文の条件式は、品詞情報の中に 動詞 でも 形容動詞 動詞 という文字列が含まれるが、 助 でもないもの、ということを表わしている。Sen に よる形態素解析結果では、動詞は「動詞-自立」といったように管理されてい るため、equals による完全一致の例をすべて挙げるよりも、上記の方法の方 が効率が良い。そして、主語から得た人称変化の情報と助動詞から得た時世 の情報を付与して出力する。 5.5 使用の際の注意点 本システムでは教科書的な綺麗な日本語を入力する必要がある。また、これ まで述べた内容以上の機能は無い。すなわち、形容詞や接続詞については本 システムの対象外となっている。例えば「私は彼にプレゼントを渡す。」とい ったような、主語、客語、連体格、連用格、動詞が明確な文章を対象として いる。それ以外の文章については、ユーザーによる前編集、後編集に頼らざ るを得ない。 56 6 問題点と課題 今回は、名詞と動詞に主眼を置いたため、その他の用言については仕様外と なったことが惜しまれる。具体的には形容詞や形容動詞を指す。日本語では、 動詞も含めて 用言 と呼ばれるように、形容詞、形容動詞の活用形は動詞 のそれと似ている。要するに未然形、連用形、終止形、連体形、仮定形、命 令形の六つである。それに対して、インド・ヨーロッパ語族の形容詞の変化 は名詞の変化形に似ている。両言語間の形容詞にはこのような大きなずれが ある。 もう一つは接続詞に対応していないことである。接続詞を導入することによ り、3.1.1「主格」で紹介した係り受けを判断する必要がでてくるからだ。つ まり、接続詞が何と何を接続していて、その接続された句が何に対して係る のかを判断しなければならない。今回は係り受けのシステムを導入していな いので、接続詞に関しても見送った。 デスクトップマシン上で使える日羅辞書を作り、完全な日羅翻訳システムを 作ること。これが当初の目的であったが、最終的にはそれ自体が課題として 残った。文字通り残念ではあるが、この日羅翻訳支援システムが自分の思い 描いた理論どおりに機能してくれたので溜飲は下った。 57 7 おわりに 今までは、一ユーザーとしてシステムを使用する側であった。初めてパソコ ンを買ってから十年強が経ち、それなりに詳しくなっていると自他共に認め ている節があった。それが今回、システムを提供する側にまわり、まさかこ こまで苦労するとは思ってもみなかった、というのが正直な感想である。プ ログラミング自体も初級者未満の初心者レベルで、日本語学も多くの理論が あり今日でも議論は紛糾していて、どこに着眼して自論を展開したら良いの か判断することすらも難しかった。その中で、こうして一つの理論を組み立 てて、一つのシステムが構築できたことについては大いに満足している。 文系の学部で四年間を過ごしたからそう感じるのかもしれないが、プログラ ミングは哲学であると感じた。自分でルールを作って、それを使って自分で 世界を構築するということ。これは私にある種の快感をもたらしてくれた。 今後は社会人として、作った 世界 をクライアントに対して提供する立場 に立つ。できるだけ分かりやすく、美しい 世界 を提供できるように心が けたい。 さて、今回この卒業制作、論文を完成させるにあたり、非常に多くの方々の お力添えがあった。 はじめに、山本昌弘教授には多大な心配と気苦労をおかけしたことを、この 場を借りて心からお詫びを申し上げます。時には厳しく、時には更に厳しく 発破をかけていただいたことで、どうにか成し遂げることができました。社 会に出ても「元山本ゼミ生」として恥ずかしくないよう、精進を続けたいと 思います。これまで、本当にありがとうございました。 ゼミ長の中西君、そして寺田さんと大岩君。同じくプログラミング初心者と して、つらいときには励まし合い、時には傷を舐め合い、心の支えとなって くれました。ありがとう。 今里さんと内田君。技術面で劣る私を強く引っ張ってくれました。何かと私 の扱いにも困ったこともあったと思います。本当にお世話になりました、あ りがとう。 58 そして三年生の植村君、大澤君、加藤君、木村さん、黒田さん、小林さん、 土屋君、中谷君、中村君。明るく前向きな皆さんからはたくさんのエネルギ ーをもらいました。一緒にいられたのはたった一年間だけでしたが、本当に 楽しかった。ありがとう。 59 8 参考文献 中村恒夫著、『Classica Grammatica Latina』 、白水社、1987 年 富士谷成章著、 『あゆひ抄』 、勉誠社、1977 年 エッカーマン著、山下肇訳、『ゲーテとの対話(上) 』、岩波文庫、1968 年 山口明穂著、『国語の論理』 、東京大学出版会、1989 年 皆川淇園著、『助字詳解』、勉誠社、1978 年 松村明編、『大辞林』、三省堂、1988 年 片桐洋一、白崎徳衛、伊藤敏子編、 『竹取物語・伊勢物語』、集英社、1988 年 渡辺実著、『日本語概説』、岩波書店、1996 年 大西英文著、『初めてのラテン語』、講談社現代新書、1997 年 本居宣長著、中村通夫、福田真久編、 『紐鏡・詞玉緒―抄』、教育出版センタ ー、1976 年 平子義雄著、『翻訳の原理 広田紀子著、『翻訳論 −異文化をどう訳すか−』、大修館書店、1999 年 −言葉は国境を越える−』、上智大学出版、2007 年 川端康成著、『雪国』、新潮社、1986 年 与謝野達著、『ラテン語と日本語の語源的関係』、サンパウロ、2006 年 『MeCab: Yet Another Part-of-Speech and Morphological Analyzer』 http://mecab.sourceforge.jp/ 60 『Sen Project - Sen Project』 http://ultimania.org/sen/ 61
© Copyright 2024 Paperzz