วิธีในการแสดงข้อความแตกต่างกันอย่างสงบเสงี่ยม?


12

ฉันกำลังเขียนส่วนขยาย emacs สำหรับใช้กับการรู้จำเสียงและฉันกำลังมองหาความช่วยเหลือเกี่ยวกับคุณลักษณะเฉพาะ คำบางคำที่ตัวจดจำเสียงพูด (Dragon) รู้จำได้ไม่ดีอย่างต่อเนื่อง - มันไม่สำคัญว่าคุณจะฝึกมันกี่ครั้งก็ตามมันจะดูดที่จำคำบางคำได้ ในเวลาเดียวกันโดยทั่วไปเมื่อคุณเขียนหัวข้อหรือเมื่อเขียนโปรแกรมคุณจะใช้คำเดียวกันหลายครั้งซ้ำแล้วซ้ำอีก

ดังนั้นฉันจึงเขียนโหมดที่ใช้การซ้อนทับเพื่อเปลี่ยนวิธีการแสดงคำในบัฟเฟอร์ มันใช้ตัวอักษรสุ่มในคำขีดเส้นใต้ในสีแบบสุ่มและวางเครื่องหมายกำกับการออกเสียงแบบสุ่ม (สำเนียงเครื่องหมายบนอากาศ ฯลฯ ) เหนือส่วนบนของมัน นี่คือภาพหน้าจอ (คุณอาจต้องซูมเพื่อดูเครื่องหมาย / ขีดเส้นใต้):

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณสามารถพูดว่า "ผมสีม่วง p" และมันจะมองหาคำที่มีสีม่วงขีดเส้นใต้ภายใต้ 'a' ที่มีเครื่องหมายกำกับออกเสียงที่ดูเหมือนผมและพิมพ์คำนั้นสำหรับคุณ ดังนั้นในภาพหน้าจอด้านบนที่บอกว่าจะทำให้ emacs พิมพ์ "regexp-quote" ให้คุณ

แนวคิดนี้ช่วยให้คุณสามารถอ้างอิงคำใด ๆ ที่คุณใช้ไปแล้วบนหน้าจอโดยใช้ชุดคำที่ จำกัด ซึ่งตัวจดจำจะจดจำได้ดีอยู่เสมอ

มันใช้งานได้ดียกเว้นในบางครั้งอาจมีการชนกัน เพื่อให้ฉันสามารถเรียนรู้ที่จะอ้างอิงคำอย่างเดียวกับที่ฉันใช้ bytes จาก md5 hash ของคำแทนที่จะ(random)เป็นอัลกอริธึมหรือกำหนดการเปลี่ยนแปลงที่หลีกเลี่ยงการชน ฉันพบเพียง 6 สีที่แยกแยะได้ง่าย (มันยากเมื่อขีดเส้นใต้มีความกว้างเพียงหนึ่งตัวอักษรและหนาพิกเซลเดียว) และ 3 เครื่องหมายที่แยกได้ง่ายสามารถแยกแยะได้ง่าย (ง่ายต่อการแยกออกจากกัน เส้นหรือทับซ้อนกับขีดเส้นใต้) เห็นที่ด้านบนของแหล่งที่มาด้านบน

ฉันต้องการวิธีเพิ่มเติมในการแก้ไขการแสดงผลเพื่อลดความถี่การชน เป็นการดีที่การแก้ไขการเรนเดอร์จะ:

  • ไม่ต้องสั่นสะเทือนจากข้อความที่เหลือ สิ่งนี้นำฉันไปสู่การยกเลิกคุณสมบัติของวิดีโอผกผัน
  • ไม่สับสนได้ง่ายกับการเปลี่ยนแปลงอื่น ๆ การขีดเส้นทับนั้นเข้าใจผิดได้ง่ายสำหรับขีดเส้นใต้ในบรรทัดก่อนหน้า เครื่องหมายกำกับออกเสียงจำนวนมากมีลักษณะคล้ายกันเว้นแต่ขนาดตัวอักษรของคุณจะใหญ่มาก
  • อยู่ใกล้กับที่ซึ่งการเปลี่ยนแปลงอื่น ๆ ตอนนี้เมื่อตาของฉันพบว่าตัวละครกำหนดเป้าหมายข้อมูลทั้งหมดที่มีเครื่องหมายเครื่องหมายขีดเส้นใต้และตัวอักษร
  • ทำงานได้ดีกับตัวอักษรความกว้างคงที่ (จำเป็นสำหรับการเข้ารหัส) ที่แสดงเครื่องหมายกำกับอย่างถูกต้อง (ฉันต้องเปลี่ยนไปใช้ DejaVu Sans Mono จาก Consolas เพื่อให้เครื่องหมายแสดงผลอย่างถูกต้อง)
  • ทำงานตัวอักษรละติน มีเครื่องหมายรวมเป็นภาษาอาหรับ แต่ไม่รวมกับตัวอักษรละติน
  • ไม่เปลี่ยนสีตัวอักษรเนื่องจากมันถูกใช้เพื่อเน้นไวยากรณ์ไปแล้ว
  • จริง ๆ แล้วทำได้ใน emacs กับ emacs lisp;)

