2 điểm bởi GN⁺ 2023-08-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • Công cụ tự động tạo phím tắt gõ từ kho văn bản của chính bạn, đồng thời tạo phím tắt nhập liệu dùng trong email và Slack
  • Phân tích kho văn bản để đề xuất các phím tắt giúp tiết kiệm nhiều ký tự nhất khi gõ, và tạo tệp cấu hình cho Autokey, chương trình phím tắt bàn phím trên Linux
  • Tìm các n-gram xuất hiện thường xuyên trong kho văn bản để tạo ứng viên thay thế bằng cách diễn đạt ngắn hơn, và xếp hạng đề xuất theo [số ký tự tiết kiệm được] * [tần suất cụm từ]
  • Việc chọn phím tắt hướng tới các dạng viết tắt dễ nhớ; những từ viết tắt mà bạn muốn gõ như từ bình thường có thể bị loại bằng blacklist, và các cụm từ dùng thường xuyên hơn sẽ được ưu tiên gán các dạng viết tắt dễ nhớ hơn
  • Cũng cung cấp công cụ phân tích Slack Data Export để dùng tin nhắn Slack làm kho văn bản
    • Chỉ quản trị viên workspace Slack mới có thể export
    • Chỉ export được public channel
    • Cần thay USERNAME_TO_EXPORT bằng tên người dùng Slack rồi chạy parse_slack.py
    • Quy trình có bao gồm việc xóa Slack export bằng srm
  • Luồng sử dụng cơ bản là đưa kho văn bản vào data/corpus/*.txt, dùng find_suggested_phrases.py để tạo 200 ứng viên hàng đầu vào output/suggested_shortcuts.yaml, sau đó chuyển các mục mong muốn sang shortcuts.yaml và dùng generate_autokeys.py để tạo tệp cấu hình Autokey
  • Cài đặt phụ thuộc bằng install.sh, hiện được kiểm thử trên Python 3.10.12
  • Autokey hiện chỉ hỗ trợ X11 trên Linux và không hỗ trợ Wayland
  • Cấu hình Autokey được tạo ra chỉ được áp dụng khi Chrome đang được focus; tác giả cũng chia sẻ trải nghiệm rằng trong terminal và vscode, việc trùng giữa các lệnh Linux ngắn hoặc tên biến với dạng viết tắt gây ra nhiều vấn đề hơn

1 bình luận

 
GN⁺ 2023-08-31
Ý kiến trên Hacker News
  • Tôi cũng đã viết một bài blog có kèm video về dự án: https://erikschluntz.com/software/2023/08/26/compressing-my-...
    Hiếm hoi thay, đây là một dự án phụ thực sự tiết kiệm cho tôi nhiều thời gian hơn thời gian đã bỏ ra :)

  • Ý tưởng rất thông minh, nhưng nếu cách hoạt động thay đổi theo thời gian thì có lẽ tôi sẽ không muốn dùng
    Ví dụ, nếu chạy 6 tháng một lần, năm ngoái dbdebug còn năm nay lại thành database, thì nó có thể phá hỏng trí nhớ cơ bắp và thói quen
    Vì vậy tôi tò mò hơn về một phiên bản phổ dụng có thể giúp ích ổn định cho mọi người khi chạy trên sách, email, tin nhắn do hàng nghìn người thuộc nhiều bối cảnh và ngữ cảnh khác nhau viết
    Việc mở rộng t thành the, st thành something có vẻ hiển nhiên, nhưng tôi tự hỏi liệu có thể tạo một bộ tối thiểu khoảng 200~500 mục để mọi người cùng học, giống như một “bàn phím tiêu chuẩn” hay không

    • Nên xem Evans Basic English Code. Đây là một hệ thống tốc ký dựa trên Phillips Code dùng cho điện báo, tuy hơi cũ, nhưng các từ phổ biến nhất khá hữu ích cho viết lách hoặc gõ phím
      https://archive.org/details/evansbasicenglis00evan
      Nên dùng PDF; tệp TXT có chất lượng OCR kém nên gần như không dùng được
      Cái này cũng hữu ích: https://en.m.wikipedia.org/wiki/Most_common_words_in_English
    • Chính vì lý do đó nên nó không chạy tự động. Nó xuất ra suggested_shortcuts.yaml, rồi bạn sao chép từ đó vào shortcuts.yaml, nên có thể kiểm soát thủ công các từ tắt thực sự được kích hoạt :)
    • Tôi nghĩ một phiên bản phổ dụng như vậy rốt cuộc cũng giống bàn phím tốc ký thôi
    • Trước đây tôi từng phát hiện Yublin, đúng là một nỗ lực như vậy: tạo các viết tắt 1~3 chữ cái cho 600 từ phổ biến nhất trong tiếng Anh
      Và đúng như vậy, the -> t nằm ngay đầu danh sách: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...
    • Một giải pháp chung có khả năng chỉ khớp lưng chừng với nhiều người
      Nhà hóa học có thể thường gõ dropper nên muốn dp, còn công chức có thể thích department hơn
  • Nếu không phải người bản ngữ tiếng Trung thì có thể bạn không biết, nhưng tiếng Trung có tính năng như vậy tích hợp sẵn
    Chính thức gọi là 双拼(Shuangpin), là cách nhập toàn bộ từ bằng cách gõ 2 ký tự tiếng Anh cho mỗi từ: https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
    Ngay cả khi không dùng Shuangpin chính thức, hầu hết bộ gõ tiếng Trung đều hỗ trợ chức năng 简拼 tương tự cho các cụm từ phổ biến, cho phép nhập cụm nhiều từ bằng cách chỉ gõ chữ cái tiếng Anh đầu tiên của mỗi từ
    Ví dụ để nhập xiexie, tức “thank you” trong tiếng Trung, thường chỉ cần gõ xx là hầu hết bộ gõ tiếng Trung sẽ tự động gợi ý chữ Hán tương ứng

    • Với bàn phím bính âm tốt, việc nhập nhanh các câu thông dụng rất dễ
      Ví dụ 「你想吃什麼」, nghĩa là “what do you want to eat”, được nhập bằng n x c s m
    • Gần đây tôi nghe một podcast thú vị về cách nhập tiếng Trung trên bàn phím tiêu chuẩn: https://radiolab.org/podcast/wubi-effect
    • Tôi tự hỏi việc dùng XLB để viết Xiao long bao có phải cũng là một ví dụ không. Tôi không biết đây là một hệ thống rộng hơn; hay thật
    • Cái này có vẻ hoàn toàn không liên quan đến chủ đề đang thảo luận
  • Tôi rất thích thấy những dự án như thế này
    Cuối tuần rồi tôi xử lý một vấn đề tương tự, nhưng nhắm tới toàn bộ từ chứ không phải các viết tắt trong từ điển tự tạo, và trong trường hợp tổng quát thì điều chỉnh theo ngữ liệu văn bản đã cho
    Điều tôi tò mò là “liệu có thể tạo một bộ tự động sửa lỗi được điều chỉnh theo một ngữ liệu văn bản nhất định không?”. Ví dụ trong tài liệu có dùng nhiều cụm dài như data augmentation, tôi muốn xem liệu có thể tự động hóa việc đó không
    Cách tiếp cận là tính độ bất ngờ của từ đơn và 2-gram trên bộ ngữ liệu NYT, thêm trọng số cho các từ có trong chỉ mục mục tiêu cần điều chỉnh, rồi tạo cấu trúc dữ liệu trie được gán trọng số theo độ bất ngờ để dùng như một dạng tự động hoàn thành nâng cao
    Lời giải đang hoạt động ở đây: https://github.com/capjamesg/autowrite/blob/main/autocomplet...
    Hiện chưa có tài liệu, tôi dự định thêm trong vài ngày tới; nếu muốn trao đổi thì có thể để lại GitHub Issue

    • Nghe khá giống https://github.com/wolfgarbe/SymSpell
      Cũng có thể tôi đang hiểu nhầm rằng bạn đang cố tìm cách diễn đạt cùng một ý theo cách sáng tạo hơn
  • Như một ý tưởng mở rộng, có thể gắn thêm một keylogger theo dõi việc nhập liệu. Tất nhiên bản thân điều đó cũng là một nhược điểm
    Cách làm là học các cụm từ người dùng hay dùng, tìm những cụm phổ biến rồi đề xuất từ viết tắt, sau đó nhẹ nhàng nhắc người dùng về từ viết tắt mỗi khi họ nhập cả cụm
    Như vậy ai cũng có thể cài đặt, rào cản ban đầu thấp, và năng suất có thể tăng dần theo thời gian

    • Tôi từng muốn tạo một bàn phím có keylogger tích hợp tự động hoàn thành khi nhấn một phím đặc biệt
      Ý tưởng là lưu dữ liệu trong kho lưu trữ an toàn trên thiết bị để không trở thành rủi ro bảo mật
    • Một phần có thể triển khai bằng bộ gõ (IME). Bộ gõ thực chất là một keylogger được chấp thuận có thể chỉnh sửa đầu vào, và chủ yếu cần cho nhập liệu tiếng Trung/tiếng Nhật
      Một bộ gõ cung cấp tự động hoàn thành tiếng Anh trên desktop giống như điện thoại, hoặc cung cấp từ viết tắt bằng framework bộ gõ như fcitx5, có vẻ là một khái niệm thú vị
    • Tôi tò mò nó sẽ hoạt động thế nào
      Có phải kiểu mỗi tuần tự động xuất lịch sử Slack, tính tần suất từ, rồi dựa trên kết quả thấy được để tự tay chỉ định nhiều cụm mở rộng không?
    • Tôi từng đào khá sâu để làm prototype một thứ tương tự
      Cấu trúc là dùng Bluetooth Keyboard -> ESP32 làm host bàn phím, rồi gửi phím bấm ra USB và vào file
      Nếu có tiền thì cũng có các logger bàn phím USB/PS2 lưu dữ liệu lên đĩa
    • Tôi nghĩ có lẽ nên có các từ viết tắt được chuẩn hóa thì tốt hơn
      Nếu khiến mọi người hội tụ theo hướng đó thì cũng giúp nhất quán giữa nhiều máy tính, và hữu ích khi dùng nhiều máy
  • Với tôi, ngoài một vài tình huống chat, có vẻ gõ phím hiếm khi là nút thắt cổ chai
    Thay vào đó chỉ có những tương tác mà băng thông bổ sung của video hoặc âm thanh sẽ hữu ích hơn. Tôi tò mò liệu các từ viết tắt kiểu này có thực sự tiết kiệm thời gian làm việc không

    • Động lực chính là các cuộc trò chuyện Slack rất nhanh và những email trả lời khá theo khuôn
      Ví dụ như các trao đổi kiểu “Bạn có thể gửi ảnh chụp màn hình lên không?” hoặc phản hồi bằng cách gửi link Calendly
      Khi viết bài dài, việc suy nghĩ nhanh hơn tốc độ gõ cũng thường gây bực bội, nên nó cũng giúp ở phần đó
    • Tiết kiệm thời gian là một khía cạnh, nhưng nó cũng có thể hữu ích cho những người bị chấn thương do căng cơ lặp lại hoặc hội chứng ống cổ tay
    • Gõ nhanh hơn không hẳn là vấn đề giảm tổng thời gian, mà là giảm độ trễ giữa các ý nghĩ
      Gõ phím là thao tác thủ công cản trở suy nghĩ, nên càng giảm thời gian đi vào và thoát ra khỏi việc gõ, ta càng có thể quay lại suy nghĩ nhanh hơn
    • Tôi tò mò liệu khả năng gõ chạm có ảnh hưởng không
  • Tôi đã dành khá nhiều thời gian để làm mở rộng văn bản cho mình dùng
    Nó khó hơn tôi nghĩ rất nhiều, và khó tìm được các alias đủ giá trị mà không bị kích hoạt sai quá thường xuyên
    Vì hằng ngày tôi giao tiếp bằng nhiều ngôn ngữ nên việc này càng phức tạp hơn, hiện giờ tôi đã tách alias theo từng ứng dụng
    Dù vậy vẫn còn kích hoạt sai, và nhìn chung tôi đang đi đến kết luận rằng cần có ký tự phân tách

    • Ikclaks đang làm một việc thú vị trên bố cục bàn phím magic sturdy: https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
    • Tôi thêm các tổ hợp ký tự như kk, zz, qq ở trước alias, vì chúng hiếm khi xuất hiện ở chữ cái đầu của từ hoặc tên biến
      Ví dụ qqme là chữ ký email của tôi
      Sẽ tốt nếu công cụ trong bài gốc cũng đề xuất alias cho những cụm dài hơn những gì tôi thấy trong README. Tôi nghe nói TextExpander cho MacOS làm được như vậy, nhưng tôi không phải người dùng Mac
    • Điểm cân bằng hợp lý có thể là chỉ dùng viết tắt cho những từ phổ biến nhất, còn phần còn lại thì tìm bằng tìm kiếm mờ trong một popup GUI đơn giản rồi dán vào
    • Nếu dùng nhiều ngôn ngữ, có lẽ số phím tắt có thể dùng sẽ ít hơn nhiều
      Một trong các TODO là tạo cả danh sách chặn các alias cần tránh, dựa trên corpus văn bản thực tế đã phân tích
  • Thú thật cá nhân mà nói, tôi chưa bao giờ thích kiểu viết tắt SMS dùng trên điện thoại trước thời iPhone
    Đó là một trong những lý do tôi hầu như không dùng SMS hay tin nhắn văn bản trừ khi thật cần thiết
    Tôi đã dùng mở rộng văn bản từ những ngày đầu của TextExpander chạy trên iOS và macOS, và dù bàn phím iPhone có tốt đến đâu thì việc nhập đi nhập lại địa chỉ nhà, bản đồ nhà/công ty, thông tin công việc/cá nhân vẫn bất tiện. TextExpander đã giúp rất nhiều
    Sau đó TextExpander chuyển sang mô hình thuê bao nên tôi bắt đầu tìm lựa chọn thay thế, vì cá nhân tôi cho rằng mô hình thuê bao không phù hợp với kiểu công cụ này. Snippets đi kèm Powerpack của Alfred là lựa chọn thay thế tốt hơn
    macOS/iOS cũng có “Text Replacements” tích hợp, nhưng ngoài các ứng dụng của Apple thì nó thường xuyên thất bại. Thứ ở đây giống Text Replacement của Apple, và tôi giữ tính năng đó lại, còn phần còn lại thì quản lý bằng Alfred. Thành thật mà nói, nếu có thể hoàn toàn thoát khỏi Alfred thì có lẽ tôi sẽ chuyển sang hướng này
    Tuy nhiên tôi muốn dùng ký tự phân tách cho các phần mở rộng để không cản trở việc gõ thông thường. Hiện tôi dùng , làm ký tự phân tách, vì trong tiếng Anh sau dấu phẩy luôn có khoảng trắng, còn phần mở rộng của tôi chỉ xảy ra khi gõ dấu phẩy và một đoạn chữ ngắn không có khoảng trắng. Vị trí phím dấu phẩy cũng thuận tiện khi gõ chạm
    Ngay cả nếu vẫn dùng Text Replacement của OS, tôi nghĩ mình cũng sẽ đưa ký tự phân tách vào để tránh từ bị tự động mở rộng trong các tình huống ngoài ý muốn
    https://textexpander.com
    https://www.alfredapp.com

    • Tôi đã mất khá nhiều thời gian để chỉnh xử lý ký tự phân tách trong cấu hình Autokey được tạo ra
      Ngoại lệ tinh vi nhất là .py. Thông thường . là ký tự phân tách, nhưng đặt ngoại lệ trước py để không gây cản trở khi nhập tên file Python
  • Vì nhiều năm dùng tự động hoàn thành, trình độ tiếng Anh là ngôn ngữ thứ hai của tôi đã tệ đi rồi
    Tôi biết từ nhưng thường không nhớ cách viết nên quên cả cách phát âm, và những công cụ như thế này có vẻ sẽ xóa sạch nốt phần kỹ năng còn lại

  • Thay vì phải ghi nhớ từ khóa, liệu có thể dùng các chữ cái đầu không?
    Vài tuần trước tôi đã thử nghiệm bằng ChatGPT, nhưng có vẻ không có phần mềm hiện có nào có tính năng như vậy
    Tôi không giỏi lập trình, nhưng hy vọng ai đó sẽ làm ra nó: https://imgur.com/a/0o4zLwT

    • Tôi đã làm một prototype có ý tưởng tương tự. Bạn cứ viết tắt tùy ý, rồi ChatGPT sẽ sửa lại sau mỗi câu
      Độ chính xác khá ổn, nhưng khi nó đoán sai thì rất khó chịu
      Ngay cả khi hoạt động hoàn hảo, khi dùng thực tế thì gánh nặng nhận thức lớn hơn nhiều so với việc gõ như bình thường
      Nếu cực kỳ tập trung, tôi có thể dùng chữ viết tắt mà đạt được tốc độ gõ thoải mái như thường ngày, nhưng không thể vượt qua, và cuối cùng tự nhiên lại quay về gõ bình thường
      Tuy nhiên, tôi gõ nhanh và viết khá nhiều, nên prototype này về cơ bản đang cố thắng một quy trình trong não đã được tối ưu hóa mạnh mẽ suốt khoảng 30 năm. Có thể nó sẽ phù hợp hơn với những người vốn không gõ nhanh