개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.09 11:03

similar_text 함수 사용 시 오류 해결 방법

목록
  • NestJS전문가 11일 전 2025.07.09 11:03 인기
  • 664
    1
저는 PHP에서 similar_text 함수를 사용하여 두 문자열의 유사도 비교를 하려고 합니다.
아래 코드에서 similar_text 함수를 사용하여 두 문자열의 유사도 비교를 하려고 합니다.
php

$word1 = "apple";

$word2 = "app";

similar_text($word1, $word2, $percent);

echo $percent;


여기서 $percent 변수는 두 문자열의 유사도 퍼센트를 나타내는 값이 담겨있다고 합니다.
하지만 이 변수의 값이 항상 100%가 아니라는 것을 발견했습니다.
이러한 문제가 발생하는 이유는 무엇이며, 이 문제를 해결할 방법이 있을까요?

    댓글목록

    profile_image
    나우호스팅  11일 전



    similar_text 함수는 두 문자열의 유사도 퍼센트를 계산할 때, 두 문자열의 길이도 고려합니다. 따라서, 두 문자열의 길이가 다를수록 유사도 퍼센트가 낮아질 수 있습니다.

    예를 들어, "apple"과 "app"의 유사도 퍼센트를 계산할 때, "apple"은 5글자이고 "app"은 3글자이므로, 유사도 퍼센트가 60%로 계산됩니다. 만약 두 문자열의 길이가 같다면, 유사도 퍼센트가 100%로 계산됩니다.

    이 문제를 해결하기 위해서는, 두 문자열의 길이를 고려하지 않고 유사도 퍼센트를 계산하는 방법을 사용해야 합니다. PHP에서 제공하는 levenshtein_distance 함수를 사용하여 두 문자열의 유사도 퍼센트를 계산할 수 있습니다.

    다음은 PHP에서 levenshtein_distance 함수를 사용하여 두 문자열의 유사도 퍼센트를 계산하는 예제입니다.

    #hostingforum.kr
    php
    
    function levenshtein_distance($str1, $str2) {
    
        $m = strlen($str1);
    
        $n = strlen($str2);
    
        $dp = array_fill(0, $m + 1, array_fill(0, $n + 1, 0));
    
    
    
        for ($i = 0; $i <= $m; $i++) {
    
            $dp[$i][0] = $i;
    
        }
    
        for ($j = 0; $j <= $n; $j++) {
    
            $dp[0][$j] = $j;
    
        }
    
    
    
        for ($i = 1; $i <= $m; $i++) {
    
            for ($j = 1; $j <= $n; $j++) {
    
                if ($str1[$i - 1] == $str2[$j - 1]) {
    
                    $dp[$i][$j] = $dp[$i - 1][$j - 1];
    
                } else {
    
                    $dp[$i][$j] = 1 + min($dp[$i - 1][$j], $dp[$i][$j - 1], $dp[$i - 1][$j - 1]);
    
                }
    
            }
    
        }
    
    
    
        return $dp[$m][$n];
    
    }
    
    
    
    function similar_text($str1, $str2) {
    
        $distance = levenshtein_distance($str1, $str2);
    
        $max_len = max(strlen($str1), strlen($str2));
    
        return (1 - ($distance / $max_len)) * 100;
    
    }
    
    
    
    $word1 = "apple";
    
    $word2 = "app";
    
    echo similar_text($word1, $word2);
    
    


    이 예제에서는 levenshtein_distance 함수를 사용하여 두 문자열의 유사도 퍼센트를 계산합니다. levenshtein_distance 함수는 두 문자열의 유사도 퍼센트를 계산할 때, 두 문자열의 길이를 고려하지 않습니다. 따라서, 두 문자열의 길이가 다를수록 유사도 퍼센트가 낮아지지 않습니다.

    2025-07-09 11:04

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,581건 / 76 페이지

검색

게시물 검색