3v4l.org

run code in 300+ PHP versions simultaneously
<?php class KlassifizierterText { private $text; private $klasse; private $lexikonGroesse; function __construct($paramText = null, $paramKlasse = null) { if(!empty($paramText)) $this->setzeText($paramText); if(!empty($paramKlasse)) $this->setzeKlasse($paramKlasse); } public function setzeText($paramText) { $this->text = $paramText; $this->lexikonGroesse = $this->berechneLexikonGroesse(); } public function setzeKlasse($paramKlasse) { $this->klasse = $paramKlasse; } public function gibText() { return $this->text; } public function gibWoerterInArray() { return explode(" ", $this->text); } public function gibKlasse() { return $this->klasse; } public function gibLexikonGroesse() { return $this->lexikonGroesse; } private function berechneLexikonGroesse(){ $woerter = explode(" ", $this->text); return array_count_values($woerter); } } class BayesKlassifikation { private $kTexte; private $uText; private $wahrscheinlichkeitUText; function __construct($paramKTexte = null, $paramUText = null) { if(!empty($paramKTexte)) $this->setzeKTexte($paramKTexte); if(!empty($paramUText)) $this->setzeUText($paramUText); } public function setzeKTexte($paramKTexte) { $this->kTexte = $paramKTexte; } public function setzeUText($paramUText) { $this->uText = $paramUText; } public function gibKTexte() { return $this->kTexte; } public function gibUText() { return $this->uText; } public function gibWahrscheinlichsteKlasseVonUText(){ if(empty($this->wahrscheinlichkeitUText)) $this->wahrscheinlichkeitUText = $this->berechneWahrscheinlichsteKlasseVonText($kTexte, array("chinesischer Text", "japanischer Text"), $uText); return $this->wahrscheinlichkeitUText; } public static function berechneKlassenWahrscheinlichkeit($kTexte, $klasse) { $klassen = array(); foreach($kTexte as $kText){ if($kText->gibKlasse()) array_push($klassen, $kText->gibKlasse()); } $klassenCounts = array_count_values($klassen); return ($klassenCounts[$klasse]/count($klassen)); } public static function berechneGesamtLexikonGroesse($kTexte) { $gesLexikon = array(); foreach($kTexte as $kText){ foreach($kText->gibLexikonGroesse() as $key => $value){ if(!array_key_exists($key, $gesLexikon)) $gesLexikon[$key] = 0; $gesLexikon[$key] += $value; } } return count($gesLexikon); } public static function berechneKlassenGroesse($kTexte, $klasse) { $klassenGroesse = 0; foreach($kTexte as $kText){ if($kText->gibKlasse() == $klasse){ $klassenGroesse += array_sum($kText->gibLexikonGroesse()); } } return $klassenGroesse; } public static function berechneWortWahrscheinlichkeitInKlasse($kTexte, $klasse, $wort) { $klassenLexikon = array(); foreach($kTexte as $kText){ if($kText->gibKlasse() == $klasse){ foreach($kText->gibLexikonGroesse() as $key => $value){ if(!array_key_exists($key, $klassenLexikon)) $klassenLexikon[$key] = 0; $klassenLexikon[$key] += $value; } } } if(array_key_exists($wort, $klassenLexikon)) return $klassenLexikon[$wort]; else return 0; } public static function berechneTextWahrscheinlichkeitInKlasse($kTexte, $klasse, $kText) { $woerterArray = $kText->gibWoerterInArray(); $wortWahrscheinlichkeit = 1; for($i = 0; $i < count($woerterArray); $i++){ $tmpWortWahrscheinlichkeit = ($this->berechneWortWahrscheinlichkeitInKlasse($kTexte, $klasse, $woerterArray[$i]) + 1)/ ($this->berechneKlassenGroesse($kTexte, $klasse) + $this->berechneGesamtLexikonGroesse($kTexte)); $wortWahrscheinlichkeit *= $tmpWortWahrscheinlichkeit; } return $this->berechneKlassenWahrscheinlichkeit($kTexte, $klasse) * $wortWahrscheinlichkeit; } public static function berechneWahrscheinlichsteKlasseVonText($kTexte, $klassen, $uText) { $wahrscheinlichkeitenKlassen = array(); foreach($klassen as $klasse){ $tmpWahrscheinlichkeit = $this->berechneTextWahrscheinlichkeitInKlasse($kTexte, $klasse, $uText); $wahrscheinlichkeitenKlassen[$klasse] = $tmpWahrscheinlichkeit; } $max = array_keys($wahrscheinlichkeitenKlassen, max($wahrscheinlichkeitenKlassen)); return $max[0]; } } // Start - init: $kText1 = new KlassifizierterText("China Peking China", "chinesischer Text"); $kText2 = new KlassifizierterText("China China Schanghai", "chinesischer Text"); $kText3 = new KlassifizierterText("China Honkong", "chinesischer Text"); $kText4 = new KlassifizierterText("Tokio Japan China", "japanischer Text"); $kTexte = array($kText1, $kText2, $kText3, $kText4); $uText = new KlassifizierterText("China China China Tokio Japan"); $bayesKlassifikation = new BayesKlassifikation(); $bayesKlassifikation->setzeKTexte($kTexte); $bayesKlassifikation->setzeUText($uText); $wahrscheinlichsteKlasse = $bayesKlassifikation->gibWahrscheinlichsteKlasseVonUText(); //echo $wahrscheinlichesteKlasse;

preferences:
44.08 ms | 402 KiB | 5 Q