อาจมีอักขระยูนิโค้ดพิเศษที่ควบคุมการเรนเดอร์ที่อาจถูกละเมิดเพื่อเปิดโอกาสใหม่ ๆ ? หรือวิธีการขีดเส้นใต้หนาขึ้นดังนั้นฉันอาจแยกความแตกต่างของสีได้ง่ายขึ้น? หรือคุณสมบัติ emacs ที่คลุมเครืออื่น ๆ ให้คุณแสดงเครื่องหมายที่ด้านบนของตัวละครนอกเหนือจาก Unicode?


ไม่ใช่คำตอบที่ตรงกับคำถามของคุณ แต่อาจเป็นแนวคิดสองสามข้อที่ใช้การซ้อนทับเพื่อสร้างตัวละครใหม่ แนวคิดหนึ่งคือการต่อกัน / แซนวิชเข้าด้วยกันสองภาพซ้อนทับ - บังคับให้พอดีกับช่องว่างเดียวกับตัวอักษรปกติ - เช่นตัวอักษรตัวแรกเป็นเส้นบาง ๆ ที่มีการเพิ่มสี(char-to-string ?\uFEFF)และอีกตัวเป็นเป้าหมายที่ลดลง ขนาดดังนั้นพวกเขาทั้งสองพอดี อีกแนวคิดหนึ่งคือการใช้การโจมตีแนวดิ่ง (มีให้ในแบบอักษรบางตัว แต่ไม่ทั้งหมด) คล้ายกับสิ่งที่ใช้ในไลบรารีvline.el emacswiki.org/emacs/VlineMode
กฎหมาย

@ กฎหมาย: ความคิดของบรรทัด Unicode นั้นน่าสนใจฉันจะทำ 'sideline' คุณมีความคิดวิธีการลดขนาดของตัวละครต่อไปนี้หรือไม่? ฉันอาจจะสร้างภาพเพื่อใช้กับคุณสมบัติการแสดงผล แต่ AFAICT ไม่มีวิธีที่จะทำให้ emacs แสดงข้อความเป็นภาพได้ดังนั้นฉันต้องสร้างภาพนอก emacs
โจเซฟการ์วิน

ความคิดเห็นนี้แทนที่ความคิดเห็นก่อนหน้า (ที่ฉันลบ) และรหัสในลิงก์ต่อไปนี้ได้รับการอัปเดตเช่นกัน - มีสามตัวอย่าง (หนึ่งในนั้นเหมือนกับคำตอบที่ฉันโพสต์ด้านล่างในกระทู้ปัจจุบัน): stackoverflow .com / คำถาม / 23744237 / …
กฎหมาย

คำตอบ:


4

ความเป็นไปได้อีกอย่างหนึ่งก็คือการแสดงหมายเลขบรรทัดและพูดหมายเลขบรรทัดหน้าคำหรือเนื่องจากการค้นหาเพื่อให้ได้หมายเลขบรรทัดที่แน่นอนน่ารำคาญคุณอาจมีการค้นหาอัลกอริทึมภายใน + หรือ - 5 หรือ 10 บรรทัดของจำนวนที่คุณ พูด.

หรืออาจประกาศภูมิภาคหรือฟังก์ชั่นที่คุณกำลังทำงานและให้การค้นหาทั้งหมดดูที่นั่นเท่านั้น ฉันเดาว่าจะ จำกัด การชน

คุณสามารถแสดงสัญลักษณ์ยูนิโค้ดหลังหรือก่อนคำในสีที่กำหนดเพื่อช่วยให้โดดเด่น และยังทำเครื่องหมายช่องหรือขีดเส้นใต้คำนั้นด้วยสีอื่น วิธีนี้คุณสามารถมี 6 คำสี * 6 สัญลักษณ์สี * ความเป็นไปได้ของสัญลักษณ์ N คุณอาจพบ 10 สัญลักษณ์ที่ดีและมี 360 ชุด ตัวอย่างเช่นคุณสามารถพูดว่า "ดาวสีเหลืองสีฟ้า" เพื่ออ้างถึงคำว่าแมวที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

หากดาวดังเกินไปคุณสามารถจับคู่: กล่องและอีกสองอัน: ขีดเส้นใต้

