从表中的文档内容中获取摘要

时间:2012-08-07 21:34:34

标签: php

我的表包含一些列,其中一列是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());

}

但它给我空白的结果。我的代码出了什么问题?非常感谢你:))

1 个答案:

答案 0 :(得分: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')返回非正值,该怎么办?然后文本将被截断或根本不返回。