Anmelden

Die Rechtschreibprüfung auf Basis von Microsoft Office ist sehr leistungsfähig und stellt gegenüber den Open-Source-Lösungen (ISpell, ASpell) sowie auch der Google-Lösung einen deutlichen Qualitätssprung dar. Grammatikprüfung soll nach Angabe des folgenden Artikels möglich sein.

Der Zugriff auf die Microsoft-Office-Rechtschreibprüfung erfolgt über die Automationsschnittstelle von Office. Dazu wird eine Word-Installation auf dem CMS-Server benötigt. Der CMS-Server muss ein Microsoft-Betriebssystem (Windows 2000/XP/2003) haben.

In Webapplikation integrierter Automations-Client

  • Die Einbindung in die Webapplikation erfolgt über:
    • ASP-Realisierung des Clients (VB-Beispiel: Server-Side Spell Checking siehe unten), ist über Excel-Atomation ist auch möglich (Beispiel)
    • Realisierung mit ASP.NE
      in Web.config ergänzen: < identity impersonate="true"/> (Identitätsumschaltung Framework)
    • Aufruf eines externen Automations-Client (.NET oder VC++) über system() oder CGI
  • Alle Varianten brauchen sehr lange in CreateObject (>10s) zumindest auf einem Testsystem mit Windows XP Pro und Word 2003. Die Word-Automation ist im IIS-Kontext zu langsam. Jedoch stieg die Bearbeitungszeit bei langen Texten nicht mehr wesentlich an (A4-Seite 20s)

Eigenständiger Automations-Client

  • ASP.NET Windows-Applikation außerhalb IIS, von PHP über TCP ansprechbar
  • Word-Application-Objekt, bzw. Dokument vorinitialisieren
  • Performance deutlich besser (ab 1s), stellt damit annehmbare Lösung dar.

Server-Side Spell Checking

Folgender Programmtext (ASP-VB) prüft den übergebenen Text und gibt Fehler/ Vorschläge als Tabelle aus.

  • Überträgt den Text in ein unsichtbares Word-Dokument.
  • Nach Aufruf der Prüfung wird der Text, und in einer Tabelle Fehler und Vorschläge angezeigt. Durch Anklicken der Vorschläge wird der Text berichtigt
< %
option explicit
'Dimension object variables
dim objWord 'as Word.Application
dim objDocument 'as Word.Document
dim objErrors 'as Word.ProofreadingErrors
dim objError 'as Word.Range
dim wdSuggestions 'as Word.SpellingSuggestions
dim wdSuggestion 'as Word.SpellingSuggestion
dim strSubmission, strModified, intCounter
const wdDoNotSaveChanges = 0
'Capture submitted text from Form or QueryString
strSubmission = request("txtSubmit")
'Echo submission back to the user
with response
 .write "< font size=5>< b>"
 .write "Spelling Results< /b>< /font>"
 .write "< br>< br>"
 .write "< b>You submitted the following:< /b>< br>"
 .write """ & strSubmission & ""< br>< br>"
end with
'Launch Word and create a new document
set objWord = server.createObject("Word.Application")
set objDocument = objWord.documents.add
'Insert the user's submitted text into the document
objWord.selection.typeText cstr(strSubmission)
'Retrieve and display spelling errors
set objErrors = objDocument.spellingErrors
if objErrors.count then 'there are errors
 with response
  .write "< table>< tr>< td>< b>Spelling Error "
  .write "< /b>< /td>< td>< b>Suggestion< /b>< /td>< /tr>"
 end with
 for each objError in objErrors
  'Display the misspelled word
  response.write "< tr valign=top>< td>"
  response.write objError.Text & "< /td>< td>"
  'Get spelling suggestions for the word
  set wdSuggestions = _
   objWord.getSpellingSuggestions(objError.text)
  if wdSuggestions.count < 1 then
   response.write "No suggestions"
  else
   intCounter = 0
   for each wdSuggestion in wdSuggestions
    intCounter = intCounter + 1
    strModified = replace(strSubmission, _
     objError.text, wdSuggestion.name, 1, 1)
    with response
     'Construct anchor tag
     .write "< a href=SpellCheck.asp?"
     .write "txtSubmit="
     .write server.URLEncode(strModified)
     .write ">" & wdSuggestion.name & "< /a>"
    end with
    'Display a pipe-delimiter except at the end
    if intCounter < wdSuggestions.count then
     response.write " | "
    end if
   next
  end if
  response.write "< /td>< /tr>"
 next
 with response
  'Show the user number of errors found
  .write "< /table>"
  .write "< br>< b>" & objErrors.count
  .write " spelling error(s) found:< /b>"
  .write " Click suggestions to correct."
 end with
else 'no errors were found
 response.write "< b>No spelling errors found.< /b>"
end if
'Close running instance of Word and destroy objects
objWord.Quit wdDoNotSaveChanges
set objDocument = Nothing
set objWord = Nothing
set objErrors = Nothing
set wdSuggestions = Nothing
%>

Implementierungsstand

Es wurde eine Prototyp-Implementierung vorgenommen welche gegenwärtig falsch geschriebene Wörter im Word-Editor rot markiert. Der Nutzer kann dann die Wörter im Word-Editor korrigieren und die Prüfung erneut aufrufen. Der Aufruf erfolgt über den Link Rechtschreibprüfung im Fußbereich des Word-Editors.

Die Realisierung erfolgt über einen externen Word-Automations-Client, der mit .NET/C# implementiert wurde (ConsoleWordSpellCheck1.exe):

  • Im Client wird das Word-Application-Objekt vorinitialisiert (d.h. der Client und Word laufen ständig im Hintergrund auf dem CMS-Server).
  • Der Aufruf erfolgt über eine TCP-Verbindung von PHP aus. Es wird der von HTML-Tags bereinigte Text übergeben.
  • Pro Aufruf wird ein Word-Dokument erzeugt. Der Text wird in das Dokument eingefügt und anschließend die Rechtschreibprüfung aufgerufen, die Schreibfehler und Vorschläge zurückliefert. Das Word-Dokument wird wieder gelöscht.
  • Die Markierung im Word-Editor erfolgt durch Einfügen eines anderweitig nicht verwendeten Tags < samp>.

Im Einsatz waren Windows XP/2003, Word 2003.

Ausbau

Der Ausbau ist möglich in Form eines Korrekturassistenten als Popup-Fenster oder über Kontextmenüs (wahrscheinlich schwierig) um:

  • Korrekturvorschläge auszuwählen,
  • Hinzufügen zu Benutzerwörterbuch.

Eine Grammatikprüfung ist seitens der Word-Automation auch möglich.

   
Top

Wir arbeiten mit Software von http://www.campus21.de.

Verantwortlich für angezeigte Daten ist der Webdomain-Eigentümer laut Impressum.

Suche