卿少納言

卿少納言

JavaScript & Japanese, Python & Polyglot, TypeScript & Translate.
zhihu
github
email
x

FreeMdict_回覆 xiaoyifang 前輩

摘要:本文是在 FreeMdict 和 GoldenDict 維護者 xiaoyifang 關於 Hunspell 的討論。

Morphology dictionaries do not work with EPWING (hunspell), is there a way to fix this? I have already opened an issue on the original goldendict github. Should I open another issue on xiaoyifang’s fork?
Machine translation:
形態學詞典不能與 EPWING(hunspell)一起使用,有辦法解決這個問題嗎?我已經在原 goldendict github 上開了一個問題。我是否應該在 xiaoyifang 的分叉上再開一個問題?

不好意思,雖然您已經修復了該問題,但我還是想說明一下:goldendict 的 hunspell 功能的推導結果是由後綴名為.dic 的文件收錄的單詞決定,不會被加載的詞典影響。

而歐路詞典的 Android 端的機制不一樣,會被用戶加載的詞典影響(您的懷疑在這個軟件上是成立的)。

另外,我認為日語想要像英語一樣,完全用剪貼板查詞,有些問題通過 hunspell (可能)無法解決 —— 日語的詞形變換比英語複雜得多,而且日語有獨特的排版規則,所以我專門製作了《日本語非辭書形辭典》,您可以查閱這些帖子和它們的討論區,了解一些大概:

這裡談到了日文的詞形變換特點
https://forum.freemdict.com/t/topic/11523

這裡談到了日語獨有的排版規則
https://forum.freemdict.com/t/topic/14241/17

如果您願意了解更多,我會抽空整理一篇文章系統、詳細地向您解釋日語究竟有哪些特殊之處(可能要一個月左右的時間,如果整理好了,我會專程通知您)。

