Hallo Robsen,
die Sache mit dem Memory Limit habe ich schnell erfahren, leider ist es mir nicht erlaubt Daten direkt in die Datenbank zu schreiben, das Script laeuft Lokal und liest die Daten aus einer Online DB, meine Abhilfe bisher war einfach die CSV Datein zu verkleinern und das Memory Limit zu erhöhen.
Mein Skript sah letzendlich wie folgt aus, versuche aber das aber jetzt nochmal an hand von deinen Tipps zu optimieren
PHP-Code:
echo "<h1>Dublettensuche mit Levenshtein</h1><hr>";
include("timer.class.php");
$Timer = new Timer();
$Timer->start();
include("mysql.class.php");
include("levenshtein.class.php");
// Dubletten Wahrscheinlichkeiten bestimmen, ab wie viel % /durch fnc _similar ermittelt
$per_csfd_company = 80;
$per_csfd_street = 80;
$per_csfd_streetnumber = 85;
$per_csfd_zip = 80;
$per_csfd_city = 80;
$StrNr_are_one = 1;
$row = 0; // Anzahl der Arrays
//$handle = fopen ("EST_20080730.csv","r"); // CSV Datei zum Lesen �ffnen
$handle = fopen ("data016-gartenarbeiten.de.csv","r"); // CSV Datei zum Lesen �ffnen
while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE ) { // Daten werden aus der Datei in ein Array $data gelesen
$num = count ($data); // Anzahl Felder im Array $data werden gez�hlt
$row++; // Anzahl der Arrays wird inkrementiert
# for ($c=0; $c < $num; $c++) { // FOR-Schleife zur Behandlung des Array $data[$c]
// Die For Schleife wird nicht benötigt weil die CSV folgendes Format aufweisen sollte
// $c == 0= csfd_company // 1 = csfd_street // 2 = csfd_streetnumber // 3 = csfd_zip // 4 = csfd_city
array_push($data,'Row'.$row);
$newData = array($data);
$arr_company = check_company($newData);
$arr_adress = check_adress($newData);
#$arr_street = check_street($newData);
#$arr_zip = check_zip($newData);
#$arr_city = check_city($newData);
$result = array();
$result[0] = $arr_company;
$result[1] = $arr_adress;
/*
$result[1] = $arr_street;
$result[2] = $arr_zip;
$result[3] = $arr_city;
*/
foreach ($result as $key => $value) {
$newResult = $result[$key];
if (!empty($newResult)) {
foreach ($newResult as $key1 => $value2){
echo "csv-Zeile ".$value2[0][12].":".$value2[0][0].", ".$value2[0][1].", ".$value2[0][2].", ".$value2[0][3].", ".$value2[0][4]."<br>";
echo $value2[2]." % Wahrscheinlichkeit beim ".$value2[3]." verglichen mit<br>";
echo "Db-csfd_id ". $value2[1]->csfd_id.": ".$value2[1]->csfd_company.", ".$value2[1]->csfd_street.", ".$value2[1]->csfd_streetnumber.", ".$value2[1]->csfd_zip.", ". $value2[1]->csfd_city."<hr>";
}
}
}
# } FOR-Schleife zur Behandlung des Array $data[$c]
}
fclose ($handle);
echo "<hr>";
$Timer->finish();
echo "Dauer Skriptausfuehrung: " . $Timer->getTime()."<br>";
PHP-Code:
function check_company($csvdata) {
$sql = new mySQL(online); // Verbindung zur online Datenbank aufbauen.
$daten = $sql->select("SELECT csfd_id,csfd_company,csfd_street,csfd_streetnumber,csfd_zip, csfd_city FROM classifieds"); // Datenbank Abfrage
$arr_res = array ();
for ($i = 0; $i < count($daten); $i++) { // Für jeden Datensatz in der Tabelle classifieds folgendes machen
if (_similar($csvdata[0][0], utf8_decode($daten[$i]->csfd_company)) > 85 ) {
$arr_res[$i][0] = $csvdata[0];
$arr_res[$i][1] = $daten[$i];
$arr_res[$i][2] = _similar($csvdata[0][0], utf8_decode($daten[$i]->csfd_company));
$arr_res[$i][3] = 'company_check';
}
}
return $arr_res;
}
function check_adress($csvdata) {
$sql = new mySQL(online); // Verbindung zur online Datenbank aufbauen.
$daten = $sql->select("SELECT csfd_id,csfd_company,csfd_street,csfd_streetnumber,csfd_zip, csfd_city FROM classifieds"); // Datenbank Abfrage
$ary_res = array ();
for ($i = 0; $i < count($daten); $i++) { // Für jeden Datensatz in der Tabelle classifieds folgendes machen
if (_similar($csvdata[0][4], utf8_decode($daten[$i]->csfd_city)) > 80 ) {
if (_similar($csvdata[0][3], utf8_decode($daten[$i]->csfd_zip)) > 40 ) {
if (_similar($csvdata[0][1], utf8_decode($daten[$i]->csfd_street)) > 80 ) {
if (_similar($csvdata[0][2], utf8_decode($daten[$i]->csfd_streetnumber)) > 80 ) {
$arr_res[$i][0] = $csvdata[0];
$arr_res[$i][1] = $daten[$i];
$arr_res[$i][2] = ((
(_similar($csvdata[0][4], utf8_decode($daten[$i]->csfd_city)))
+(_similar($csvdata[0][3], utf8_decode($daten[$i]->csfd_zip)))
+(_similar($csvdata[0][2], utf8_decode($daten[$i]->csfd_streetnumber)))
+(_similar($csvdata[0][1], utf8_decode($daten[$i]->csfd_street)))
)/4)
;
$arr_res[$i][3] = 'adress_check';
}
}
}
}
}
return $arr_res;
}