ดังนั้นคุณสามารถอ้างถึงต้นไม้คำที่นี่โดยใช้ "สีน้ำเงินสีเหลืองสีแดง" ซึ่งจะทำให้คุณใช้ชุดค่าผสม 216

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันรอสักครู่เพื่อดูว่าใครจะมาพร้อมกับเทคนิคอื่น ๆ แต่ฉันอาจจะไปด้วยสีขีดเส้นใต้สองครั้งเนื่องจากการเพิ่มสัญลักษณ์สามารถสลัดการเยื้อง ได้รับการยอมรับขอบคุณ
โจเซฟการ์วิน

2

คุณเคยได้ยินโหมด ace-jump-modeหรือไม่?

ไม่เป็นไปตามข้อกำหนดใด ๆ ที่คุณระบุ แต่ดูเหมือนว่าเหมาะสมกับสิ่งที่คุณพยายามจะบรรลุ มันจะช่วยให้ผู้ใช้สามารถระบุคำใด ๆ โดยพูดเพียง 2 หรือ 3 คำ

คุณสามารถกำหนดชุดอักขระที่เสนอให้คุณเพื่อให้คุณสามารถหลีกเลี่ยงพยัญชนะที่แยกแยะได้ยาก จากนั้นใช้เพียงแค่อาจจะบอกว่า"แก้ไขเก้า"และแก้ไขคำที่ 9 aที่เริ่มต้นด้วย


ดูความคิดเห็นของฉันเกี่ยวกับโพสต์ของ tmalsburg เพราะเหตุใด ace-jump-mode ไม่ทำงาน
โจเซฟการ์วิน

1

คำถามที่น่าสนใจ ฉันพนันว่าคุณจะได้รับคำแนะนำที่น่าสนใจ

ข้อเสนอแนะเล็กน้อยที่เกิดขึ้นกับฉันคือการใช้สีและสไตล์ที่แตกต่างกันสำหรับการขีดเส้นใต้ ดูคู่มือ Elisp โหนดFace Attributesเกี่ยวกับแอตทริบิวต์:underlineและ:colorและ:styleส่วนประกอบ

นอกจากนี้คุณยังสามารถทดสอบกับแอตทริบิวต์:boxและความกว้างและสไตล์ของเส้นที่แตกต่างกันไปได้


1

ฉันจะตอบโดยเสนอทางเลือกอื่นเพื่อเลือกคำเป้าหมาย ไฮไลต์ครึ่งคำ (เลือกแบบสุ่ม) ผู้ใช้บอกว่า "ใช่" ถ้าคำเป้าหมายถูกเน้นไว้และ "ไม่" เป็นอย่างอื่น หากผู้ใช้บอกว่า "ใช่" ให้ใช้คำทั้งหมดที่ถูกไฮไลต์และไฮไลต์แบบสุ่มครึ่งคำ หากผู้ใช้บอกว่า "ไม่" ให้ไฮไลต์คำที่ไม่ได้ไฮไลต์แบบสุ่มครึ่งคำ ผู้ใช้อีกครั้งระบุว่าคำเป้าหมายถูกเน้นด้วยการพูดว่า "ใช่" หรือ "ไม่" ทำซ้ำจนกระทั่งมีการเน้นเฉพาะคำเป้าหมาย

ประโยชน์บางประการของวิธีการนี้:

  • ใช้ได้ผลไม่ว่าคุณจะมีกี่คำบนหน้าจอ
  • คุณไม่จำเป็นต้องใช้สีแบบอักษรหรือสัญลักษณ์แฟนซี จอแสดงผลขาวดำก็เพียงพอแล้ว
  • ภาระการรับรู้ต่ำมากเพราะมันง่ายที่จะบอกว่าคำนั้นถูกเน้นหรือไม่

ข้อเสียเปรียบ: คุณต้องพูดว่า "ใช่" และ "ไม่" บ่อยเกินไป อย่างไรก็ตามสิ่งนี้ได้รับการแก้ไขโดยการเปลี่ยนแปลงของแนวคิดดังต่อไปนี้: อย่าเน้นคำ แต่ใช้สีสำหรับพวกเขา คุณบอกว่าคุณมี 6 สีที่แยกแยะได้ง่าย ซึ่งหมายความว่าหากคุณมี 100 คำบนหน้าจอการเลือกคำเป้าหมายต้องใช้การตั้งชื่อโดยเฉลี่ย 2.6 สี หากมี 1,000 คำคุณจะต้องตั้งชื่อ 3.9 สีโดยเฉลี่ย


