Python
NLP
Latin

ラテン語文解析プログラムを書くことを目的としたラテン語学習(前編)

More than 5 years have passed since last update.


ご挨拶

こんにちは。@naoya_t と申します。

縁あって7shiさん主宰の初級ラテン語リーディングの会に参加させて頂いているのですが

ラテン語でアドベント・カレンダーをやる、しかも「ラテン語プログラミング」だと言うので

喜んで参加させて貰うことにしました。

多分この(閑散とした)感じだと、12/25までに何回か登場することになりそうですので、

とりあえず軽めに始めたいと思います。

(12/2担当なのですがアメリカ西海岸もそろそろ日が変わろうという時間になってしまいました。申し訳ありません)

こんなツールを作っています。

https://github.com/naoyat/latin

スクリーンショット 2013-12-03 15.08.53 12-03.png

ラテン語文を入力すると、活用形を推測したり辞書を引いたりして、何となくの日本語に訳してくれます。(テキストに出てくる単語を手動で辞書に入れてるので、テキストに出てこない単語は解しません)

若干の北米英語訛りがありますが、テキストを(高低アクセントも付けつつ)音読してくれる機能もあります[MacOSXのみ]


ラテン語文の解析

例えば英語では、何が主語で何が目的語なのかを語順(というか文型)で表しますが、ラテン語では、名詞(や形容詞など)が格変化することで表現します。そして語順は割と自由です。また、動詞の活用も(英語などに比べて)複雑な上、動詞の活用形で主語が十分に分かるので主語にあたる代名詞が(必要でない限り)使われなかったりします。

皆さんご存知 "Cogito, ergo sum." (我思う故に我在り)でも、動詞cogito (I think) もsum (I am) もその活用から1人称単数であることが分かるので(英語の I にあたるような)主語を改めて立てる必要がありません。

というわけで、ラテン語文の意味を捕捉するためには、出てくる単語の品詞だけでなく、動詞の活用や名詞の格変化を把握する必要があります。

初級ラテン語リーディングの会では秋以降、新しい(易しくてわかりやすい)テキストが採用されて、辞書を引いたり活用形を考えたりする機会が減っているのですが、以前用いていたテキストでは動詞の活用や名詞・形容詞の格変化を割とちゃんと考える必要がありました。


「活用表の暗記」

ラテン語は昔ひと通り齧っているので、今回は「ラテン語の文を解析するプログラムを書くことを目的としてラテン語を学んでみる」ことにしてみました。

動詞の活用とか名詞の格変化とか、それぞれ何パターンもあって(動詞なんか不規則なやつがうじゃうじゃあったりして)ラテン語の勉強で一番面倒くさい所ですよね。

でも折角PCがあるのだから、プログラムを書いて何とかしてしまいたいですよね。

ついでに辞書をいちいち引くのも面倒くさいからそこも何とかしたい。

活用形解析のアプローチは大きく分けて

(1) 文中に出てきた語形(表層形)の語尾変化から原形と活用形をその都度推測

(2) あらかじめ全ての語形変化を求めてDBに放り込んでおいてそこから検索

のような2つの方向があると思うのですが、今回は(2)のアプローチで行ってみます。

実際には外にDBは立てず、その都度ハッシュテーブル(というかdict)に入れています。


実装言語

結論からいうとPython (2.7) を使っています。拙い自分の言語力から消去法で。

書ける書けないで言えばどの言語でだって書けますが、言語選択をネタにされるのは疲れるのでここは無難なところで、といった心理もおそらく働いています。


  • 文字列処理(正規表現を含む)が楽(という所でC++が消えた)

  • ユニコード文字列をそれなりに自然に扱える(という所でOCamlが消えた)

  • 書き慣れている(という所でJavaが消えた)

最終的にPython, Gauche, JavaScriptあたりで悩みましたが、単語活用回りの簡単めの処理をそれぞれでちょっと書いてみて、この中でならPythonが書きやすいかなと思ってPythonにしました。


Futurus persevero...

書きたいことは色々あるのですが、時間が足りないのと、あとカレンダーの後の方がガラ空きなのとで、後日に続きを書くことにします。

引き続き、よろしくお願い致します。