Stemming: Deutsch

cr4m0

Angesehenes Mitglied
Ich möchte mir ein Stemming-Script (Erklärung) erstellen, das für die deutsche Sprache funktioniert. Auf dieser Seite habe ich eine Anleitung gefunden. Diese muss ich jedoch noch in PHP umsetzen. Könnt ihr mir dabei helfen?

Mein Script bisher:
CODE
<?php
$text = 'Ackers'; // GENITIV VON "ACKER"
$vokale = array('a', 'e', 'i', 'o', 'u', 'y', 'ä', 'ö', 'ü');
$endung_s = array('b', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 'r', 't');
$endung_st = array('b', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 't');
$text = mb_strtolower($text, 'UTF-8');
$text = str_replace('ß', 'ss', $text);
$pattern = '![aeiouyäöü][bcdfghjklmnpqrstvwxz]!';
$result = preg_split($pattern, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
if (isset($result[1])) {
$r1 = $result[1];
$pattern = '![aeiouyäöü][bcdfghjklmnpqrstvwxz]!';
$result = preg_split($pattern, $r1, 2, PREG_SPLIT_DELIM_CAPTURE);
if (isset($result[1])) {
$r2 = $result[1];
}
else {
$r2 = '';
}
}
else {
$r1 = '';
$r2 = '';
}
// STEP 1 ANFANG
if (substr($r1, -3, 3) == 'ern') { $r1 = substr($r1, 0, -3); }
elseif (substr($r1, -2, 2) == 'em') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'en') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'er') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'es') { $r1 = substr($r1, 0, -2); }
else {
foreach ($endung_s as $endung_s1) {
$temp = $endung_s1.'s';
if (substr($r1, -2, 2) == $temp) { $r1 = substr($r1, 0, -1); }
}
}
// STEP 1 ENDE
// STEP 2 ANFANG
if (substr($r1, -3, 3) == 'est') { $r1 = substr($r1, 0, -3); }
elseif (substr($r1, -2, 2) == 'en') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'er') { $r1 = substr($r1, 0, -2); }
else {
foreach ($endung_st as $endung_st1) {
$temp = $endung_st1.'st';
if (substr($r1, -3, 3) == $temp) { $r1 = substr($r1, 0, -2); }
}
}
// STEP 2 ENDE
// STEP 3 ANFANG
if (substr($r1, -4, 4) == 'ern') { $r1 = substr($r1, 0, -4); }
elseif (substr($r1, -4, 4) == 'ern') { $r1 = substr($r1, 0, -4); }
elseif (substr($r1, -4, 4) == 'ern') { $r1 = substr($r1, 0, -4); }
elseif (substr($r1, -4, 4) == 'ern') { $r1 = substr($r1, 0, -4); }
elseif (substr($r1, -2, 2) == 'em') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'en') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'er') { $r1 = substr($r1, 0, -2); }
elseif (substr($r1, -2, 2) == 'es') { $r1 = substr($r1, 0, -2); }
// STEP 3 ENDE
?>



Was noch getan werden muss:
  • "but then R1 is adjusted so that the region before it contains at least 3 letters" - Wie genau ist das gemeint?
  • kompletter Step 3
  • "put u and y between vowels into upper case"
  • "turn U and Y back into lower case, and remove the umlaut accent from a, o and u"
  • R1 und R2 habe ich dann, wie kann ich aber das Wort wieder zusammensetzen?
Ich hoffe, ihr könnt mir helfen. Danke schonmal!
 
Zurück
Oben