繼上週的 週末長知識: CJK Unified Ideographs 之後,本週又不小心多少牽扯到了一點 CJK 相關的東西… 對,就是裡面的「J」,本週的長知識讓我們來看看如何透過 Python 來建立一目了然的日文五段動詞變化 cheat sheet。
閱讀需知
要了解本文的內容必須有一些基本對於日文的認識,建議可以先行閱讀一下
五段動詞變化
基本上日文動詞分為三類,分別是
- 第一類動詞 (五段)
- 第二類動詞 (上下段)
- 第三類動詞 (不規則)
而其中「五段」的名稱由來,由這則百度問答的答案可以知道:
五段和一段分別是對動詞分類而加以區分的名稱。之所以叫五段,是因為五段的動詞的詞尾有あいうえお元音的變化,如行く有以下的變化行か(ない) 行きます行ける行こう這裡的かきけこ都是以元音的變化。所以叫“行く”五段動詞,反過來,五段動詞一定會有這種變化,沒有例外。 至於一段動詞就沒有以上這種變化,只有單純的以る結尾,一段動詞也分上一段和下一段,上一段就是在結尾る前的音是い音變化的,而下一段就是以え音變化的如生きる(上一段動詞)、覚える(下一段動詞)。
如果你有看了上面的「免費日本語教室」課程,應該會覺得五段動詞變化非常複雜(雖然課程口口聲聲說很簡單);關鍵在於缺乏一個一目了然的方式來跟你說明各種形的變化該如何執行。
然而在寫成 Python code 之後這一切都不一樣了。
五段動詞變化 cheat sheet in Python
事不宜遲,馬上就來看看照著規則寫成 Python 的樣子吧!
# -*- coding: utf-8 -*-
def dan_transition(word, from_dan, to_dan=u'う'):
""" 轉段 function,自行發揮啦 """
pass
def past_tense(word):
"""
取得動詞的過去式
規則有點小複雜,主要透過判斷最後一個字來決定要怎麼變化
"""
if word == u'いく':
return u'いった'
last_char = word[-1]
front_chars = word[:-1]
if last_char in [u'う', u'つ', u'る']:
return front_chars + u'った'
if last_char in [u'く', u'ぐ']:
return front_chars + u'い' + (u'た' if last_char == u'く' else u'だ')
if last_char == u'す':
return front_chars + u'した'
if last_char in [u'ぶ', u'ぬ', u'む']:
return front_chars + u'んだ'
return word
def godan_conjugation(word):
"""
輸入日文五段動詞,輸出所有動詞變化 list
大部分的變化過程都是「轉段」->「加字尾」
現在一塊兒的變化表示轉段相同,僅有加的字尾不同
"""
c = []
# 連用形, ます形
buf = dan_transition(w, u'い', u'う')
c.append(buf)
c.append(buf + u'ます')
# 否定形, 被動式, 使役形
buf = dan_transition(w, u'あ', u'う')
c.append(buf + u'ない')
c.append(buf + u'れる')
c.append(buf + u'せる')
# 過去式
buf = past_tense(w)
c.append(buf)
# 命令形, 可能形
buf = dan_transition(w, u'え', u'う')
c.append(buf)
c.append(buf + u'る')
# 意志形
buf = dan_transition(w, u'お', u'う')
c.append(buf + u'う')
return c
於是最近抄筆記更新了
最近 ParrotTalks抄筆記 新版支援了日文,對於日文可以提供:
- 點擊即選擇日文字詞
- 日文 TTS(Text To Speech) 發音
這邊展示一下選擇日文字詞的效果,後段則是用「斷開超連結」來選取連結上的日文字詞。
還等什麼,趕快來安裝 ParrotTalks抄筆記 吧!