2012-08-02 28 views
5

我有tb_sentence表:不能存储DOCUMENT_ID

========================================================================= 
| id_row | document_id | sentence_id |   sentence_content  | 
========================================================================= 
| 1 |  1  | 0  | Introduction to Data Mining. | 
| 2 |  1  | 1  | Describe how data mining.  | 
| 3 |  2  | 0  | The boss is right.    | 
========================================================================= 

我想令牌化的sentence_content,所以tb_tokens表将包含:

========================================================================== 
| tokens_id | tokens_word | tokens_freq | sentence_id | document_id | 
========================================================================== 
|  1  | Introduction |  1 |  0  |  1  | 
|  2  | to   |  1 |  0  |  1  | 
|  3  | Data   |  1 |  0  |  1  | 
|  4  | Mining  |  1 |  0  |  1  | 
|  5  | Describe  |  1 |  1  |  1  | 
etc... 

这里是我的代码:

$sentence_clean = array(); 
$q1 = mysql_query("SELECT document_id FROM tb_sentence ORDER BY document_id ") or die(mysql_error()); 
while ($row1 = mysql_fetch_array($q1)) { 
    $doc_id[] = $row1['document_id']; 
} 
$q2 = mysql_query('SELECT sentence_content, sentence_id, document_id FROM tb_sentence ') or die(mysql_error()); 
while ($row2 = mysql_fetch_array($q2)) { 
    $sentence_clean[$row2['document_id']][] = $row2['sentence_content']; 
} 
foreach ($sentence_clean as $kal) { 
    if (trim($kal) === '') 
     continue; 
    tokenizing($kal); 
} 

具有标记功能的是:

function tokenizing($sentence) { 
    foreach ($sentence as $sentence_id => $sentences) { 
     $symbol = array(".", ",", "\\", "-", "\"", "(", ")", "<", ">", "?", ";", ":", "+", "%", "\r", "\t", "\0", "\x0B"); 
     $spasi = array("\n", "/", "\r"); 
     $replace = str_replace($spasi, " ", $sentences); 
     $cleanSymbol = str_replace($symbol, "", $replace); 
     $quote = str_replace("'", "\'", $cleanSymbol); 
     $element = explode(" ", trim($quote)); 
     $elementNCount = array_count_values($element); 

     foreach ($elementNCount as $word => $freq) { 
      if (ereg("([a-z,A-Z])", $word)) { 
       $query = mysql_query(" INSERT INTO tb_tokens VALUES ('','$word','$freq','$sentence_id', '$doc_id')"); 
      } 
     } 
    } 
} 

问题是document_id无法读取,无法插入tb +令牌表中。如何打电话给那些document_id?谢谢:)

编辑问题: 每个单词(标记化的结果)有document_idsentence_id。我的问题是不能拨打document_id。如何在每个字词中调用sentence_iddocument_id

+0

提出问题的好工作。除了......“问题是document_id不能被读取并且不能被插入到tb +令牌表中 - 你能更精确吗?出了什么问题? – Smandoli 2012-08-02 12:25:28

+0

@Smandoli对不起,如果我的英语不好。每个'sentence_content'都有'document_id'。我需要在document_id中插入标记词,但是我无法读取document_id – bruine 2012-08-02 12:32:56

+0

没有'$ row ['document_id']'因为您没有在第二个查询的选择列表中包含'document_id'。 – 2012-08-02 12:36:03

回答

1

我认为你不需要这些代码:

$q1 = mysql_query("SELECT document_id FROM tb_sentence ORDER BY document_id ") or die(mysql_error()); 
while ($row1 = mysql_fetch_array($q1)) { 
    $doc_id[] = $row1['document_id']; 
} 

阵列的$ DOC_ID是从未使用过

if (trim($kal) === '') 
     continue; 

$ KAL是一个数组,也不需要修剪

$sentence_clean[$row2['document_id']][] = $row2['sentence_content']; 

因为你要记录sentence_id,它应该是$ row2 ['sentence_id']不是[]

(当然你应该确保,不会有同一DOCUMENT_ID相同sentence_id否则你应该Concat的话)

这是我几更正:

$sentence_clean = array(); 
$q2 = mysql_query('SELECT sentence_content, sentence_id, document_id FROM tb_sentence ') or die(mysql_error()); 
while ($row2 = mysql_fetch_array($q2)) { 
    $sentence_clean[$row2['document_id']][$row2['sentence_id']] = $row2['sentence_content']; 
} 

foreach ($sentence_clean as $doc_id => $kal) { 
    tokenizing($kal, $doc_id); 
} 

function tokenizing($sentence, $doc_id) { 
    foreach ($sentence as $sentence_id => $sentences) { 
     $symbol = array(".", ",", "\\", "-", "\"", "(", ")", "<", ">", "?", ";", ":", "+", "%", "\r", "\t", "\0", "\x0B"); 
     $spasi = array("\n", "/", "\r"); 
     $replace = str_replace($spasi, " ", $sentences); 
     $cleanSymbol = str_replace($symbol, "", $replace); 
     $quote = str_replace("'", "\'", $cleanSymbol); 
     $element = explode(" ", trim($quote)); 
     $elementNCount = array_count_values($element); 

     foreach ($elementNCount as $word => $freq) { 
      if (ereg("([a-z,A-Z])", $word)) { 
       $query = mysql_query(" INSERT INTO tb_tokens VALUES ('','$word','$freq','$sentence_id', '$doc_id')"); 
      } 
     } 
    } 
} 

我解析document_id到函数

+0

哦,傻我..是的,你是对的..!太棒了!非常感谢你@ivantedja。我从你身上学到很多东西:) – bruine 2012-08-02 22:48:21