Caso de uso: estoy usando un software de dictado por voz para tomar notas para mí mismo que pego en MS-Word. El software hace un trabajo decente, pero estropea algunas palabras, lo que resulta en muchos errores de ortografía. La categoría 1 de ellos son básicamente homónimos, en su mayoría términos tecnológicos. Creé una buena macro de VBA que usa buscar y reemplazar, extrayendo el homónimo y la corrección deseada de una hoja de cálculo. Funciona muy bien. La categoría 2 es más difícil de resolver y se compone principalmente de errores ortográficos debido a que el software inserta espacios aleatorios en una palabra correctamente escrita. No veo un patrón definitivo, como siempre en el salto de sílaba o entre letras dobles, pero a menudo ocurre cuando una o más sílabas es una palabra correctamente escrita, y se corta una sílaba diferente, y esa pieza por sí sola no es una palabra válida. p.ej. transcribe "Categoría" frente a "Categoría". La pieza correcta puede ser la primera o la segunda mitad.

El código debe:

  • ejecutar el corrector ortográfico en el rango de documentos activos
  • encontrar el siguiente error de ortografía
  • mire la palabra anterior, verifique la ortografía más la palabra mal escrita, si está escrita correctamente, acepte
  • de lo contrario, mire la palabra después, verifique la ortografía más la palabra mal escrita, si está escrita correctamente, acepte
  • continuar con el siguiente error

El resultado sería algo como esto:

Codificación para corregir errores ortográficos debidos al espaciado -> codificación para corregir errores ortográficos debidos al espaciado

Sé cómo invocar el corrector ortográfico, recorrer el rango, obtener las sugerencias ortográficas, etc., pero tengo dificultades para identificar la palabra anterior y la siguiente, y luego volver a ejecutar el corrector ortográfico dentro de la sesión de revisión ortográfica original.

Sub SpellCheck()
Dim Rng As Range, oSuggestions As Variant
For Each Rng In ActiveDocument.Range.SpellingErrors
  With Rng
    If .GetSpellingSuggestions.Count > 0 Then
      
' TBD

  End If
  End With
Next
End Sub

¿Alguna sugerencia? Estoy dispuesto a aceptar cierto nivel de falsos positivos o palabras que deben corregirse manualmente. Solo algo que corrija los ejemplos representativos anteriores sería enorme. ¡Muchas gracias!

0
TomSHopping 11 may. 2021 a las 02:38

1 respuesta

La mejor respuesta

Quizás:

Sub SpellCheck()
Dim Rng As Range, oSuggestions As Variant
For Each Rng In ActiveDocument.Range.SpellingErrors
  With Rng
    If .Characters.First.Previous = " " Then
      .Characters.First.Previous.Delete
      .Start = .Words.First.Start
      If .SpellingErrors.Count > 0 Then
        ActiveDocument.Undo
        If .Characters.Last.Next = " " Then
          .Characters.Last.Next.Delete
          .End = .Words.Last.End
          If .SpellingErrors.Count > 0 Then ActiveDocument.Undo
        End If
      End If
    End If
  End With
Next
End Sub
1
macropod 11 may. 2021 a las 05:05