PIME icon indicating copy to clipboard operation
PIME copied to clipboard

單字量過多、使用者詞庫無法開啟失去功能

Open kuroutaakatsuki opened this issue 2 years ago • 10 comments

目前使用詞庫的單字量大約在6.6萬筆。 家用電腦跟公司電腦的詞庫檔案互相交換累積詞量。

最近發現平常打字沒有問題,但想開啟「編輯使用者詞庫」來輸入詞庫時,會出現永久讀取後,整個程式無法運作、失去打字機能的問題。

從小圖示Restart PIME無法發揮任何功用。 工作管理員可以看到有PIMELauncher跟兩個pythos在運行。

所以我這幾天想輸入詞庫時,會先開啟詞庫,確認無法動作後, 用工作管理員把上述三個處理程序停止,手動把詞庫檔案丟到檔案夾裡,再去開PIMELauncher。

kuroutaakatsuki avatar Aug 03 '22 01:08 kuroutaakatsuki

是卡在「載入詞庫中、請稍後」畫面嗎?應該不會是 PIMELauncher 的問題,我手上 2 萬多跟 3 萬多筆詞庫的 PIME 都滿正常的

ottokang avatar Aug 09 '22 08:08 ottokang

對,進入「載入詞彙中,請稍後...」的畫面後,呈現無限讀取狀態。 放著一段時間、或是關掉後,都可能讓輸入法當掉呈現無法打字的狀態。 上面Win7,剛剛確認一下Win10的狀態下,輸入法本身不會死當。 只有詞庫進不去的問題。

開啟時,處理程序會有1個PIME Launcher,跟2個Python。 然後無限讀取。 スクショ 2022-08-09 16-50-11 スクショ 2022 08 09 20-34-47

直接把「編輯使用者詞庫」關掉,再開一次。 詞庫會直接顯示0詞彙。 處理程序為1個PIME Launcher,跟3個Python。 スクショ 2022-08-09 17-00-51 スクショ 2022 08 09 20-35-07

使用者詞庫開幾次,Python就疊加幾次。沒有動作。 スクショ 2022 08 09 20-36-53

我最後一次還能進入詞庫時,詞彙量是65648筆。

現在應該接近6.6萬筆。 開啟sqlite3檔裡面的ROWID目前跑到1300407。 181425172-afa8e0a4-7f2d-403d-915e-87659d06295e

剛剛確認Win10下不會當掉。 就直接開兩次詞庫,匯入成功後,再把多餘的Python關掉。:P スクショ 2022 08 09 20-40-46

kuroutaakatsuki avatar Aug 09 '22 09:08 kuroutaakatsuki

這邊如果方便的話,可能要請你提供詞庫 SQLite 檔案來測試看看,裡面會有你的打字資訊,這請你再參酌一下。

或者是你提供在「載入詞庫中,請稍後」,按 F12,提供瀏覽器主控台的錯誤訊息參考。

ottokang avatar Nov 09 '22 03:11 ottokang

沒問題,我傳到我的Google Drive。 過一陣子會刪掉。 (已刪除)

覺得應該是詞彙筆數過多,超出UI的處理負荷吧。 再麻煩您研究了。

──── 順便再題一下,詞彙優先度的參數設計,覺得還可以再調整。 這點在 Issues #713有提到。

感謝開發及維護的各位!

kuroutaakatsuki avatar Nov 09 '22 07:11 kuroutaakatsuki

已經下載了,再研究看看是什麼問題

ottokang avatar Nov 09 '22 08:11 ottokang

目前看應該是 libchewing 的問題,不過也可能是詞庫中有不能接受的字元導致錯誤,要再查了

Traceback (most recent call last):
  File "C:\Program Files (x86)\PIME\python\python3\tornado\web.py", line 1711, in _execute
    result = method(*self.path_args, **self.path_kwargs)
  File "C:\Program Files (x86)\PIME\python\python3\tornado\web.py", line 3208, in wrapper
    return method(self, *args, **kwargs)
  File "C:\Program Files (x86)\PIME\python\input_methods\chewing\config_tool.py", line 141, in get
    while chewing_ctx.userphrase_has_next(byref(phrase_len), byref(bopomofo_len)):
OSError: exception: access violation reading 0x00000000

ottokang avatar Nov 10 '22 02:11 ottokang

看了一下 chewing_userphrase_has_next 的 code,比較有可能出現 access violation reading 0x00000000 的地方可能是在計算 phrase 長度的地方 [1]。如果詞庫沒有正確修改,造成有一些條目的 phrase 是 NULL,就會出現這個問題。請問可以確認一下你的詞庫是否有這樣的條目呢?可以用以下的 SQL statement 檢查:

SELECT * FROM userphrase_v1 WHERE phrase IS NULL;

[1] https://github.com/chewing/libchewing/blob/452f6221fbad90c0706a3963b17e226216e40dd7/src/chewingio.c#L1940

yan12125 avatar Sep 08 '23 14:09 yan12125

事隔4個月,不小心點到使用者詞庫,發現竟然可以開了。 功能正常。

83504 個詞彙 開啟時間約5秒

使用習慣跟以往相同,常用SQLite程式調整freq值,其他沒特別測試什麼。 不清楚為什麼突然好了,做個回報。 Snipaste_2023-11-18_04-28-55

同樣的sqlite3檔丟回公司電腦竟然也可以用了。XD 開啟時間約10秒

kuroutaakatsuki avatar Nov 17 '23 19:11 kuroutaakatsuki

詞庫字數一多又掛掉了。XD 做個回報。

用其他程式開chewing.sqlite3確認詞庫字數為91214筆。 Snipaste_2024-04-27_05-49-14

kuroutaakatsuki avatar Apr 26 '24 20:04 kuroutaakatsuki