2012-08-07 2 views
2

일부 열로 구성된 표가 있는데, 그 중 하나는 document_content 열 (저널 내용)이고 텍스트 유형입니다. 나는 내용을 파싱하여 요약서를 얻고 싶다. 나는 초록이 abstract이라는 단어와 introduction 사이의 내용이라고 가정합니다.테이블의 문서 내용에서 요약 가져 오기

여기 내 코드입니다 :

$id = array('1','2','3','4','5','6','7','8','9'); 
$sql = mysql_query('SELECT document_id, document_content FROM tbdocument WHERE document_id IN (' . implode(",", $id) . ')') or die(mysql_error()); 
while ($row = mysql_fetch_array($sql)) { 
    $files[$row['document_id']] = $row['document_content']; 
} 
foreach ($files as $doc_id => $file){ 
    if (strpos($file, 'ABSTRACT')){ 
     if (strpos ($file, 'INTRODUCTION')){ 
      $between = substr($file, (strpos($file, 'ABSTRACT')+8), (strpos($file, 'INTRODUCTION')-13) - strpos($file, 'ABSTRACT')); 
    if (strpos($file, 'Introduction')){ 
      $between = substr($file, (strpos($file, 'ABSTRACT')+8), (strpos($file, 'Introduction')-13) - strpos($file, 'ABSTRACT')); 
    } 
    } 
    else { 
     if (strpos($file, 'Abstract')){ 
      if (strpos ($file, 'Introduction')){ 
       $between = substr($file, (strpos($file, 'Abstract')+8), (strpos($file, 'Introduction')-13) - strpos($file, 'Abstract')); 
      } 
      if (strpos($file, 'INTRODUCTION')){ 
       $between = substr($file, (strpos($file, 'Abstract')+8), (strpos($file, 'INTRODUCTION')-13) - strpos($file, 'Abstract')); 
      } 
     } 
    } 
    $q = mysql_query("INSERT INTO tb_metadata SET document_id = {$doc_id}, metadata_abstract = '{$between}'") or die(mysql_error()); 

} 

그러나 그것은 나에게 빈 결과를 제공합니다. 내 코드에 무슨 문제가 있습니까? 논리의 일부 단순화 외에도 아주 많이 :)

+0

먼저 'strpos' 대신'stripos' (대소 문자 구별)를 사용하여 로직을 상당히 단순화 할 수 있습니다 : http://us2.php.net/stripos –

+0

다음으로 정규 표현식을 고려해 볼 수 있습니다. SQL 또는 PHP 중 하나 여야합니다. –

+0

오, 감사합니다! 'stripos'를 사용하려고합니다. –

답변

0

감사합니다, 당신이 당신의 foreach 루프에 브라켓을 놓치고있어 (이것은 다음과 같아야합니다) :

foreach ($files as $doc_id => $file){ 
    if (strpos($file, 'ABSTRACT')){ 
     if (strpos ($file, 'INTRODUCTION')){ 
      $between = substr($file, (strpos($file, 'ABSTRACT')+8), (strpos($file, 'INTRODUCTION')-13) - strpos($file, 'ABSTRACT')); 
     } 
     if (strpos($file, 'Introduction')){ 
      $between = substr($file, (strpos($file, 'ABSTRACT')+8), (strpos($file, 'Introduction')-13) - strpos($file, 'ABSTRACT')); 
     } 
    } 
    else { 
     if (strpos($file, 'Abstract')){ 
      if (strpos ($file, 'Introduction')){ 
       $between = substr($file, (strpos($file, 'Abstract')+8), (strpos($file, 'Introduction')-13) - strpos($file, 'Abstract')); 
      } 
      if (strpos($file, 'INTRODUCTION')){ 
       $between = substr($file, (strpos($file, 'Abstract')+8), (strpos($file, 'INTRODUCTION')-13) - strpos($file, 'Abstract')); 
      } 
     } 
    } 
    $q = mysql_query("INSERT INTO tb_metadata SET document_id = {$doc_id}, metadata_abstract = '{$between}'") or die(mysql_error()); 

} 

편집 : 또 다른 문제가있을 수 있습니다 그이 ~ 사이의 $는 결코 정의되지 않는 상황 일 수 있습니까? (strpos($file, 'Introduction')-13) - strpos($file, 'Abstract')이 양수가 아닌 값을 반환하면 어떻게됩니까? 그런 다음 텍스트가 잘 리거나 전혀 반환되지 않습니다.

+0

추가 했는데도 작동하지 않습니다. fyi,이 코드를 사용하여 txt 파일을 구문 분석 할 수 있지만 약간의 변경으로이 코드를 사용하여 테이블의 내용을 구문 분석하면 작동하지 않습니다. –

+0

@rosen_ 부품을 주석 처리하고 어떤 부분이 잘못되었는지 알려줄 수 있습니까? 귀하의 SQL SELECT 문이 작동한다고 가정합니까? '$ between '과제는 어떨까요? 우리가 어디에 있어야하는지 알려주세요. –

+0

예, SQL SELECT 문이 잘 작동합니다. 나는 '$ 사이'의 assigment와 혼동했다. '$ between'을 인쇄하려고하면 아무것도 출력하지 않습니다. 하지만 코드는 오류를 반환하지 않습니다, 그냥 빈 결과. –

관련 문제