2012-08-02 8 views
5

mam tb_sentence tabela:Nie można przechowywać 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.    | 
========================================================================= 

chcę tokenize sentence_content, więc tb_tokens tabele zawierają:

========================================================================== 
| 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... 

oto mój kod:

$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); 
} 

z funkcją tokenizacji jest:

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')"); 
      } 
     } 
    } 
} 

Problem polega na tym, że document_id nie można odczytać i nie można go wstawić do tabeli tb + tokenów. Jak zadzwonić do tych document_id? dziękuję :)

ZADANIE: Każde słowo (wynik tokenizacji) ma document_id i sentence_id. mój problem nie może wywołać document_id. jak wywoływać oba atrybuty sentence_id i document_id w każdym słowie?

+0

Dobra robota przedstawiająca pytanie. Z WYJĄTKIEM ... "problem polega na tym, że dokumentu id nie można odczytać i nie można go wstawić do tabeli tb +" - czy możesz być bardziej precyzyjny? Co idzie źle? – Smandoli

+0

@Smandoli przepraszam, jeśli mój angielski jest zły. Każda "sentencja" ma "id_dokumentu". Muszę wstawić słowa tokenów również z id_dokumentu, ale nie mogę odczytać document_id – bruine

+0

Nie ma '$ row ['id_dokumentu']", ponieważ nie włączyłeś "id_dokumentu" na liście wyboru drugiego zapytania. –

Odpowiedz

1

Chyba nie trzeba te kod:

$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']; 
} 

tablicę $ doc_id jest nigdy nie był używany

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

$ kal jest tablicą i nie muszą być przycięte

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

ponieważ zamierzasz zarejestrować wartość wyrażenia, to powinno być $ row2 ['sentent_id'] not []

(oczywiście należy upewnić się, że nie będzie to samo sentence_id w samym DOCUMENT_ID albo należy go Concat)

to kilka korekt ode mnie

$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')"); 
      } 
     } 
    } 
} 

I analizowania id_dokumentu do funkcji

+0

oh, głuptasie .. tak, masz rację ..! świetnie! dziękuję bardzo @ivantedja.Larzę się wiele rzeczy od ciebie :) – bruine

Powiązane problemy