Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP में रेगेक्स का उपयोग करके स्ट्रिंग को वाक्यों में विभाजित करें


उदाहरण

function sentence_split($text) { 
    $before_regexes = 
        array('/(?:(?:[\'"\x{201E}][\.!?\x{2026}][\'"\x{201D}]\s)|(?:[^\.]\s[A-Z]\.\s)|(?:\b(?:St|Gen|Hon|Prof|Dr|Mr|Ms|Mrs|[JS]r|Col|Maj|Brig|Sgt|Capt|Cmnd|Sen|Rev|Rep|Revd) 
        \.\s)|(?:\b(?:St|Gen|Hon|Prof|Dr|Mr|Ms|Mrs|[JS]r|Col|Maj|Brig|Sgt|Capt|Cmnd|Sen|Rev|Rep|Revd)\.\s[A-Z]\.\s)|(?:\bApr\.\s)|(?:\bAug\.\s)|(?:\bBros\. 
        \s)|(?:\bCo\.\s)|(?:\bCorp\.\s)|(?:\bDec\.\s)|(?:\bDist\.\s)|(?:\bFeb\.\s)|(?:\bInc\.\s)|(?:\bJan\.\s)|(?:\bJul\.\s)|(?:\bJun\.\s)|(?:\bMar\.\s)|(? 
        :\bNov\.\s)|(?:\bOct\.\s)|(?:\bPh\.?D\.\s)|(?:\bSept?\.\s)|(?:\b\p{Lu}\.\p{Lu}\.\s)|(?:\b\p{Lu}\.\s\p{Lu}\.\s)|(?:\bcf\.\s)|(?:\be\.g\.\s)|(?:\besp 
        \.\s)|(?:\bet\b\s\bal\.\s)|(?:\bvs\.\s)|(?:\p{Ps}[!?]+\p{Pe} ))\Z/su', 
        '/(?:(?:[\.\s]\p{L}{1,2}\.\s))\Z/su', 
        '/(?:(?:[\[\(]*\.\.\.[\]\)]* ))\Z/su', 
        '/(?:(?:\b(?:pp|[Vv]iz|i\.?\s*e|[Vvol]|[Rr]col|maj|Lt|[Ff]ig|[Ff]igs|[Vv]iz|[Vv]ols|[Aa]pprox|[Ii]ncl|Pres|[Dd]ept|min|max|[Gg]ovt|lb|ft|c\.?\s 
        *f|vs)\.\s))\Z/su', 
        '/(?:(?:\b[Ee]tc\.\s))\Z/su', 
        '/(?:(?:[\.!?\x{2026}]+\p{Pe} )|(?:[\[\(]*\x{2026}[\]\)]* ))\Z/su', 
        '/(?:(?:\b\p{L}\.))\Z/su', 
        '/(?:(?:\b\p{L}\.\s))\Z/su', 
        '/(?:(?:\b[Ff]igs?\.\s)|(?:\b[nN]o\.\s))\Z/su', 
        '/(?:(?:[\'"\x{201D}]\s*))\Z/su', 
        '/(?:(?:[\.!?\x{2026}] [\x{00BB}\x{2019}\x{201D}\x{203A}"\'\p{Pe}\x{0002}]*\s)|(?:\r?\n))\Z/su', 
        '/(?:(?:[\.!?\x{2026}] [\'"\x{00BB}\x{2019}\x{201D}\x{203A}\p{Pe}\x{0002}]*))\Z/su', 
        '/(?:(?:\s\p{L}[\.!?\x{2026}]\s))\Z/su'); 
    $after_regexes = array('/\A(?:)/su', 
        '/\A(?:[\p{N}\p{Ll}])/su', 
        '/\A(?:[^\p{Lu}])/su', 
        '/\A(?:[^\p{Lu}]|I)/su', 
        '/\A(?:[^p{Lu}])/su', 
        '/\A(?:\p{Ll})/su', 
        '/\A(?:\p{L}\.)/su', 
        '/\A(?:\p{L}\.\s)/su', 
        '/\A(?:\p{N})/su', 
        '/\A(?:\s*\p{Ll})/su', 
        '/\A(?:)/su', 
        '/\A(?:\p{Lu}[^\p{Lu}])/su', 
        '/\A(?:\p{Lu}\p{Ll})/su'); 
    $is_sentence_boundary = array(false, false, false, false, false, false, false, false, false, false, true, true, true); 
    $count = 13; 
    $sentences = array(); 
    $sentence = ''; 
    $before = ''; 
    $after = substr($text, 0, 10); 
    $text = substr($text, 10); 
    while ($text != '') { 
        for ($i = 0; $i < $count; $i++) { 
            if (preg_match($before_regexes[$i], $before) && preg_match($after_regexes[$i], $after)) { 
                if ($is_sentence_boundary[$i]) { 
                    array_push($sentences, $sentence); 
                    $sentence = ''; 
                } 
                break; 
            } 
        } 
        $first_from_text = $text[0]; 
        $text = substr($text, 1); 
        $first_from_after = $after[0]; 
        $after = substr($after, 1); 
        $before .= $first_from_after; 
        $sentence .= $first_from_after; 
        $after .= $first_from_text; 
    } 
    if ($sentence != '' && $after != '') { 
        array_push($sentences, $sentence . $after); 
    } 
    return $sentences; 
} 
$text = "Hello there, hello from Tokyo, Japan, Universe, Earth."; 
print_r(sentence_split($text));

