विनीत तरीके से पाठ प्रतिपादन के तरीके?


12

मैं भाषण मान्यता के साथ उपयोग के लिए एक एमएसीएस एक्सटेंशन लिख रहा हूं, और मैं एक विशेष सुविधा के साथ मदद की तलाश कर रहा हूं। कुछ शब्द वाक् पहचानकर्ता (ड्रैगन) लगातार खराब पहचानते हैं - इससे कोई फर्क नहीं पड़ता कि आप इसे कितनी बार प्रशिक्षित करते हैं, यह सिर्फ कुछ शब्दों को पहचानने पर चूसना होगा। उसी समय जब आप किसी विषय पर लिख रहे होते हैं या कोडिंग करते हैं तो आप बार-बार एक ही शब्द का उपयोग कर रहे होंगे।

इसलिए मैंने एक ऐसी विधा लिखी है जो बफ़र में शब्दों को कैसे प्रस्तुत किया जाता है इसे बदलने के लिए ओवरले का उपयोग करता है। यह शब्द में एक यादृच्छिक अक्षर लेता है, इसे एक यादृच्छिक रंग में रेखांकित करता है, और इसके शीर्ष पर एक यादृच्छिक डाइक्रिटिकल मार्क (उच्चारण, उमलूट, आदि) डालता है। यहाँ एक स्क्रीनशॉट है (आपको अंक / अंडरलाइन देखने के लिए ज़ूम इन करना होगा):

यहाँ छवि विवरण दर्ज करें

फिर आप कह सकते हैं, "बैंगनी पी बाल" और यह शब्द के लिए एक बैंगनी अंडरलाइन के साथ दिखेगा 'a' के साथ एक विशेष चिह्न के साथ जो बालों की तरह दिखता है और आपके लिए उस शब्द को टाइप करता है। इसलिए ऊपर दिए गए स्क्रीनशॉट में कहा गया है कि इससे आपके लिए "regexp-quote" टाइप करने के लिए emacs होगा।

विचार यह है कि इससे आप किसी भी ऐसे शब्द का उल्लेख कर सकते हैं जिसे आपने पहले ही प्रयोग कर लिया है, जिसे पहचानने वाले शब्दों के सीमित सेट का उपयोग करके ऑनस्क्रीन लगातार पहचानने में अच्छा है।

यह बहुत अच्छी तरह से काम करता है, कभी-कभी एक टकराव को छोड़कर। इसे बनाने के लिए मैं शब्दों को लगातार उसी तरह से संदर्भित करना सीख सकता हूं जिस तरह से मैं शब्द के md5 हैश से बाइट्स का उपयोग कर रहा हूं (random)या एक एल्गोरिथम होने के कारण परिवर्तनों को ऐसे असाइन करता हूं जिससे टकराव से बचा जाता है। मैंने केवल 6 आसानी से अलग-अलग रंगों को पाया है (यह कठिन है जब अंडरलाइन केवल एक वर्ण चौड़ा और एक एकल पिक्सेल मोटा है) और 3 आसानी से भेद करने योग्य अंक (एक दूसरे से अलग बताने के लिए आसान और उपरोक्त पर एक रेखांकन के साथ भी भ्रमित नहीं है) लाइन या अंडरलाइनिंग के साथ ओवरलैपिंग), ऊपर के स्रोत के शीर्ष पर देखा जाता है।

