2017-02-28 7 views
0

Ich berechne Genauigkeit aus einem Word-Dokument, indem ich die Gesamtzahl der Änderungen berechnet, die nach der Überprüfung der Spur ausgeführt werden. Falsche Interpunktionszeichen werden als 1/4-Marke berechnet, während bei kontextuellen oder grammatikalischen Fehlern eine volle 1-Marke abgezogen wird.Die in Word verwendete Menge an Wagenrücklauf lesen

Im Moment werden alle Wagenrückläufe als 1 volle Marke berechnet. Ich möchte das entweder komplett entfernen oder als 1/4 Mark Abzug weitergeben. Ich benutze Folgendes zum Zählen. ; und als 1/4 Mark Abzug.

For Each myRevision In ActiveDocument.Revisions 
myRevision.Range.Select 
    If myRevision.Type = wdRevisionInsert Then 
     lngRevisions = Len(Selection.Text) 
     For i = 1 To lngRevisions 
      If Mid(Selection.Text, i, 1) = "," Then 
       punct = punct + 1 
      Else 
      End If 

      If Mid(Selection.Text, i, 1) = "." Then 
       punct = punct + 1 
      Else 
      End If 

      If Mid(Selection.Text, i, 1) = ";" Then 
       punct = punct + 1 
      Else 
      End If 
      If Mid(Selection.Text, i, 1) = "" Then 
       punct = punct + 1 
      Else 
      End If 
     Next i 
     Count = Count + 1 
    Else 
    End If 
Next 

tCorrections = Count + punct * 0.25 - punct 


Accuracy = ((tWords - tCorrections)/tWords) * 100 
Accuracy = Round(Accuracy, 1) 

Antwort

0

ein Array von Typen Namen verwenden (aLabels) und eine Reihe von den Typen in den Daten (SC) über eine Zuordnung (aMap) der Typen Zählen Steckplatz für eine flexible Art und Weise der Zeichenfolge zu klassifizieren vorkommende (s). Wie in diesem Beispiel:

Option Explicit 

Dim aLabels : aLabels = Split("Vowels Consants Digits Punctuations EOLs Unclassified") 
ReDim aCounts(UBound(aLabels)) 
Dim sC : sC = "abce1,2." & vbCr 
Dim aMap : aMap = Array(0, 1, 1, 0, 2, 3, 2, 3, 4) 
Dim sD : sD = sC & "d" & sC & "bb111." 
Dim p, i 
For p = 1 To Len(sD) 
    i = Instr(sC, Mid(sD, p, 1)) 
    If 0 = i Then 
     i = UBound(aLabels) 
    Else 
     i = aMap(i - 1) 
    End If 
    aCounts(i) = aCounts(i) + 1 
Next 
For i = 0 To UBound(aLabels) 
    WScript.Echo Right(" " & aCounts(i), 3), aLabels(i) 
Next 

Ausgang:

cscript 42505210.vbs 
    4 Vowels 
    6 Consants 
    7 Digits 
    5 Punctuations 
    2 EOLs 
    1 Unclassified 

Auf der Grundlage dieser Rohdaten (Frequenzen von Typen) Sie ein Add-Specials Gewichte.

Update-WRT Kommentar:

Wie gesagt: In Gewichte nach der rohen Frequenzen Berechnung:

... as above ... 
Dim nSum 
' Std - all weights = 1 
nSum = 0 : For Each i In aCounts : nSum = nSum + i : Next 
WScript.Echo "all pigs are equal:", nSum 
' No EOLs 
nSum = 0 : For Each i In aCounts : nSum = nSum + i : Next : nSum = nSum - aCounts(4) 
WScript.Echo "EOLs don't count:", nSum 
nSum = 0 : aCounts(0) = aCounts(0) * 4 : For Each i In aCounts : nSum = nSum + i : Next 
WScript.Echo "vowels count * 4:", nSum 

zusätzliche Ausgabe:

all pigs are equal: 25 
EOLs don't count: 23 
vowels count * 4: 37 
+0

Es tut mir leid, dass ist ziemlich verwirrend mir. Wie richte ich also die Zeichen ein, die ich in die 1/4 Kapazität aufnehmen möchte, oder eliminiere sie ganz. – kaswardy

+0

@kaswardy - siehe Update. –

+0

und ich würde ich einen Wagenrücklauf als ein Zeichen definieren? – kaswardy