한글 조사처리 함수 > IT 기술백서

[code]

class Josa

{

  private static function execute($str, $firstVal, $secondVal)

  {

      try {

        // $laststr = $str{mb_strlen($str) – 1};

        $laststr = mb_ord( mb_substr($str, mb_strlen($str) – 1, 1) );

        

        // 한글의 제일 처음과 끝의 범위밖일 경우는 오류

        if ($laststr < 0xAC00 || $laststr > 0xD7A3) {

            return $str;

        }

    

        $lastCharIndex = ($laststr – 0xAC00) % 28;

        // 종성인덱스가 0이상일 경우는 받침이 있는경우이며 그렇지 않은경우는 받침이 없는 경우

        if($lastCharIndex > 0) {

          // 받침이 있는경우

          // 조사가 ‘로’인경우 ‘ㄹ’받침으로 끝나는 경우는 ‘로’ 나머지 경우는 ‘으로’

          if($firstVal == ‘으로’ && $lastCharIndex == 8) {

            $str .= $secondVal;

          } else {

            $str .= $firstVal;

          }

        } else {

          // 받침이 없는 경우

          $str .= $secondVal;

        }

      } catch (Exception $e) {

        //e.printStackTrace();

      }

      return $str;

  }

  public static function convert($str) {

    $pattern = ‘~([^\s]+)\{([^\}]+)\}([^\s])~isu’;

    return preg_replace_callback($pattern, function ($matches) {

      return self::execute($matches[1], $matches[2], $matches[3]);

    }, $str);

  }

}

[/code]

 

사용예

[code]

echo Josa::convert(“사냥꾼{이}가 오리{을}를 사냥해서 고기{을}를 다듬고 요리{을}를 만들어 먹고 있었습니다.  늑대{이}가 나타나 ‘사냥꾼{아}야~ 오리{아}야~’ 소리쳤습니다.”);

 

// 사냥꾼이 오리를 사냥해서 고기를 다듬고 요리를 만들어 먹고 있었습니다. 늑대가 나타나 ‘사냥꾼아~ 오리야~’ 소리쳤습니다.[/code]

 

참고:  https://okky.kr/article/549842

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