Satz aus Sätzen rausschneiden

Hi Leute

Wie erkenne ich am besten, wo ein Satz beginnt und wo er endet?

Mein Programm bis jetzt.

$saetze = „Christoph Kolumbus war Seefahrer. Christoph Kolumbus gestorben am 20. Mai 1506 in Valladolid war ein genuesischer Seefahrer in spanischen Diensten, dem im Jahr 1492 die Wiederentdeckung Amerikas gelang.“;

$gefunden = index($saetze, „Amerika“);
$geslaenge = length($saetze);
$reverse = reverse($saetze);
$anfang = index($reverse, „.“, $geslaenge-$gefunden);
$anfang = $geslaenge - $anfang;
$end = index($saetze, „.“, $gefunden);
$laenge = $end - $anfang;
$satz = substr($saetze,$anfang,$laenge);

print "$satz.
";

Dann gibt er mir folgendes aus:

Mai 1506 in Valladolid war ein genuesischer Seefahrer in spanischen Diensten, dem im Jahr 1492 die Wiederentdeckung Amerikas gelang.

Da hinter der Zahl „20“ ja auch ein Punkt ist.

Habt ihr eine Idee, wie man so etwas verhindert?

Danke schon Mal im Vorraus.

Freue mich auf eure Vorschläge.

Gruß

Polonium7.2

Hallo,

Wie erkenne ich am besten, wo ein Satz beginnt und wo er
endet?

Wenn du es richtig machen willst: http://unicode.org/reports/tr29/#Sentence_Boundaries
Das ist in der ICU-Bibliothek implementiert, du musst also das Rad nicht neu erfinden.

Habt ihr eine Idee, wie man so etwas verhindert?

http://xkcd.com/208/

use strict;
use warnings;
my $saetze = "Christoph Kolumbus war Seefahrer. Christoph Kolumbus gestorben am 20. Mai 1506 in Valladolid war ein genuesischer Seefahrer in spanischen Diensten, dem im Jahr 1492 die Wiederentdeckung Amerikas gelang.";

while ($saetze =~ /(.\*?(?

Hi

Danke für deine schnelle Antwort.

Kannst du mir diese Zeile auch erklären?

while ($saetze =~ /(.*?(?

Hallo,

Kannst du mir diese Zeile auch erklären?

Mit welchem Teil hast du denn Probleme?

Zwischen den beiden Slashes /…/ steht eine sogenannte regex, Details dazu findest du hier:

http://perldoc.perl.org/perlretut.html
http://perldoc.perl.org/perlre.html

Du kannst dir die Regex mit diesem Modul hier automatisch erklaeren lassen: http://search.cpan.org/perldoc?YAPE::Regex::Explain

Gruesse,
Moritz

Hi

Diesen Teil
/(.*?(?, das heißt ja das er nach Zeichen zwischen sucht sozusagen.

Gruß

Polonium7.2

Hallo,

ich glaube er macht das öfter auf Grund des „g“ am Ende.

Richtig.

Aber den Teil davor verstehe ich überhaupt nicht.

Dafuer habe ich dir ja die drei Links gegeben, die dir helfen koennen, das zu verstehen.

Gruesse,
Moritz