टकराव की आवृत्ति को कम करने के लिए मुझे रेंडरिंग को बदलने के लिए और तरीकों की आवश्यकता है। आदर्श रूप से एक प्रतिपादन संशोधन होगा:

  • बाकी टेक्स्ट से घबराना नहीं चाहिए। यह मुझे उलटा वीडियो संपत्ति के उदाहरण के लिए खारिज करने के लिए प्रेरित करता है।
  • अन्य परिवर्तनों के साथ आसानी से भ्रमित नहीं होना चाहिए। पिछली लाइन पर रेखांकित करने के लिए ओवरलाइन आसानी से गलत हैं। जब तक आपके फ़ॉन्ट का आकार अव्यवहारिक रूप से विशाल न हो, तब तक बहुत सारे समान चिह्न दिखाई देते हैं।
  • जहां अन्य परिवर्तन हैं, उसके पास स्थानिक हों। अभी एक बार मेरी आंख को लक्ष्यीकरण वर्ण मिल गया है, सभी जानकारी वहां है, मार्कर, रेखांकित, और पत्र।
  • एक निश्चित चौड़ाई के फॉन्ट (कोडिंग के लिए आवश्यक) के साथ अच्छी तरह से काम करें जो सही ढंग से डायक्रिटिकल मार्क्स को प्रस्तुत करता है (मुझे मार्क्स को कॉन्सोल से DejaVu Sans Mono में बदलना था ताकि मार्क्स सही तरीके से प्रस्तुत कर सकें)
  • लैटिन वर्णमाला के अक्षरों पर काम करें। उदाहरण के लिए अरबी संयोजन अंक हैं, लेकिन वे लैटिन वर्णमाला वर्णों पर संयोजन नहीं करते हैं।
  • अक्षर रंग नहीं बदलें, क्योंकि यह पहले से ही वाक्य रचना हाइलाइटिंग के लिए इस्तेमाल किया जा रहा है।
  • वास्तव में emacs के साथ emacs में उल्लेखनीय हो lisp;)

शायद विशेष यूनिकोड वर्ण हैं जो प्रतिपादन को नियंत्रित करते हैं जो नई संभावनाओं को खोलने के लिए दुरुपयोग किया जा सकता है? या मोटे तौर पर रेखांकित करने का एक तरीका है ताकि मैं आसानी से अधिक रंगों को भेद कर सकूं? या कुछ अन्य अस्पष्ट emacs आपको यूनिकोड के अलावा पात्रों के शीर्ष पर अंक प्रदान करने की सुविधा देते हैं?


आपके प्रश्न का सीधा उत्तर नहीं है, लेकिन संभवत: नए चरित्रों को प्रदर्शित करने के लिए ओवरले का उपयोग करने वाले विचारों की एक जोड़ी। एक विचार दो ओवरले को एक साथ समाप्‍त / सैंडविच करने के लिए होगा - उन्‍हें एक नियमित वर्ण के रूप में एक ही स्‍थान में फिट करने के लिए मजबूर करना - जैसे, पहला वर्ण रंग के साथ एक पतली रेखा है (char-to-string ?\uFEFF)और दूसरा एक लक्षित वर्ण है जिसे घटाया गया है आकार ताकि वे दोनों फिट हों। एक अन्य विचार एक ऊर्ध्वाधर स्ट्राइक-थ्रू ( कुछ फोंट में उपलब्ध है , लेकिन सभी के लिए नहीं) का उपयोग करना होगा जैसा कि लाइब्रेरी vline.el emacswiki.org/emacs/VlineMode
कानून सूची

@lawlist: यूनिकोड लाइन का विचार दिलचस्प है, यह मुझे एक 'साइडलाइन' करने देगा। क्या आपके पास कोई विचार है कि निम्नलिखित चरित्र के आकार को कैसे कम किया जाए? मैं शायद प्रदर्शन संपत्ति के साथ उपयोग के लिए एक छवि उत्पन्न कर सकता हूं लेकिन AFAICT एक छवि में पाठ को प्रस्तुत करने के लिए emacs प्राप्त करने का कोई तरीका नहीं है, इसलिए मुझे छवि को emacs के बाहर बनाना होगा।
जोसेफ गार्विन

यह टिप्पणी पिछली टिप्पणी (जो मैंने हटा दी थी) को रोक दिया है, और निम्न लिंक में कोड को भी अपडेट किया गया है - इसमें तीन उदाहरण हैं (जिनमें से एक उत्तर के समान है जिसे मैंने वर्तमान थ्रेड में नीचे पोस्ट किया है): stackoverflow .com / प्रश्न / 23744237 /…
कानून

जवाबों:


4

एक और संभावना होगी कि लाइन नंबर प्रदर्शित करें और शब्द से पहले लाइन नंबर कहें, या, क्योंकि सटीक लाइन नंबर प्राप्त करने के लिए अधिक परेशान होना मुश्किल होगा, आप एल्गोरिथ्म को + या - 5 या 10 की संख्या के भीतर खोज सकते हैं। कहते हैं।

