2012-08-07 74 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

首先,您可以通過使用'stripos'(不區分大小寫)而不是'strpos'來顯着簡化您的邏輯:http://us2.php.net/stripos – 2012-08-07 21:40:07

+0

接下來,您可以考慮一個正則表達式解決方案,它可以無論是SQL還是PHP。 – 2012-08-07 21:41:34

+0

@ctrahey哦,謝謝!我會嘗試使用'stripos' – 2012-08-07 21:49:41

回答

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()); 

} 

編輯:另一個問題可能是有可能是$ between之間沒有定義的情況?如果(strpos($file, 'Introduction')-13) - strpos($file, 'Abstract')返回非正值,該怎麼辦?然後文本將被截斷或者根本不返回。

+0

我已經添加了它,但它仍然不起作用。 fyi,我可以使用此代碼從txt文件解析,但是當我嘗試使用此代碼(稍作更改)解析表的內容時,它不起作用。 – 2012-08-07 21:52:11

+0

@rosen_你可以註釋掉部分並告訴我們哪部分出錯了嗎?我假設你的SQL'SELECT'語句正在工作? '$ between'分配怎麼樣?讓我們知道我們應該在哪裏尋找。 – 2012-08-07 21:58:03

+0

是的,SQL'SELECT'語句運行良好。我混淆了'$ between'分配。當我嘗試打印'$ between'時,它不打印任何東西。但代碼不會返回錯誤,它只是空白的結果。 – 2012-08-07 22:11:43