2

私はテーブルを持っています:

=========================================================================
| id | stem_before | stem_after | stem_freq | sentence_id | document_id | 
=========================================================================
|  1 |     a       |     b      |    1      |   0         |       1     |    
|  2 |     c       |     d      |    1      |   0         |       1     |        
|  3 |     e       |     f      |    1      |   1         |       1     |
|  4 |     g       |     h      |    1      |   2         |       1     |
|  5 |     i       |     j      |    2      |   0         |       2     |
|  6 |     k       |     l      |    1      |   0         |       2     |
=========================================================================

私は 2 つのステップでカウントしたい: ステップ 1 は、 の値の合計で 1 を割るstem_freqことsentence_idですdocument_id。ステップ 2 は、最初のステップの結果に次の値を乗算します。stem_freq

例えば ​​:

document_id= 1 および= 0のデータの場合sentence_id、最初のステップ: 1/(1+1)= 0.5、id= 1 の 2 番目のステップは1*0.5= 0.5 です。id= 2 は1*0.5= 0.5 です。

document_id= 2 および= 0のデータの場合sentence_id、最初のステップ: 1/(2+1)= 0.3333、id= 5 の 2 番目のステップは2*0.3333= 0.6666、id= 6 の場合は1*0.3333= 0.3333。

ここに私のコードがあります:

$query = mysql_query ("SELECT sentence_id, document_id, stem_after, 
stem_freq,SUM(stem_freq) as freq 
FROM tb_stemming 
WHERE document_id ='$doc_id' 
GROUP BY(sentence_id)");

while ($row = mysql_fetch_array($query)) {
   $a    = $row['freq'];
   $freq = $row['stem_freq'];
   $tf   = $freq/$a;
}

しかし、それはすべての異なる文の最初のデータの結果しか得られません:助けてくれませんか? ありがとうございました :)

4

1 に答える 1

1

これを試して:

SELECT
    a.*, 
    a.stem_freq * b.value
FROM
    tb_stemming as a
    JOIN 
    (
        SELECT
            document_id,
            sentence_id,
            1 / sum(stem_freq) 'value'
        FROM
            tb_stemming
        GROUP BY document_id, sentence_id
    ) as b
    ON a.document_id = b.document_id AND a.sentence_id = b.sentence_id
于 2012-09-10T03:41:10.823 に答える