0

PHP에서 KMP 코드를 사용하여 단어 사이의 문자열 일치를 수행 할 수 있습니다. KMP 알고리즘을 사용하여 텍스트와 텍스트를 일치시키는 문자열을 사용할 수 있을지 궁금합니다. 그것은 가능하거나 불가능합니까? 어떻게 2 텍스트 사이의 문자열 일치를 찾는 데 사용할 수 있습니다.Knuth-Morris-Pratt 알고리즘을 사용하여 텍스트와 텍스트의 문자열 일치를 검색 할 수 있습니까?

여기 KMP 알고리즘의 핵심입니다 : 내가 텍스트에서 단어를 찾아 사용하려는 경우

<?php 
    class KMP{ 
     function KMPSearch($p,$t){ 
     $result = array(); 
     $pattern = str_split($p); 
     $text = str_split($t); 
     $prefix = $this->preKMP($pattern); 
    // print_r($prefix); 

    // KMP String Matching 
    $i = $j = 0; 
     $num=0; 
     while($j<count($text)){ 
      while($i>-1 && $pattern[$i]!=$text[$j]){ 
     // if it doesn't match, then uses then look at the prefix table 
      $i = $prefix[$i]; 
      } 
      $i++; 
      $j++; 
     if($i>=count($pattern)){ 
     // if its match, find the matches string potition 
     // Then use prefix table to swipe to the right. 
      $result[$num++]=$j-count($pattern); 
      $i = $prefix[$i]; 
      } 
     } 
    return $result; 
     } 

     // Making Prefix table with preKMP function 
     function preKMP($pattern){ 
     $i = 0; 
     $j = $prefix[0] = -1; 
     while($i<count($pattern)){ 
      while($j>-1 && $pattern[$i]!=$pattern[$j]){ 
      $j = $prefix[$j]; 
      } 
      $i++; 
      $j++; 
      if(isset($pattern[$i])==isset($pattern[$j])){ 
      $prefix[$i]=$prefix[$j]; 
      }else{ 
      $prefix[$i]=$j; 
      } 
     } 
     return $prefix; 
     } 
    } 
    ?> 

내가 내 index.php에이 클래스를 호출.

이것은 내 코드에서 수행해야 할 단계입니다. (1). 텍스트 1 (2)을 입력했습니다. 텍스트 2 (3)을 입력했습니다. 나는 텍스트 1이 패턴이되기를 원한다. (모든 단어는 텍스트 1에서 패턴으로 취급한다.) (4). 내 코드에서 텍스트 2의 텍스트 1에있는 모든 패턴을 찾을 수 있기를 바랍니다. (5). 마지막으로, 내 코드는 유사성의 비율을 보여줄 수 있습니다.

여러분 모두 저를 도울 수 있고 가르쳐 주길 바랍니다. 나는 그 대답을 어디에서나 찾아 왔지만 아직 그것을 찾을 수는 없다. 적어도 당신은 저를 가르 칠 수 있습니다.

+0

"2 개의 텍스트 사이의 문자열 일치"는 무엇을 의미합니까? – Laney

+0

의미 : 예 여기에 2 개의 텍스트가 있습니다. 텍스트 1 및 텍스트 2 : 텍스트 1 : 내 휴가는 정말 굉장했습니다. 우리 할머니 집 앞에 해변이 있습니다. 해변에 가기 위해 걸어 가야합니다. 텍스트 2 : 방금 무료로 하루를 보냈습니다. 내 휴가가 시작되고 나는 해변에 가고 싶다. 나는 잘 알려지지 않은 해변 인지도에서 멋진 해변을 발견했다. 이 해변을 찾으려면 숲을 걸어야합니다. 나는 텍스트 1과 텍스트 2를 비교하고 싶습니다. 일치하는 문자열을 얻었습니다. 내 휴일 및 해변. 그 문자열은 텍스트 1과 텍스트 2에서 정확히 알 수 있기 때문에 – Hikaru18

답변

-1

두 텍스트 모두에있는 단어를 모두 찾으려면 문자열 검색 알고리즘을 사용하지 마십시오. 첫 번째 텍스트의 모든 단어를 해시 테이블에 추가하고 두 번째 텍스트를 반복하고 해시 테이블에있는 단어를 출력 목록에 추가 할 수 있습니다.

최악의 경우 선형 시간 복잡성을 원할 경우 해시 테이블 대신 trie를 사용할 수 있지만 사용하기 쉽고 실용적이기 때문에 해시 테이블을 사용하기 시작합니다. 목적.

+0

제안 해 주셔서 감사합니다. 그러나, 나는 여전히 2 개의 텍스트 사이의 유사도 백분율을 찾기 위해 그 알고리즘을 사용해야합니다. 당신은 표절 탐지를 알고 있습니다. 이 알고리즘으로 두 텍스트 사이의 유사성 백분율을 찾을 수 있습니까? – Hikaru18

+0

@ Hikaru18 유사도 백분율에 대한 정의는 무엇입니까? – kraskevich

+0

나는 텍스트의 유사성을 찾은 후에. 나는 내 코드가 유사성의 비율의 수를 보여주기를 원한다. 텍스트 1이 텍스트 2와 28 % 비슷하다. – Hikaru18

관련 문제