1 पॉइंट द्वारा GN⁺ 2025-02-09 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • TRRE: Transductive Regular Expressions

  • सारांश
    • यह टेक्स्ट एडिटिंग और grep जैसे कमांड-लाइन टूल्स के लिए regular expressions का एक विस्तार है.
    • यह एक prototype है, इसलिए इसे production environment में उपयोग न करें.
  • परिचय

    • Regular expressions टेक्स्ट में पैटर्न खोजने के लिए एक उपयोगी टूल हैं.
    • टेक्स्ट एडिटिंग के लिए ये स्वाभाविक नहीं लगे, इसलिए एक विस्तार प्रस्तावित किया गया है.
    • इसे Transductive Regular Expressions या trre कहा जाता है.
    • transformations को परिभाषित करने के लिए : चिन्ह का उपयोग किया जाता है.
    • a:b सबसे सरल रूप है, जो a को b से बदलता है.
    • इस अवधारणा को दिखाने के लिए trre नाम का एक कमांड-लाइन टूल बनाया गया है.
  • उदाहरण

    • बुनियादी

      • cat को dog में बदलना:
        $ echo 'cat' | trre 'c:da:ot:g'
        dog
        
      • sed की तरह स्ट्रिंग के सभी matches को replace करना:
        $ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
        Mary had a little cat.
        
      • हटाना:
        $ echo 'xor' | trre '(x:)or'
        or
        
      • जोड़ना:
        $ echo 'or' | trre '(:x)or'
        xor
        
    • transformations के साथ regular expressions

      • alternation का उपयोग:
        $ echo 'cat dog' | trre 'c:bat|d:hog'
        bat hog
        
      • star का उपयोग करके transformation को दोहराना:
        $ echo 'catcatcat' | trre '((cat):(dog))*'
        dogdogdog
        
    • range transformation

      • character range transformation:
        $ echo "regular expressions" | trre "[a:A-z:Z]"
        REGULAR EXPRESSIONS
        
    • generator

      • trre एक ही input के लिए कई output strings बना सकता है.
      • binary sequence:
        $ echo '' | trre -ma ':(0|1){3}'
        000  001  010  011  100  101  110  111
        
  • भाषा विनिर्देशन

    • trre को pattern-matching:pattern-generation की जोड़ी के रूप में परिभाषित किया गया है.
    • pattern-matching एक string या regular expression हो सकता है.
    • pattern-generation सामान्यतः एक string होता है, लेकिन regex भी हो सकता है.
  • यह कैसे काम करता है

    • trre एक विशेष automaton बनाता है जिसे finite-state transducer (FST) कहा जाता है.
    • FST input-output pairs को प्रोसेस करता है.
  • design choices और खुले प्रश्न

    • : की associativity, precedence, implicit epsilon आदि जैसे कई निर्णय लेने की आवश्यकता है.
  • modes और greediness

    • trre दो modes को support करता है:
      • scan mode (default): transformations को क्रम से लागू करता है.
      • match mode: expression के विरुद्ध पूरी string की जांच करता है.
  • determinization

    • nondeterministic automaton को deterministic automaton में बदलने की प्रक्रिया महत्वपूर्ण है.
  • performance

    • NFT (nondeterministic) version sed से थोड़ा धीमा है.
    • जटिल कामों में trre_dft (deterministic version) sed से बेहतर प्रदर्शन कर सकता है.
  • TODO

    • ERE feature set को पूरा करना, पूर्ण Unicode support, efficient range handling आदि.
  • संदर्भ

    • Russ Cox के लेख और Cyril Allauzen, Mehryar Mohri के शोधपत्रों से प्रेरणा ली गई है.

1 टिप्पणियां

 
GN⁺ 2025-02-09
Hacker News टिप्पणियाँ
  • बढ़िया, इस प्रोजेक्ट के आगे विकास की उम्मीद है

    • लगता है कि operator precedence स्वाभाविक नहीं है
    • cat:dog का (cat):(dog) की बजाय ca(t:d)og के रूप में व्याख्यायित होना अजीब है
  • XFST (Xerox Finite-State Transducer) की सिफारिश की गई

    • यह 20+ वर्षों से computational linguistics में इस्तेमाल होने वाला टूल है
    • फ़िनिश morphology analysis में FST के उपयोग का उदाहरण सुना है
  • standard regular expressions के विकल्प के रूप में Rosie Pattern Language की सिफारिश की गई

    • group logic में कठिनाई महसूस करने वालों के लिए यह अधिक maintainable विकल्प हो सकता है
    • संबंधित लिंक: GitLab, Rosie आधिकारिक साइट
  • 1997 में finite-state transducers पर पेपर लिखने का अनुभव साझा किया गया

    • विषय morphology analysis था, और यह कम आंका गया विषय था
    • syntax में : को ab से अधिक मज़बूती से bind करने की सेटिंग सही है या नहीं, यह पूछा गया
  • structural substitution करते समय इसे पर्याप्त नहीं माना गया

    • regular expression matched हिस्से के लिए syntax tree को परिभाषित करता है, इसलिए अगर tree पर सामान्य transformations किए जा सकें तो उपयोगी होगा
  • इस दावे पर सवाल उठाया गया कि regular expressions text editing के लिए अप्राकृतिक हैं

    • प्रोजेक्ट का उद्देश्य इसी दावे पर आधारित है, लेकिन कोई उदाहरण नहीं दिया गया
    • group के उपयोग में लोगों को कठिनाई क्यों होती है, यह समझ में नहीं आता
    • regular expressions की तुलना में इस प्रोजेक्ट का grammar क्यों बेहतर है, यह दिखाने वाले उदाहरण चाहिए
  • C code की बहुत साफ-सुथरी होने के लिए प्रशंसा की गई

    • README में theory.pdf लिंक गलत है और उसे ठीक करने की ज़रूरत है
  • * या + का उपयोग न करने की सलाह पर सवाल उठाया गया

    • इससे grammar अधिक जटिल हो जाएगा, लेकिन शायद इन्हें अनुमति न देना बेहतर होगा
  • पहला उदाहरण अजीब लगा

    • echo 'cat' | trre 'c:da:ot:g' का परिणाम अजीब है
    • syntax tree कैसे बन रहा है, यह समझना कठिन है
    • MS-DOS दौर का search/replace तरीका अधिक सहज लगा
  • यह सवाल उठाया गया कि क्या उदाहरण वास्तव में प्रोग्राम के output हैं

    • हो सकता है grammar की समझ कम हो, लेकिन उदाहरण गलत लगते हैं
    • echo 'cat dog' | trre 'c:bat|d:hog' का परिणाम अजीब है