आउटपुट

यह निम्न आउटपुट देगा:

Array ( [0] => Hello there, hello from Tokyo, Japan, Universe, Earth. )

टेक्स्ट को धीरे-धीरे पार किया जाता है। किसी भी समय, वर्तमान टेक्स्ट डेटा चंक के 2 अलग-अलग हिस्से होंगे। इसमें, एक हिस्सा वाक्य सीमा से पहले आने वाले सबस्ट्रिंग उम्मीदवार होगा।

दूसरा हिस्सा वाक्य सीमा के बाद आने वाला सबस्ट्रिंग उम्मीदवार है। पहले 20 रेगेक्स जोड़े स्थितियों का पता लगाते हैं। जब वाक्य सीमाओं की पहचान नहीं होती है, तो before और after को उस नए वाक्य को सहेजे बिना बढ़ाया जाता है।

यदि कोई जोड़ा मेल नहीं खाता है, तो अंतिम 3 जोड़ियों के साथ मिलान का प्रयास किया जाता है, जिससे वाक्य सीमा का पता चलता है।


  1. - C# में नियमित अभिव्यक्तियों का उपयोग करके स्ट्रिंग को कैसे विभाजित करें

    नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग को विभाजित करने के लिए, Regex.Split का उपयोग करें। मान लीजिए हमारी स्ट्रिंग है - string str = Hello\r\nWorld; अब नीचे दिखाए अनुसार Regex.Split का उपयोग करके स्ट्रिंग को विभाजित करें - string[] res = Regex.Split(str, \r\n); C# में नियमित अभिव्यक्ति का उपयोग क

  1. - C# में स्ट्रिंग को स्ट्रिंग सरणी के तत्वों में कैसे विभाजित करें

    वह स्ट्रिंग सेट करें जिसे आप विभाजित करना चाहते हैं। string str = Hello World!; स्ट्रिंग को अलग-अलग तत्वों में विभाजित करने के लिए split() मेथड का उपयोग करें। string[] res = str.Split( ); C# में स्ट्रिंग को स्ट्रिंग सरणी के तत्वों में विभाजित करने का पूर्ण कोड निम्नलिखित है। उदाहरण using System; c

  1. - C# Regex का उपयोग करके व्हाइटस्पेस हटाना

    मान लीजिए हम निम्न स्ट्रिंग str1 से व्हाइटस्पेस हटाना चाहते हैं: string str1 = Brad Pitt; अब Regex Replace का उपयोग करके व्हाइटस्पेस को खाली से बदलें। यहाँ हमने System.Text.RegularExpressions का उपयोग किया है: string str2 = System.Text.RegularExpressions.Regex.Replace(str1, @\s+, ); पूर्ण उदाहरण usi