PHP: Text in Sätzen zerlegen

2. März 2008

2 Kommentare

Für ein Projekt habe ich eine Funktion gesucht, um einen Text in seine Sätze zu zerlegen. Klingt nach einer einfachen Aufgabe, ist es aber nicht.

Zuerst versuchte ich die scheinbar einfachste Methode: explode(). Mit dieser Funktion lässt sich ein String anhand eines Trennzeichens zerlegen. Nun habe ich aber drei (Punkt, Fragezeichen und Ausrufezeichen).

Also musste eine intelligentere Funktion ran: preg_split(). Dieser reguläre Ausdruck brachte ein sehr gutes Ergebnis, hatte jedoch ein Problem: am Ende fehlten alle Satzzeichen. :|

$sentences = preg_split('#\.|!|\?#', $source, -1, PREG_SPLIT_NO_EMPTY);

Da ich sonst nichts fand, schrieb ich kurzerhand meine eigene Funktion, die arbeitet wie ich möchte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * Teilt einen String in Sätze auf
 * 
 * @param	string	$source	Text zum Trennen
 * @author	Michael Mayr (http://michfrm.net)
 * @return	array
 */
function SplitSentences($source)
{
	$s = array();
	$marks = array('.', '!', '?');
 
	// count strlen every loop because $source can change while loop
	for ($i = 0; $i < strlen($source); ++$i)
	{
		$c = $source[$i];
		foreach ( $marks as $mark )
		{
			if ( $c == $mark )
			{
				$s[] = substr($source, 0, $i) . $mark;
				$source = trim(substr($source, $i + 1));
				$i = 0;
			}
		}
	}
	return $s;
}
 
$text = 'This ist ein Satz. Dies ein Ausruf! Und das einfach nur eine Frage?';
print_r(SplitSentences($text));

Ausgabe:

Array
(
    [0] => This ist ein Satz.
    [1] => Dies ein Ausruf!
    [2] => Und das einfach nur eine Frage?
)

Ich hoffe, diese Funktion kann noch anderen nützlich sein. :)

¬ geschrieben von Michael in PHP

Javascript: Automatisch die Größe eines Textfeldes anpassen

16. Februar 2008

0 Kommentare

In meinem CMS nutze ich ein kleines Notiz-System, damit ich mir schnell Sachen notieren kann für einen späteren Zeitpunkt. Einen Schwachpunkt hat das Design: Die Box selbst passt sich immer an die Länge der Notiz an, jedoch nicht die Box für den Editor. Daher habe ich mit meinem bisschen Javascript eine kleine Funktion entwickelt, die die Textbox an den Inhalt anpasst.

Getestet habe ich es mit Opera 9.5 und einer meiner Bekannten mit dem IE 7.0, das Snippet ist public domain. Kommentare gibt es im Quellcode reichlich. :)

Demo-Seite und Code

¬ geschrieben von Michael in Allgemein, Snippets

Theme von BenediktRB • Powered by Wordpress • Abonniere den RSS Feed