BoGoEngine / ibus-bogo

IBus frontend for the BoGo engine.
GNU General Public License v3.0
94 stars 39 forks source link

Hỗ trợ kiểu gõ tốc ký người dùng tùy chỉnh được #52

Open Narga opened 11 years ago

Narga commented 11 years ago

Thông thường khi viết tay ta có sử dụng một số lối viết tắt với các phụ âm ghép đứng sau như nh, ng liệu cách này có nên bổ xung thành một tính năng cho người dùng (hỗ trợ tự chỉnh thì càng tốt) trong Bogo được không, chẳng hạn khi viết hình = `h+i+h+f,hương=h+u+o+g+w`` Trên cơ sở này mình đề nghị cho phép người dùng tự định nghĩa cách gõ phím

lewtds commented 11 years ago

Vấn đề này bác thử xem có thể được giải quyết bằng cách mở rộng tính năng gõ tắt được miêu tả ở #48 bằng thuật toán tự động không?

Người dùng hiện tại đã có thể tự định nghĩa cách gõ phím ở mức cơ bản bằng cách mod lại các kiểu gõ có sẵn được miêu tả trong file engine/data/default_config.json. Theo bác người dùng cần được tự do định nghĩa đến mức nào?

cmpitg commented 11 years ago

Tính năng bác @Narga nói đến chính xác là tính năng gõ tắt. Ngoài cách gõ chuẩn thì thói quen gõ của mỗi người khác nhau, vì vậy chỉ có thể bổ sung tính năng gõ tắt chứ không thể đưa luật/cách gõ tắt cụ thể nào đó làm chuẩn được.

lewtds commented 11 years ago

@CMPITG Nhưng mà có khá nhiều luật nếu phải edit bằng tay đấy anh. hìh, ảh chẳng hạn. Em thấy các bộ gõ khác thường có tính năng gõ tắt phụ âm cuối, gõ tắt phụ âm đầu (h -> nh, k -> ch, g -> ng)... Mấy cái này bắt buộc phải dùng thuật toán chứ không thể làm tay được.

Cơ mà cá nhân em thì không thích kiểu gõ này lắm.

cmpitg commented 11 years ago

@lewtds Đâu cần phải làm bằng tay đâu em. Em nhớ đề xuất của anh về gõ tắt khi anh nói về tiện dụng trong việc định nghĩa 2 từ khác nhau hoặc gõ chữ Nôm không? Luật cho hìh -> hình hoặc ảh -> ảnh chỉ đơn thuần là mapping

hìh hình
ảh ảnh

hoặc tương tự vậy thôi.

cmpitg commented 11 years ago

Cái mình quan tâm không phải là chuỗi character người dùng nhấn như thế nào, mà là string đang được gõ hiện tại có thể transform thành string nào.

lewtds commented 11 years ago

hmm, vậy có thể sử dụng một DSL như regexp để người dùng tự định nghĩa cách transform (có vẻ hơi overkill nhỉ?). Nếu không thì bắt buộc phải hardcode vì có liên quan đến tính toán.

cmpitg commented 11 years ago

Suy nghĩ phức tạp! :-?

Cách transform có thể được định nghĩa bằng một file cấu hình, nằm trên $HOME/.config/bogo/gotat.txt chẳng hạn, format:

từ_gõ_tắt kết_quả_1 kết_quả_2 kết_quả_3

Các từ trong tệp này chỉ bao gồm các chữ cái hoặc chữ số, in hoa hoặc in thường, hoặc các ký tự có thể thuộc một từ (nếu không sẽ không thể so khớp, do tính chất của buffer string dùng chỉ chứa một từ).

Nếu có nhiều kết quả thì hiện popup, nếu không thì tự động autocomplete luôn, hoặc đưa một tổ hợp phím để complete (giống Auto Text hoặc Auto Correct).

Người dùng có thể tạo file bằng tay hoặc dùng GUI config để tạo.

Tính toán cũng chỉ đơn thuần là so khớp buffer string hiện tại rồi transform nếu cần thiết.

lewtds commented 11 years ago

Làm như vậy thì chỉ match 1:1 được thôi. Em thử đề xuất một cái như thế này nhé (phỏng theo wildcard glob của Unix):

Chuỗi được tách thành 3 thành phần: phụ âm đầu, nguyên âm, phụ âm cuối. Ký tự - ở kết quả tức là copy y nguyên thành phần ở vị trí đó của chuỗi gốc. Đằng sau nó, người dùng có thể liệt kê một danh sách những transformation mong muốn.

Ngoài ra, em cũng tìm được một bài viết về phương pháp gõ tắt thống nhất của một Việt Kiều: http://chuvietnhanh.sourceforge.net/PhuongPhapMoiGoTatChuViet.htm

[OT] Bộ gõ WinVNKey có vẻ quá nhiều option, hỗ trợ quá nhiều thứ không cần thiết.

cmpitg commented 11 years ago

Anh :-1: ý tưởng này, mặc dù linh động nhưng không tự nhiên, không tuân theo POLA, người dùng phải đọc (học) mới có thể sử dụng được cú pháp. Trong khi đó match 1:1 thì WYSIWYM.

lewtds commented 11 years ago

Cú pháp này là optional, sẽ có 2 dạng cú pháp: dạng 1:1 thì là một string bình thường như anh đề xuất bên trên, còn nếu có xuất hiện dấu phẩy thì coi như là dạng globbing.

Theo em, nếu mình làm tính năng này thì ban đầu sẽ tắt hết, trong GUI sẽ có tùy chọn match những trường hợp đơn giản nhất cho người muốn gõ tắt (h -> nh, ...), sau đó trong doc sẽ giải thích cụ thể hơn cho geek. Các match chỉ khi nào thực sự cần thì mới được bật và người dùng phải hiểu thì mới dùng nên vẫn tuân theo POLA.

Narga commented 11 years ago

Đúng là do thói quen người dùng chứ không thể áp đặt quy tắc gõ chung được, bởi thế nên cách gõ cải tiến bạn vừa nêu rất hay, rất tiện lợi nhưng quá khó để làm quen và thành thạo. Khi gõ chữ Việt cách gõ đơn giản giúp người sử dụng làm quen nhanh hơn và dần dần tiếp cận với tính năng mới. Cá nhân mình ủng hộ cách gõ đơn giản làm tieue chuyẩn, người dùng có thể điều chỉnh thêm bằng các tùy chọn. Trở lại vấn đề mình đã nói, khi làm việc nhiều với văn bản, điều quan trọng nhất là tốc độ gõ nhanh, số phím bấm giảm, ít phải điều chỉnh can thiệp nếu gõ hỗn hợp một lượng nhỏ từ khác tiếng Việt (Anh, Pháp, Không dấu, thuật ngữ ...) chính vì vậy theo mình nghĩ mục tiêu tiếp theo mà bộ gõ cần hướng tới là khả năng gõ tắt, tiếp theo là khả năng xử lý nhận biết từ khác tiếng Việt. Với gõ tắt bao gồm gõ tắt tự định nghĩa và gõ tắt theo thói quen, khi ghi tốc kí, các kí tự có thể thay thế và bỏ qua được tận dụng tối đa mà vẫn có thể hiểu được như ví dụ mình đã đề cập.Theo cách của bạn @lewtds theo mình nghĩ thì đơn giản và xử lý nhanh hơn, mở popup làm phân tán và giảm tốc độ gõ tiếng việt (tất nhiên vẫn có thể kích hoạt dạng tùy chọn).

lewtds commented 11 years ago

Vào 21:23 Ngày 11 tháng 3 năm 2013, Nguyễn Đình Quân < notifications@github.com> đã viết:

mục tiêu tiếp theo mà bộ gõ cần hướng tới là khả năng gõ tắt, tiếp theo là khả năng xử lý nhận biết từ khác tiếng Việt.

Gõ tắt đã được bàn đến ở #48 và tự động phân biệt từ khác tiếng Việt cũng đã được implement. Nếu đang dùng bản nhánh develop thì bác có thể bật tính năng này bằng GUI hoặc sửa key skip-non-vietnamese trong file ~/.config/ibus-bogo/config.json thành true.

Với gõ tắt bao gồm gõ tắt tự định nghĩa và gõ tắt theo thói quen, khi ghi tốc kí, các kí tự có thể thay thế và bỏ qua được tận dụng tối đa mà vẫn có thể hiểu được như ví dụ mình đã đề cập.Theo cách của bạn @lewtdshttps://github.com/lewtdstheo mình nghĩ thì đơn giản và xử lý nhanh hơn, mở popup làm phân tán và giảm tốc độ gõ tiếng việt (tất nhiên vẫn có thể kích hoạt dạng tùy chọn).

Khi tính năng gõ tắt được bật và một chuỗi phím đã được match thì chuỗi viết tắt được commit ngay lập tức, popup hiện ra chỉ để đưa ra một số phương án khác nếu người dùng đổi ý (đổi về chuỗi gốc, chọn từ gõ tắt khác...). Người dùng không cần thêm hành động gì để chấp nhận phương án default. Thực ra nói là phân tán thôi nhưng gõ vài hôm là quen hết. Bộ gõ của người Nhật, Hàn, Trung bật popup liên tục mà họ có bận tâm gì đâu.

cmpitg commented 11 years ago

@Narga Bác không đọc kỹ comment của em rồi. Popup hiển thị hay không là do người dùng muốn hay không mà bác, trích:

Nếu có nhiều kết quả thì hiện popup, nếu không thì tự động autocomplete luôn