या शायद एक क्षेत्र या फ़ंक्शन घोषित करें जिसमें आप काम कर रहे हैं और सभी खोजें केवल वहां दिखती हैं। मुझे लगता है कि टकराव को सीमित करेगा।

आप दिए गए रंग में एक शब्द के पहले या बाद में यूनिकोड के प्रतीकों को प्रस्तुत करने में उनकी मदद कर सकते हैं। और किसी दूसरे रंग में शब्द को बॉक्स या रेखांकित भी करें। इस तरह आप 6 शब्द रंग * 6 प्रतीक रंग * एन प्रतीक संभावनाएं हो सकते हैं। आप शायद 10 अच्छे प्रतीक पा सकते हैं और 360 संयोजन कर सकते हैं। उदाहरण के लिए आप यहाँ शब्द बिल्ली को संदर्भित करने के लिए "ब्लू येलो स्टार" कह सकते हैं।

यहाँ छवि विवरण दर्ज करें

यदि तारा बहुत ज़्यादा झुंझला रहा है, तो आप युगल: बॉक्स, और दो अलग-अलग: रेखांकित कर सकते हैं।

तो आप यहाँ शब्द "नीली पीली लाल" का उपयोग करते हुए पेड़ का उल्लेख कर सकते हैं जो आपको उपयोग करने के लिए 216 संयोजन देगा।

यहाँ छवि विवरण दर्ज करें


1
मैं यह देखने के लिए कुछ इंतजार कर रहा था कि क्या कोई अन्य चाल के साथ आएगा, लेकिन मैं शायद डबल अंडरलाइन रंग के साथ जा रहा हूं क्योंकि प्रतीकों को जोड़ने से इंडेंटेशन फेंक सकता है। स्वीकार किया, धन्यवाद।
जोसेफ गार्विन

2

क्या आपने ऐस-जंप-मोड के बारे में सुना है ?

यह आपके द्वारा निर्दिष्ट किसी भी आवश्यकता को पूरा नहीं करता है, लेकिन ऐसा लगता है कि यह पूरी तरह से फिट बैठता है जिसे आप प्राप्त करने की कोशिश कर रहे हैं। यह उपयोगकर्ता को केवल 2 या 3 शब्द कहकर किसी भी शब्द को निर्दिष्ट करने की अनुमति देगा।

आप उन पात्रों के सेट को परिभाषित कर सकते हैं जो आपको प्रदान करता है, ताकि आप उन व्यंजन से बच सकें जो भेद करना मुश्किल है। तब उपयोग केवल "ए नौ को ठीक करें" कह सकता है , और उस 9 वें शब्द को ठीक कर सकता है जो इसके साथ शुरू होता है a


Tsalsburg की पोस्ट पर मेरी टिप्पणी देखें कि इक्का-कूद-मोड क्यों काम नहीं करता।
जोसेफ गार्विन

1

दिलचस्प सवाल। मुझे यकीन है कि आपको कुछ दिलचस्प सुझाव मिलेंगे।

एक मामूली सुझाव जो मुझे होता है, वह है अंडरलाइनिंग के लिए अलग-अलग रंगों और शैलियों का उपयोग करना। Elisp पुस्तिका, नोड देखें Face Attributesविशेषता के बारे में :underlineऔर उसके :colorऔर :styleघटकों।

आप इसके लिए विशेषता :boxऔर विभिन्न लाइन चौड़ाई और शैलियों के साथ भी प्रयोग कर सकते हैं , लेकिन यह शायद बहुत परेशान है।


1

मैं लक्ष्य शब्द का चयन करने के लिए एक वैकल्पिक तरीका प्रस्तावित करके जवाब दूंगा। आधे शब्दों को हाइलाइट करें (बेतरतीब ढंग से चुने गए)। उपयोगकर्ता "हाँ" कहता है यदि लक्ष्य शब्द हाइलाइट किया गया है और अन्यथा "नहीं"। यदि उपयोगकर्ता ने "हां" कहा, तो उन सभी शब्दों को लें जो हाइलाइट किए गए थे और बेतरतीब ढंग से उनमें से आधे को उजागर करते हैं। यदि उपयोगकर्ता ने "नहीं" कहा, तो यादृच्छिक रूप से उन आधे शब्दों को उजागर करें जिन्हें हाइलाइट नहीं किया गया था। फिर से उपयोगकर्ता इंगित करता है कि क्या लक्ष्य शब्द "हां" या "नहीं" कहकर उजागर किया गया है। तब तक दोहराएं जब तक कि केवल लक्षित शब्द उजागर न हो जाए।

