logo

rime-yahwe 是一個使用 rime 中州韻輸入法引擎、基於上海中老派口音(當然,兼容新派)、脫胎於吳語協會式拼音的上海話拼音輸入法。安裝見 https://github.com/edward-martyr/Rime-Yahwe/

緣起

rime 上已經給出了三種吳語的拼音方案:蘇州、上海老派、上海新派,可是拼音方案並不可調。於是乎想要把 rime 上的法吳拉丁化方案改爲我一直用的吳語協會拼音,並增加了一批模糊音及簡寫方案,這就成爲了 rime-yahwe。(這其實大概只花了兩個小時……)

Methodology

取 plum 下上海老派的 wugniu_lopha.dict.yaml 詞典,用 Python 正則表達式替換成吳語協會式拼音。(法吳真的用不慣……每次打 夏rau 的時候都像 roar roar 叫……)。

import re

d = re.sub(r'i(?= |\n|	)', 'ie', out)
d = re.sub(r'ij(?= |\n|	)', 'i', out)

d = re.sub(r'q(?= |\n|	)', 'h', out)
d = re.sub(r'uh(?= |\n|	)', 'uih', out)

out = re.sub(r'gni(?=a|e|i|o|u)', 'ny', out)
out = re.sub(r'gni(?!a|e|i|o|u)', 'nyi', out)

#......等等 
#業餘編程,代碼寫太醜就不全貼了 : (

另外,wugniu_lopha.dict.yaml 不知來源是哪兒,我使用下來有一些字的發音與上海話脫節,這一部分我手動添加了一些:

\(\begin{array}{lr} 國&\textsf{koh}\\ 哉&\textsf{zeh}\\ 黛&\textsf{de}\\ 刊&\textsf{khoe} \end{array}\) …so on

另外,吳語協會式拼音中表示清音的 ' 這裏換成了 h,比如 nhi 就是\(你_文\)的發音。

模糊音方面,有一些是上海話本來就不區分的,如二母 dzz。另外是一些不必區分的清濁,如'll,沒有必要增加打字時的思考時間。前後 ah aoh 等也默認爲不區分。當然,這些都可以在 yahwe.schema.yaml 中修改。

簡寫定義了這些:

speller:
    # ……
    - derive/(.*)en/$1n/  # 方便呀
    - derive/(.*)au/$1ao/                         
    - derive/(.*(?:i|o|a|e|u))h/$1k/ 
    - derive/^tsh/tt/
    - derive/^sh/x/
    - derive/^/q/
    - derive/(.*)ah/$1aa/
    - derive/(.*)oh/$1oo/
    - derive/(.*)eh/$1ee/
    - derive/(.*)ih/$1ii/
    - derive/(.*)uih/$1uu/
    - derive/^sy/ss/
    - derive/^zy/zz/
    - derive/(.*)uih/$1uh/ 

尖團默認是區分的,也可以修改:

   - derive/^tzi/ci/      # 以下幾行是模糊分尖團音個
   - derive/^tsi/chi/
   - derive/^zi/ji/
   - derive/^zi/zhi/
   - derive/^si/xi/

撳下 ` 可以有反向查詢:

reverse_lookup:
  dictionary: luna_pinyin
  prefix: "`"
  suffix: "'"
  tips: 〔拼音〕
  preedit_format:
    - xform/([nl])v/$1ü/
    - xform/([nl])ue/$1üe/
    - xform/([jqxy])v/$1u/

詞庫方面,融合了朙月拼音的附屬詞庫以及搜狗的幾個詞庫(包括上海地名啥的),基本夠用。

import_tables:
  - luna_pinyin.hanyu
  - luna_pinyin.poetry
  - inven
  - seukeu

當然,搜狗的在用之前要

from hanziconv import HanziConv
HanziConv.toTraditional(...) # 轉繁體/正體

完美結束!