1
น่าเสียดายที่จำนวนคำที่พูดเป็นเมตริกที่ทำให้เข้าใจผิด ปัญหาของการแก้ปัญหาในลักษณะนี้คือมันมีการรับรู้ / การเดินทางไปกลับ ฉันต้องดูสีจากนั้นตอบสนองแล้วดูตอบสนองดู การพูด 3 คำโดยไม่ต้องหยุดมองระหว่างแต่ละรายการจะต้องเร็วกว่าการฝึกฝนวิธีแก้ปัญหาที่คุณทำโดยเฉพาะอย่างยิ่งเมื่อ Dragon มีเวลาแฝงที่ไม่ดี หากการเดินทางไปกลับเหล่านี้ไม่เป็นปัญหาฉันจะใช้โหมด ace-jump-mode ด้วยเครื่องหมายกำกับการออกเสียงฉันสามารถดูที่หน้าจอหนึ่งครั้งและรู้ว่าสายทั้งหมดของสิ่งที่ฉันต้องพูดโดยไม่ต้องหยุดเพื่อให้ Dragon ตอบสนองหลังจากแต่ละคำ
โจเซฟการ์วิน

1

ต่อไปนี้เป็นตัวอย่างการใช้โอเวอร์เลย์ที่มีอิมเมจ xpm สำหรับเวอร์ชัน Emacs แบบกราฟิกที่สนับสนุนรูปแบบอิมเมจ xpm กว้าง 11 พิกเซล; สูง 20 พิกเซล; และมีจำนวนสีที่ผู้ใช้ได้ระบุ 4 สี ฉันใช้ Mac เสือดาวหิมะ Leopard 10.6.8 และตัวอักษรที่ฉันชอบเมื่อใช้ Emacs คือ-*-Courier-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1- frame-char-widthคือ 11 และframe-char-height20 ฉันเพิ่มเส้นสีเหลืองแนวตั้งบาง ๆ ทางด้านซ้ายของตัวอักษร "A" เป็นตัว ตัวอย่างของวิธีการวาดภาพที่กำหนดเอง การแทนที่ตัวอักษร ณ จุดสามารถทำได้โดยใช้โปรแกรม(char-after (point))และรับหมายเลขนั้น - ซึ่งในกรณีนี้คือ 65 สำหรับตัวพิมพ์ใหญ่ "A" - และแทนที่ตัวแปรที่เหมาะสม - เช่น(cond ((eq (char-after (point)) 65) cap-ltr-a-xpm) . . .- และใช้ตัวแปรนั้นใน การวางซ้อน - เช่น(overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm). วิธีนี้ใช้ได้ผลดีกับทั้งบัฟเฟอร์ที่ถูกตัดทอนและด้วย word-wrap เนื่องจากdisplayคุณสมบัติการซ้อนทับของอักขระที่อยู่ตรงกลางของคำไม่ทำให้การตัดคำคิดว่าส่วนแรกของคำอยู่ที่ท้ายบรรทัดก่อนหน้า . แน่นอนว่าต้องใช้เวลาในการสร้างไลบรารีแบบกำหนดเองสำหรับภาพ xpm ที่ชื่นชอบ

ImageMagick มีความสามารถในการผลิต xpm กึ่งความถูกต้องของตัวละครที่เฉพาะเจาะจงขึ้นอยู่กับตระกูลตัวอักษรและขนาดที่เฉพาะเจาะจง แต่มันไม่แม่นยำอย่างที่ฉันหวังไว้ - นี่คือลิงค์ไปยังคำแนะนำสำหรับการใช้ยูทิลิตี้ภายนอก: https: / /stackoverflow.com/a/14168154/2112489 โดยสรุปผู้ใช้ควรเตรียมพร้อมที่จะใช้เวลาในการปรับแต่งภาพ xpm ตามความชอบของเขา

(defun xpm-example ()
(interactive)
"Doc-string"
  (let* (
      (cap-ltr-a-xpm `(image :type xpm :mask nil :ascent center :data
        "/* XPM */
        static char * letters_xpm[] = {
        /* columns rows colors chars-per-pixel */
        /* columns = 1 pixel in width -- see also (frame-char-width) */
        /* rows = 1 pixel in height -- see also (frame-char-height) */
        \"11 20 4 1\",
        \". c #000000\",
        \"+ c #FF0000\",
        \"@ c #7F0000\",
        \"% c yellow\",
        \"%..........\",
        \"%....++....\",
        \"%....++....\",
        \"%..++..++..\",
        \"%..++..++..\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++++++++++\",
        \"%++++++++++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%++......++\",
        \"%..........\"};"))  )
    (overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm)))

@wasamasa - ขอบคุณ - ฉันลบข้อความผิดพลาดที่เกี่ยวข้องกับ XBM บิตแมป
ฏหมาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.