इस दृष्टिकोण के कुछ लाभ:

  • यह काम करता है, चाहे आपके पास स्क्रीन पर कितने शब्द हों।
  • आपको फैंसी रंग, फ़ॉन्ट या प्रतीकों की आवश्यकता नहीं है। एक मोनोक्रोम डिस्प्ले पर्याप्त है।
  • बहुत कम संज्ञानात्मक भार क्योंकि यह बताना आसान है कि कोई शब्द हाइलाइट किया गया है या नहीं।

खामी: आपको अक्सर "हां" और "नहीं" कहना होगा। हालांकि, यह विचार के निम्नलिखित भिन्नता द्वारा तय किया गया है: शब्दों को उजागर न करें लेकिन उनके लिए रंगों का उपयोग करें। आप कहते हैं कि आपके पास 6 आसानी से अलग-अलग रंग हैं। इसका मतलब है कि यदि आपके पास स्क्रीन पर 100 शब्द हैं, तो लक्ष्य शब्द का चयन करने के लिए औसतन 2.6 रंगों के नामकरण की आवश्यकता होती है। यदि 1000 शब्द हैं, तो आपको औसतन 3.9 रंगों का नाम देना होगा।


1
दुर्भाग्य से बोले गए शब्दों की संख्या एक भ्रामक मीट्रिक है। समाधान की इस शैली के साथ मुद्दा यह धारणा / कार्रवाई दौर यात्राएं हैं। मुझे रंग देखना है, फिर प्रतिक्रिया करना है, फिर देखना, प्रतिक्रिया करना, देखना है। प्रत्येक के बीच में देखने के लिए रुकने के बिना 3 शब्द कहना एक समाधान की तुलना में अभ्यास में तेज होना चाहिए जहां आप करते हैं, खासकर ड्रैगन के पास खराब विलंबता है। यदि ये दौर यात्राएं एक मुद्दा नहीं थीं तो मैं सिर्फ इक्का-कूद-मोड का उपयोग करूंगा। डियाक्रिटिकल निशान के साथ मैं एक बार स्क्रीन पर देख सकता हूं और प्रत्येक शब्द के बाद प्रतिक्रिया करने के लिए ड्रैगन को रोकने के लिए मुझे जो कुछ भी कहने की आवश्यकता है उसके पूरे तार को जान सकता है।
जोसेफ गार्विन

1

निम्नलिखित चित्रमय Emacs संस्करणों के लिए एक xpm छवि के साथ एक ओवरले का उपयोग करने वाला एक उदाहरण है जो xpm छवि प्रारूप का समर्थन करता है। यह 11 पिक्सेल चौड़ा है; 20 पिक्सेल उच्च; और 4 संभावित रंगों की एक उपयोगकर्ता निर्दिष्ट संख्या है। मैं एक मैक पर हूँ जो कि स्नो लेपर्ड 10.6.8 पर चल रहा है और जब मैं Emacs का उपयोग कर रहा हूँ तो वह फ़ॉन्ट पसंद करता है -*-Courier-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1- frame-char-width11 है और frame-char-height20 है। मैंने कैपिटल लेटर "A" के बाईं ओर एक पतली वर्टिकल येलो लाइन जोड़ी है कस्टम चित्र कैसे बनाएं, इसका उदाहरण। उस बिंदु पर वर्ण के प्रतिस्थापन को प्रोग्रामिक रूप से (char-after (point))और उस नंबर का उपयोग करके बनाया जा सकता है - जो इस मामले में कैपिटल अक्षर "ए" के लिए 65 है - और उपयुक्त चर को प्रतिस्थापित करना - जैसे, (cond ((eq (char-after (point)) 65) cap-ltr-a-xpm) . . .- और उस चर का उपयोग करना। ओवरले प्लेसमेंट - जैसे,(overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm)। यह काटे गए बफ़र्स दोनों के लिए बहुत अच्छी तरह से काम करता है और वर्ड-रैप के साथ भी क्योंकि शब्द 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 बिटमैप के बारे में गलत बयान को हटा दिया।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.