Bayes Klasifikatör PHP uygulaması: metinlere konu atama

0 Cevap php

Benim haberler sayfası projede, news, aşağıdaki yapıya sahip bir veritabanı tablo var:

 - id: [integer] unique number identifying the news entry, e.g.: *1983*
 - title: [string] title of the text, e.g.: *New Life in America No Longer Means a New Name*
 - topic: [string] category which should be chosen by the classificator, e.g: *Sports*

Ayrıca, bir tablo bayes kelime frekansları hakkında bilgi var:

 - word: [string] a word which the frequencies are given for, e.g.: *real estate*
 - topic: [string] same content as "topic" field above, e.h. *Ekonomi bilimi*
 - count: [integer] number of occurrences of "word" in "topic" (incremented when new documents go to "topic"), e.g: *100*

Şimdi benim PHP script tüm haberler girişleri sınıflandırmak ve onları birkaç olası kategorilerden (konuları) birini atamak istiyorum.

Bu doğru bir uygulama mı? Bunu artırabilirsiniz?

<?php
include 'mysqlLogin.php';
$get1 = "SELECT id, title FROM ".$prefix."news WHERE topic = '' LIMIT 0, 150";
$get2 = mysql_abfrage($get1);
// pTOPICS BEGIN
$pTopics1 = "SELECT topic, SUM(count) AS count FROM ".$prefix."bayes WHERE topic != '' GROUP BY topic";
$pTopics2 = mysql_abfrage($pTopics1);
$pTopics = array();
while ($pTopics3 = mysql_fetch_assoc($pTopics2)) {
    $pTopics[$pTopics3['topic']] = $pTopics3['count'];
}
// pTOPICS END
// pWORDS BEGIN
$pWords1 = "SELECT word, topic, count FROM ".$prefix."bayes";
$pWords2 = mysql_abfrage($pWords1);
$pWords = array();
while ($pWords3 = mysql_fetch_assoc($pWords2)) {
    if (!isset($pWords[$pWords3['topic']])) {
        $pWords[$pWords3['topic']] = array();
    }
    $pWords[$pWords3['topic']][$pWords3['word']] = $pWords3['count'];
}
// pWORDS END
while ($get3 = mysql_fetch_assoc($get2)) {
    $pTextInTopics = array();
    $tokens = tokenizer($get3['title']);
    foreach ($pTopics as $topic=>$documentsInTopic) {
        if (!isset($pTextInTopics[$topic])) { $pTextInTopics[$topic] = 1; }
        foreach ($tokens as $token) {
            echo '....'.$token;
            if (isset($pWords[$topic][$token])) {
                $pTextInTopics[$topic] *= $pWords[$topic][$token]/array_sum($pWords[$topic]);
            }
        }
        $pTextInTopics[$topic] *= $pTopics[$topic]/array_sum($pTopics); // #documentsInTopic / #allDocuments
    }
    asort($pTextInTopics); // pick topic with lowest value
    if ($chosenTopic = each($pTextInTopics)) {
        echo '<p>The text belongs to topic '.$chosenTopic['key'].' with a likelihood of '.$chosenTopic['value'].'</p>';
    }
}
?>

Eğitim elle yapılır, bu koda dahil değildir. "Eğer gayrimenkulleri satmak eğer para kazanabilirsiniz" metin kategori / konu "Ekonomi", daha sonra tüm kelimeler (sen, olabilir, yapmak, ...) atanırsa tabloya eklenir {[(0)] } topic ve 1 gibi standart sayısı olarak "Ekonomi" ile. Kelime Aynı konu ile bir arada var zaten, sayısı artırılır.

Sample learning data:

sözcük konu sayısı

Kaczynski Siyaset 1

sony Teknolojisi 1

banka İktisat 1

Telefon Teknolojisi 1

sony İktisat 3

ericsson Teknolojisi 2

Sample output/result:

Metnin Başlığı: Telefon testi Sony Ericsson Aspen - duyarlı Winberry

Siyaset

....phone ....test ....sony ....ericsson ....aspen ....sensitive ....winberry

Teknoloji

....phone FOUND ....test ....sony FOUND ....ericsson FOUND ....aspen ....sensitive ....winberry

Ekonomi bilimi

....phone ....test ....sony FOUND ....ericsson ....aspen ....sensitive ....winberry

Result: The text belongs to topic Teknoloji with a likelihood of 0.013888888888889

Thank you very much in advance!

0 Cevap