如果有可能的話,我希望 GoldenDict 能原生處理上述提到的問題,不用這裡提到的方法 [https://forum.freemdict.com/t/topic/14241]—— 用腳本和 Quicker 等工具中轉實現。

黑本式#

對日語不熟,跟這裡有關係嗎

|500

應該和中國的日語學習者沒有太大關係。您所指的地方主要影響的是日語的羅馬音(您把它當做拼音好了,都是西文字母)。

具體來說,要處理的東西就類似中文中通行的簡體拼音方案和威妥瑪拼音方案之間的差異,開啟之後的效果是像這樣的:

Tsinghua University 處理為 Qinghua University、
Tsingtao 處理為 Qingdao 、
Peking University 處理為 Beijing University
(這些例子可能不是很嚴謹,因為部分拼寫方法依據的讀音不是現在的普通話)

也就是說它主要是解決的羅馬音(或者說西文字母)拼寫方案之間的差異。而中國的日語學習者很少會通過羅馬音(比如 taberu)來查單詞,一般是用假名(比如たべる)或者漢字(比如食べる)來查,但我在部分外國人設計的詞典網站看到他們支持羅馬音來查東西,所以才會有個這樣的功能(但中國人應該用不到)。

我想要解決的東西類似英語的時態導致的問題,比如下面這樣:(為了便於比較和說明,例句是我造的)

私はご飯を食べている(我正在吃晚飯)
I am having dinner

私はご飯を食べていた(當時,我正在吃晚飯)
I was having dinner

私はご飯を食べた。(我吃了晚飯)
I had dinner。

私はご飯を食べなかった(我沒有吃晚飯)
I didn't have dinner。

母親は私をご飯を食べさせる。(媽媽讓我吃晚飯)
Mom lets me have supper

母親は私をご飯を食べさせない。(媽媽不讓我吃晚飯)
Mom won't let me have dinner。

加粗的部分就是 2 種語言中的動詞(也是使用常規構詞法功能要劃的部分),可以發現:英語表達不同的意思時,形態變化不會在一個動詞上連續發生(所以動詞的變形要少得多,只有 3 種);而日語表達不同的意思時,形態變化會多重嵌套在動詞上(所以上面每句話都是一個新的變形,而且遠不止這些)。這導致日語的構詞法文件會非常複雜,所以我才會想嘗試其他解決辦法。

我的解決辦法不太學術(加粗部分是使用我提出的方案要劃的部分):

私はご飯を食べている(我正在吃晚飯)
I am having dinner

私はご飯を食べていた(當時,我正在吃晚飯)
I was having dinner

私はご飯を食べた。(我吃了晚飯)
I had dinner。

私はご飯を食べなかった(我沒有吃晚飯)
I didn't have dinner。

母親は私をご飯を食べさせる。(媽媽讓我吃晚飯)
Mom lets me have supper

母親は私をご飯を食べさせない。(媽媽不讓我吃晚飯)
Mom won't let me have dinner。

可以看到,食べる的る這個最末尾的假名有一定重複的,所以我通過窮舉詞尾最後一個假名的變形製作了一個 mdx 文件(即「日本語非辭書形辭典 v1」和「日本語非辭書形辭典 v2」)—— 食べら、食べり、食べれ、食べさ、食べま、食べろ等詞條全都指向食べる,然後在「日本語非辭書形辭典 v3」使用 Python 和 JavaScript 根據窮舉規則製作 2 個腳本反向推導原形,並與「日本語非辭書形辭典 v2」結果進行對照。(雖然是左右互搏之術,但也有一定的驗證價值)

綜上,我把我的想法付諸實踐後經過長達 6 個月的實際測試(在論壇有收到反饋),並未發現嚴重問題。所以接下來會先到沙拉查詞上提交 PR(溝通會稍微輕鬆些,再加上我不懂 goldendict 使用的 C++ 和 C),觀察下實際的效果。

可能沒什麼用的參考:平文式羅馬字 - 維基百科,自由的百科全書 (wikipedia.org)

Mecab#

日語的形態學解析,比如提取基本形,業界是有現成的庫的,目前看到的最受歡迎的幾個開源庫全是基於詞庫(ipadic/unidic)的解析,也有看到用自定義規則解析的,但是基於詞庫機器訓練出來的結果。手寫規則的解析會不會有什麼問題?最好用個更大的樣本測試下: https://clrd.ninjal.ac.jp/unidic/

(刪了也沒用,我已經通過郵件存檔啦)

您推薦的那個工具應該是用於分析文章,劃詞應該不是他們設計這個工具的初衷,二者還是有一定的區別(比如劃詞的時候,上下文語境基本丟失;又比如,劃詞的文本沒有經過清洗,需要專門預處理)。

不過我們可以參考他們的處理細節,進行一定的修改(分詞什麼的就不用管了,我們只需要關注分詞之後的推導過程即可)

下面是我搞了一半的筆記,給大家一點思路(非計算機科班,只懂 Python,所以大家不要被我誤導了哈):

開發者提供其他語言的源碼,這裡(只能慢慢往下滑,搜不了是怎麼回事……)

但下載之後發現文件未免太小了

3 個 Python 文件就可以實現日語的 NLP 了嗎 233,應該還是要調用打包好的 exe(但我是要研究處理細節啊,不可能去讀二進制代碼吧)…… 另外用的是 python2 的語法……

所以就沒往下研究了。

又不死心找了一個:
SamuraiT/mecab-python3: mecab-python. you can find original version here //taku910.github.io/mecab/

非官方接口,雖然提供了 Python 接口,但實際處理過程也(應該)不是 Python

關於大樣本驗證#

我不想寫代碼,也不想叫別人寫代碼就刪了。現代的搜索引擎基本都是用這一套詞庫和形態學分析工具,但都不適合在客戶端使用。你能總結改良是很好的,但是最好用大樣本測試下,這樣客戶端開發者那邊也會有信心使用。

嗯嗯,我贊同您的觀點,要用大樣本來驗證,單憑人工搜集太慢了(實際上,從有這個想法、開始有意識地收集變形已經是 2 年前的事,但在 6 個月前,動手後才發現還是遺漏了很多)。

您推薦的 mecab,分詞結果中有 2 列數據就可用來驗證對比,但我手上還沒有分詞語料,所以之前只是簡單說明了下

[ ] 有 Mecab 分詞語料的同學歡迎發送到 [email protected] ,只需要書字形書字形基本形2 列的數據即可,感激不盡:)

2 個月過去了,果然一份文件也沒有收到(也許我該專門開個帖子 233)

不過我已經找到一台舊電腦了,後面會抽空製作分詞語料,預計國慶開始大樣本驗證。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。