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

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

उदाहरण

function sentence_split($text) {
   $before_regexes =
      array('/(?:(?:[\'\"„][\.!?…][\'\"”]\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',
   '/(?:(?:[\.!?…]+\p{Pe} )|(?:[\[\(]*…[\]\)]* ))\Z/su',
   '/(?:(?:\b\p{L}\.))\Z/su',
   '/(?:(?:\b\p{L}\.\s))\Z/su',
   '/(?:(?:\b[Ff]igs?\.\s)|(?:\b[nN]o\.\s))\Z/su',
   '/(?:(?:[\"”\']\s*))\Z/su',
   '/(?:(?:[\.!?…]
[\x{00BB}\x{2019}\x{201D}\x{203A}\"\'\p{Pe}\x{0002}]*\s)|(?:\r?\n))\Z/su',
   '/(?:(?:[\.!?…]
[\'\"\x{00BB}\x{2019}\x{201D}\x{203A}\p{Pe}\x{0002}]*))\Z/su',
   '/(?:(?:\s\p{L}[\.!?…]\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 रेगेक्स जोड़े पदों का पता लगाते हैं। जब वाक्य की सीमाओं की पहचान नहीं की जाती है, तो उस नए वाक्य को सहेजे बिना पहले और बाद में वृद्धि की जाती है।

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


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

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

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

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

  1. सी # रेगेक्स का उपयोग कर सफेद जगहों को हटा रहा है

    मान लें कि हम निम्नलिखित स्ट्रिंग str1 से व्हाइटस्पेस हटाना चाहते हैं। string str1 = "Brad Pitt"; अब, रिक्त स्थान को रिक्त स्थान से बदलने के लिए Regex प्रतिस्थापन का उपयोग करें। यहां, हमने System.Text.RegularExpressions का उपयोग किया है। string str2 = System.Text.RegularExpressions.Regex.