Regex - Punkte mit Ausnahme ersetzen
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
array
code
datei
dialekt
einfache sache
erstellen
fund
maske
million
punkt
satz
satzzeichen
schlag
tab
text
umsetzen
url
verwalten
zahl
zerlegen
-
Hallo zusammen,
ich versuche momentan einen Text mit Regex Satz für Satz zu zerlegen. D.h. an jedem . ? und ! und Zeilenumbruch den Satz in ein array schreiben. Das funktioniert auch mit
(\.|!|\?|\n)
schon ganz gut, allerdings gibt es ja auch Ausnahmen. So wird der Satz auch in ein neues Array geschrieben, wenn es gar keinen Anlass dazu gibt, wie z.B. bei den Abkürzungen ca. mio. oder bei Zahlen 1234.5678. Bei Zahlen würde ich das zwar so umsetzen:
[0-9]\.[0-9]
allerdings weiß ich nicht, wie ich nicht, wie ich das ganze so verbinde, dass der Punkt nur dann ersetzt wird, wenn keine Abkürzung dazugehört. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es gibt verschiedene Regex-Dialekte/Implementierungen. PHP unterstützt sogar 2: POSIX und PREG. Welchen Dialekt verwendest du?
Bezüglich der Zahlen: Dafür musst du den ersten Regex
(\.|!|\?|\n)
so ändern, dass nach dem Satzzeichen ein Leerzeichen kommt (sieht man natürlich jetzt schlecht in der Code-Anzeige). Sofern der Text sauber geschrieben ist, sollte nach einem Satzzeichen immer ein Leerzeichen kommen.
Abkürzungen sind rein grammatikalisch wahrscheinlich nicht erkennbar. Sofern du eine Übersicht über die möglichen Abkürzungen hast, schlage ich vor, dass du jede Abkürzung durch die Langform des Wortes ersetzt, bevor du mit den regulären Ausdrücken den Text in einzelne Sätze unterteilst. -
Die Idee mit dem Ersetzen der Abkürzungen finde ich erhlich gesagt sogar besser als per Regex. Selbst, wenn dies am Ende langsamer wird, habe ich zum einen die Möglichkeit die Abkürzungen in einem Array, Datenbank oder Textfile viel leichter zu verwalten und zum anderen kann ich bei der weiteren Auswertung des Texts sicher sein, dass wenn ich nach Millionen suche, da auch wirklich Millionen und nicht Mio. steht.
Was das Leerzeichen nach dem Punkt angeht, habe ich allerdings eine andere Lösung gefunden. Anstatt ein Leerzeichen hinter dem Punkt vorrauszusetzen, maskiere ich den Punkt zwischen zwei Zahlen mit Regex per
([0-9]).([0-9])
und ersetze den Fund entsprechend. Nach der weiteren Analyse des Texts wird dann die Maske zur Rückgabe an den User wieder durch einen Punkt ersetzt.
([0-9])\<punktmaske>([0-9])
Jetzt brauche ich eigentlich nur noch eine Liste, mit Abkürzungen, die mit einem Punkt aufhören. Kennt da jemand eine Seite, die sowas am besten in XML etc. formartiert anbietet?
Edit: Unter http://de.wikipedia.org/wiki/Portal:Abk%C3%BCrzungen/Gebr%C3%A4uchliche_Abk%C3%BCrzungen habe ich die wichtigsten Abkürzungen gefunden. Ich werde mich dann mal rangeben eine entsprechende XML Datei o.ä. zu erstellen.
Beitrag zuletzt geändert: 3.9.2013 18:35:49 von hc-tools -
XML? Wozu brauchst du für so eine einfache Sache XML? Du kannst doch einfach eine tab-separierte Datei mit Abkürzungen und deren Langformen verwenden.
mio Million etc. et cetera s.o. siehe Oben
Und die Datei dann zeilenweise einlesen und bei \t splitten. -
Da ist natürlich was dran. XML ist da wirklich etwas überladen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage