Macro für Füllwörter

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Macro für Füllwörter

Beitragvon caesarandy » So, 09.09.2007 09:30

Herzliche Grüsse :)

Ich hoffe das mir hier jemand bei einem kleinen Problem helfen kann, da ich zwar selber mit OOo arbeite, jedoch mit dem Technischen Grundlagen eher weniger vertraut bin :)
Mir geht es um folgendes:

Als Hobbyautor hätt ich gerne eine Funktion im Writer, die mir dabei Hilft, sogenannte Füllwörter ausfindig zu machen, die einem beim Schreiben doch schon so manches Mal durch die Lappen gehen.
Rein vom Prinzip her würde es also vollkommen reichen, einfach die "suchen und eretzen" funktion mehrfach über das Dokument laufen zu lassen, und dabei alle Wörter die als "Füllwort" identifiziert werden, in Fettdruck zu setzen und rot einzufärben.

So weit auch kein Problem.

Da es nun aber nicht 5 Füllwörter gibt, sondern mehrere Hundert ist das Manuell natürlich fast schon so aufwendig, als würde ich das Dokument selber absuchen, und mich mit nem Duden daneben setzen. Taugt in der Praxis also nichts.

Lösung wäre hier denke ich ein Macro, das diese Funktion übernimmt.

Das Macro müsste also das Dokument überprüfen und dabei anhand einer Liste, die ich vorher anlege, Wörter als "Füllwort" identifizieren und dann in rote Schriftfarbe und in Fettdruck setzen. Beispielsweise könnte die Liste die Wörter "Aber" und "Jedoch" enthalten, und dann müssten nach dem ausühren des Macros alle "Aber"s und "Jedoch"s im Text in rotem Fettdruck erscheinen.

Ideal wäre es dann noch, wenn das Macro bei der überprüfung die Anzahl der gefundenen übereinstimmungen zählt, und anschließend gegen die Anzahl der gesamtwörter im Text aufrechnet, um mir anzugeben, wie hoch der % Anteil an Füllwörtern im Text ist.

Das Problemb ist leider, das ich selber von diesen Dingen absolut keinen Plan habe ;)

Hat zufällig jemand hier eine Idee, ob und wie sich sowas mit Macros realisieren lässt?

Vielen Dank schonmal :=)
caesarandy
 

Re: Macro für Füllwörter

Beitragvon Stephan » So, 09.09.2007 16:21

Hat zufällig jemand hier eine Idee, ob und wie sich sowas mit Macros realisieren lässt?

indem Du die Wörter per Makro suchst und einfärbst? (sonst verstehe ich die Frage nicht)

warum verwendest Du nicht einfach Auto-Ersetzung?


Gruß
Stephan
Stephan
********
 
Beiträge: 5421
Registriert: Mi, 30.06.2004 18:36
Wohnort: nahe Berlin

Re: Macro für Füllwörter

Beitragvon komma4 » So, 09.09.2007 19:06

eine kleine Sonntags-Übung...
war gar nicht so schwer :-)

Code: Alles auswählen
REM  *****  BASIC  *****
' 20070909
' http://de.openoffice.info/viewtopic.php?f=1&t=13889
Private oDok as Object
Private oSuchBeschr as Object
Private iLogNr, iDateiNr


Sub writer_markierenFuellwort
sMakroName = "writer_markierenFüllwort"

' Konstante zur Angabe der FüllWortListe
cFWL = "/zentrale/2007/Füllwort.Liste"

' Konstante für Log
cFWLLOG = "/zentrale/2007/Füllwort.Liste.Log"

' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
      "com.sun.star.text.TextDocument" ) Then
   Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
   exit sub
end if

' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
   Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
   exit sub
end if

' Ausgabe der Fundstellen in Log
iLogNr = FreeFile
Open cFWLLog For OUTPUT AS iLogNr

' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr

' init der Suche
initSuchBeschr

' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sFW
markFW( sFW )
Wend

Close #iDateiNr
Close #iLogNr

End Sub


Sub markFW( sFW as String )
oSuchBeschr.SearchString =  sFW
oAlleStellen = oDok.findAll( oSuchBeschr )

Print #iLogNr, sFW & ": " & oAlleStellen.getCount()

For i = 0 to oAlleStellen.getCount() - 1
oGefunden = oAlleStellen.getByIndex( i )
oGefunden.CharColor = RGB( 255, 0, 0 )
oGefunden.CharWeight = com.sun.star.awt.FontWeight.BOLD
Next

End Sub

Sub initSuchBeschr
oSuchBeschr = oDok.createSearchDescriptor()
With oSuchBeschr
.SearchRegularExpression = FALSE
.SearchCaseSensitive = FALSE
End With

End Sub


Die Inhalte der Konstanten für die Wortliste und das Log müssen natürlich angepasst werden.
Hilft das?
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon caesarandy » Mo, 10.09.2007 10:53

Vielen dank für die Hilfe. :)

Sitze zwar grade auf der arbeit, kann es deshalb nicht ausprobieren, aber ich kümmere mich zuhause mal drum.

Was die Konstanten angeht, dich ich da ersetzen muss, wie genau meinst du das? Wie gesagt...0 Plan und so ^^

Und ie Füllwortliste...reicht da einfach nen .txt-File in dem ich die Füllwörter alle untereinander weg schreibe, und dann die endung auf .log ändere, oder brauchts da noch mehr?


@Stephan
Die Autoersetzung hat den nachteil, das sie ja bereits beim Eingeben des Textes ersetzt, und nicht erst später. D.h. ich muss mich theoretisch bereits beim eingeben des textes entscheiden, ob ich ein Füllwort drin lassen will, oder nicht. Funktioniert so aber leider nicht jedes mal, manchmal muss man einfach den ganzen Text vor sich haben um zu sehen, welches Wort weg kann, und welches nicht.
Deswegen suche ich eine möglichkeit, die die "Störenfriede" quasi auf Knopfdruck rausfiltert, wann immer ich das möchte.

Oder bietet die "Autoersetzung" auch die möglichkeit den Text zu durchsuchen, nachdem er bereits geschrieben ist?
caesarandy
 

Re: Macro für Füllwörter

Beitragvon komma4 » Mo, 10.09.2007 11:32

Im Code sind die beiden Konstanten (konstant=sie ändern sich nicht während des Programmablaufs) cFWL und cFWLLog mit den Namen meiner Testdateien gesetzt: die Inhalte musst Du auf Deine Dateien umschreiben.

Als Wortliste habe ich eine Textdatei, mit einem "Suchbegriff" pro Zeile erstellt (damit gehen auch zusammengesetzte Füllworte, wie "aber auch"). Deren Namen (Pfad und Dateinamen) kommt in cFWL

In der Datei, welche durch den Namen in der Konstanten cFWLLog bestimmt wird, schreibt das Makro die gesuchten Füllworte und deren Anzahl rein.

Kommst Du damit zurecht?
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon caesarandy » Mo, 10.09.2007 22:33

Funktioniert perfekt, vielen dank :)

Ja, deine Erläterung war ausreichend, ich habe es tatsächlich hinbekommen ;) *freu*
caesarandy
 

Re: Macro für Füllwörter

Beitragvon komma4 » Mo, 10.09.2007 23:38

Da eine solche Funktion vielleicht öfter gebraucht wird - habe ich das Ding auf die Website gestellt:
Füllwort-Liste

Kleinere Änderungen zur geposteten Version:

Dateinamen der untersuchten Datei und der Wortliste, sowie Datum und Uhrzeit der Untersuchung wird nun ins LOG geschrieben.
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon majcho » Sa, 22.12.2007 02:01

Das Makro http://www.re-solutions.de/ooo/makros/global_startOOO.odt funktioniert bestens. Habe leider auch nur bedingte Programmiertkenntnisse und könnte mir folgende Funktionserweiterung als sehr hilfreich vorstellen:

Wie könnte ein Füllwort durch ein anderes ersetzt werden?

aber = jedoch
nicht schlecht = gut
weißer Schimmel = Schimmel
nix = ""

So würde in der angegebenen Reihenfolge das Wort aber durch jedoch ersetzt. Folgt hinter dem = ein "" so wird das Wort gelöscht. Könnten Sie den Quellode ergänzen?
majcho
 
Beiträge: 5
Registriert: Di, 11.09.2007 22:19

Re: Macro für Füllwörter

Beitragvon komma4 » Di, 25.12.2007 18:06

majcho hat geschrieben:Das Makro http://www.re-solutions.de/ooo/makros/global_startOOO.odt funktioniert bestens.

Das freut mich.
Ich hoffe, auch das Füllwort-Liste Makro funktioniert wie gewünscht.
majcho hat geschrieben:Habe leider auch nur bedingte Programmiertkenntnisse

Das kann doch schon reichen...

majcho hat geschrieben:folgende Funktionserweiterung
Das ist keine Erweiterung, sondern ein völlig neuer Zweck....

Lese die Textdatei in zwei Variable (vor und hinter einem Trennzeichen) und verwende den ReplaceDescriptor anstelle des SearchDescriptors

Hilft das?
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon majcho » Di, 25.12.2007 23:26

Das Füllwörter-Makro meinte ich. Den SearchDescriptor habe ich durch den ReplaceDescriptor ersetzt. Es gelingt mir jedoch kein anständigen Code hinzubekommen. Vor allem mit einer Schleife, mit dem bloßen aufzeichnen eines Makros ist das nicht möglich. Werde wohl eine Weile knobeln und dabei auch lernen.
majcho
 
Beiträge: 5
Registriert: Di, 11.09.2007 22:19

Re: Macro für Füllwörter

Beitragvon komma4 » Mi, 26.12.2007 15:18

majcho,
wenn Du Probleme mit Deinem Code hast, dann solltest Du uns diesen zeigen (in einem neuen Posting im BASIC-Bereich des Forums, mit aussagekräftigem Betreff). An welcher Stelle tritt welches Fehlverhalten auf?

Deine ursprüngliche Aufgabenstellung war ein "automatische Ersetzung anhand einer Ersetzungsliste", right? Du hast die Eigenschaften des ReplaceDescriptors neu gesetzt und die Datei mit den Such-/Ersatzbergriffen korrekt ausgelesen und den Variablen zugewiesen?

Zum Lernen von BASIC siehe die
Informationen zur StarBasic-Programmierung

Bis später...
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon majcho » Mi, 26.12.2007 22:35

Sorry, wenn ich in diesen Thread den "Ersetzungsvorgang" für Füllwörter fortsetze, immerhin geht es noch um Füllwörter.

Mir ist zumindest der Ersetzungsvorgang durch "" (=Füllwort löschen) gelungen. Aber wie lese ich die zweite Variable aus der Textdatei hinter dem Trennzeichen (in dem Fall das Gleichheitszeichen "=" )?

Code: Alles auswählen
REM  *****  BASIC  *****

Private oDok as Object
Private oSuchBeschr as Object
Private oErsetzBeschr as Object
Private iDateiNr

Sub ocm_ersetzenFuellwort
sMakroName = "ocm_ersetzenFüllwort"
sMakroVersion = "1.0.0"
sMakroDatum = "2007-12-26"

' Konstante zur Angabe der FüllWortListe
cFWL = "Bereinigungsmakro/Füllworte.Liste"

' laden zum Nutzen von Standardfunktionen
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )

' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
  "com.sun.star.text.TextDocument" ) Then
   Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
   exit sub
end if

' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
   Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
   exit sub
end if

' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr

' init der Suche
FWL_initErsetzSuchBeschr

' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sFW
FWL_ersetzFW( sFW )
Wend

Close #iDateiNr

End Sub

Sub FWL_ersetzFW( sFW as String )

oSuchBeschr.SearchString =  sFW
oSuchBeschr.ReplaceString = ""
oDok.replaceAll( oSuchBeschr )

End Sub

Sub FWL_initErsetzSuchBeschr
oSuchBeschr = oDok.createReplaceDescriptor()
With oSuchBeschr
.SearchRegularExpression = FALSE
.SearchCaseSensitive = FALSE
End With

End Sub


P.S.: Ich bin immer noch OOo-Basic-Anfänger, sodass der Code nicht gänzlich optimal ist.
majcho
 
Beiträge: 5
Registriert: Di, 11.09.2007 22:19

Re: Macro für Füllwörter

Beitragvon komma4 » Fr, 28.12.2007 01:12

Anfänger zu sein ist keine Schande.
Schau'n 'mer ma

aber = jedoch
nicht schlecht = gut
weißer Schimmel = Schimmel
nix = ""


Durch die Anweisung zum Einlesen einer Zeile erhälst Du Such- und Ersetzungsbegriff, durch das Trennzeichen getrennt.
( in der letzten Zeile lasse einfach die Anführungszeichen weg ).

Die Funktion SPLIT teilt Dir eine solche Zeile in Bestandteile; sie gibt ein Array zurück, das Du zuvor deklarierst:
Code: Alles auswählen
Dim aZeilenTeil( 0 to 1 ) as String


Zur Klarstellung verwendest Du eine neue Variable im Code:
Code: Alles auswählen
Line Input #iDateiNr, sZeile

und teilst anschliessend in 2 Bestandteile, und verteilst sie auf die Variablen für 'Füllwort' und 'Ersatzbegriff':
Code: Alles auswählen
aZeilenTeil() = SPLIT( sZeile, "=", 2 )
sFW = aZeilenTeil(0)
' Ersatzbegriff
sEB = aZeilenTeil(1)
FWL_ersetzFW( sFW , sEB )

' ....

' Ersetzen Füllwort Routine
'
Sub FWL_ersetzFW( sSuch as String , Optional sErsetz as String )
oSuchBeschr.SearchString =  sSuch
if isMissing( sErsetz ) then
oSuchBeschr.ReplaceString = ""
else
oSuchBeschr.ReplaceString = sEreetz
end if
oDok.replaceAll( oSuchBeschr )



Bei Fragen zum Code: fragen!
Hilft das?
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Re: Macro für Füllwörter

Beitragvon majcho » Fr, 28.12.2007 23:52

komma4 hat geschrieben:
Durch die Anweisung zum Einlesen einer Zeile erhälst Du Such- und Ersetzungsbegriff, durch das Trennzeichen getrennt.
( in der letzten Zeile lasse einfach die Anführungszeichen weg ).

Die Funktion SPLIT teilt Dir eine solche Zeile in Bestandteile; sie gibt ein Array zurück, das Du zuvor deklarierst:
Code: Alles auswählen
Dim aZeilenTeil( 0 to 1 ) as String



Bei Fragen zum Code: fragen!
Hilft das?



Den Text einer Variable zu übergeben und einfach durch SPLIT() aufzuteilen ist genial einfach. Leider verhakte sich dann der Code an der Zeile

Code: Alles auswählen
sEB = aZeilenTeil(1)
und teilte mir mit

Unzulässiger Wert oder Datentyp.
Index außerhalb des definierten Bereichs


Ich vermute es hängt dan der Zahl 0, 1 oder 2 innerhalb der Schleife

hier der gesamte Code:
Code: Alles auswählen
REM  *****  BASIC  *****

Private oDok as Object
Private oSuchBeschr as Object
Private oErsetzBeschr as Object
Dim aZeilenTeil( 0 to 1 ) as String
Private iDateiNr


Sub ocm_ersetzenFuellwort
sMakroName = "ocm_ersetzenFüllwort"
sMakroVersion = "1.0.1"
sMakroDatum = "2007-12-28"

' Konstante zur Angabe der FüllWortListe
cFWL = "/Bereinigungsmakro/Füllworte.Liste"

' laden zum Nutzen von Standardfunktionen
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )


' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
  "com.sun.star.text.TextDocument" ) Then
   Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
   exit sub
end if

' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
   Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
   exit sub
end if



' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr

' init der Suche
FWL_initErsetzSuchBeschr

' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sZeile
aZeilenTeil() = SPLIT( sZeile, "=", 2 )
sFW = aZeilenTeil(0)
' Ersatzbegriff
sEB = aZeilenTeil(1)
FWL_ersetzFW( sFW , sEB )
Wend

Close #iDateiNr


End Sub


' Ersetzen Füllwort Routine

Sub FWL_ersetzFW( sSuch as String , Optional sErsetz as String )
oSuchBeschr.SearchString =  sSuch
if isMissing( sErsetz ) then
oSuchBeschr.ReplaceString = ""
else
oSuchBeschr.ReplaceString = sEretz
end if
oDok.replaceAll( oSuchBeschr )
End Sub


Sub FWL_initErsetzSuchBeschr
oSuchBeschr = oDok.createReplaceDescriptor()
With oSuchBeschr
.SearchRegularExpression = False
.SearchCaseSensitive = True
End With


End Sub
majcho
 
Beiträge: 5
Registriert: Di, 11.09.2007 22:19

Re: Macro für Füllwörter

Beitragvon komma4 » Sa, 29.12.2007 10:54

nur kurz (mein Flieger geht in ein paar Stunden):

abgesehen vom Tippfehler
oSuchBeschr.ReplaceString = sEretz

habe ich die Dateischleife schonmal falsch aufgesetzt, korrekt wäre:

* Leseversuch

* Schleife: wenn nicht EOF, bearbeiten
* nächste Zeile lesen
* Ende der Schleife
Code: Alles auswählen
' erste Zeile ?
Line Input #iDateiNr, sZeile
' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
  ' hier bearbeiten
  ' ...
  '
  ' dann weiter lesen
  Line Input #iDateiNr, sZeile
Wend


Die Fehlermeldung erhalte ich hier nur, wenn ich die Variablennamen falsch schreibe.
Du musst Deinen Code also debuggen (mit PRINT Anweisungen Variableninhalte ausgeben) um die Fehlerstelle zu finden...
Lasse Dir die sZeile anzeigen nach dem lesen...

Viel Erfolg - ich bin dann mal weg.
Cheers
Winfried
OOo 3.0.1 mit openSuSE 11.1
MeineMakros
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
 
Beiträge: 3809
Registriert: Mi, 03.05.2006 22:29
Wohnort: Chon Buri Thailand Asia

Nächste

Zurück zu OOo Writer

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast