Есть ли подстановочный знак MS Word для частоты? - PullRequest
0 голосов
/ 07 марта 2019

Я учусь использовать подстановочные знаки и коды Microsoft Word, чтобы помочь мне в качестве медицинского редактора.Большая часть моей работы заключается в отправке рукописей в медицинские журналы для ознакомления, и у каждого журнала есть свои особые требования.

В большинстве журналов мы представляем рукописи, требующие сокращения медицинских терминов / фраз только в том случае, если они используются.три или более раз.Например, термин «Общее выживание» может быть сокращен до ОС, если в тексте упоминается не менее трех раз.Если в тексте упоминается «Общее выживание» один или два раза, предпочтительно, чтобы этот термин оставался расширенным, и его не следует сокращать до ОС.

Мы использовали систему PerfectIt с помощью интеллектуального редактирования.Этот виджет Word сканирует аббревиатуры, которые используются только один раз, и помечает их для нашего обзора, но не обнаруживает, если аббревиатура используется только дважды в выделенном тексте.Мы надеемся найти какое-то решение (я думаю, что это будет своего рода поиск по шаблону или макрос), который сможет обнаружить, если сокращение используется только один или два раза.

Я видел это похожесообщение на stackoverflow , но, похоже, это связано с кодом.Мне нужно, чтобы это было на компьютере компании, к которому у меня нет административного доступа, и, кроме того, я ничего не знаю о коде.Я ценю любую помощь, руководство или указания для дальнейших исследований!

Спасибо!

Редактировать: я мог бы использовать поиск с использованием подстановочного знака, чтобы выделить все две + заглавные буквы с помощью <[AZ] {2,}>, затем отформатируйте их как выделенные, если это поможет с любыми макросами.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Если есть хотя бы одно сокращение аббревиатуры в скобках, вы можете использовать макрос, подобный следующему. Макрос проверяет содержимое документа на наличие заглавных / числовых сокращений в скобках, а затем оглядывается назад, пытаясь определить, какой термин они сокращают. Например:

Всемирная паутина (WWW)

Естественно, учитывая диапазон используемых аббревиатур, он не является надежным и, если совпадение не выполнено, предыдущее предложение (в терминах VBA) захватывается, чтобы пользователь мог редактировать вывод. Затем в конце документа создается таблица, в которой производится поиск всех ссылок на аббревиатуру (кроме определения), а также счетчиков и номеров страниц, добавляемых в таблицу.

Обратите внимание, что макрос не скажет вам, сколько раз в документе появляется «Всемирная паутина». В конце концов, учитывая ваши критерии, невозможно знать, какие термины должны были быть сокращены до аббревиатуры, но не были.

Sub AcronymLister()
Application.ScreenUpdating = False
Dim StrTmp As String, StrAcronyms As String, i As Long, j As Long, k As Long, Rng As Range, Tbl As Table
StrAcronyms = "Acronym" & vbTab & "Term" & vbTab & "Page" & vbTab & "Cross-Reference Count" & vbTab & "Cross-Reference Pages" & vbCr
With ActiveDocument
  With .Range
    With .Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .MatchWildcards = True
      .Wrap = wdFindStop
      .Text = "\([A-Z0-9]{2,}\)"
      .Replacement.Text = ""
      .Execute
    End With
    Do While .Find.Found = True
      StrTmp = Replace(Replace(.Text, "(", ""), ")", "")
      If (InStr(1, StrAcronyms, .Text, vbBinaryCompare) = 0) And (Not IsNumeric(StrTmp)) Then
        If .Words.First.Previous.Previous.Words(1).Characters.First = Right(StrTmp, 1) Then
          For i = Len(StrTmp) To 1 Step -1
            .MoveStartUntil Mid(StrTmp, i, 1), wdBackward
            .Start = .Start - 1
            If InStr(.Text, vbCr) > 0 Then
              .MoveStartUntil vbCr, wdForward
              .Start = .Start + 1
            End If
            If .Sentences.Count > 1 Then .Start = .Sentences.Last.Start
            If .Characters.Last.Information(wdWithInTable) = False Then
              If .Characters.First.Information(wdWithInTable) = True Then
                .Start = .Cells(.Cells.Count).Range.End + 1
              End If
            ElseIf .Cells.Count > 1 Then
              .Start = .Cells(.Cells.Count).Range.Start
            End If
          Next
        End If
        StrTmp = Replace(Replace(Replace(.Text, " (", "("), "(", "|"), ")", "")
        StrAcronyms = StrAcronyms & Split(StrTmp, "|")(1) & vbTab & Split(StrTmp, "|")(0) & vbTab & .Information(wdActiveEndAdjustedPageNumber) & vbTab & vbTab & vbCr
      End If
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
    StrAcronyms = Replace(Replace(Replace(StrAcronyms, " (", "("), "(", vbTab), ")", "")
    Set Rng = .Characters.Last
    With Rng
      If .Characters.First.Previous <> vbCr Then .InsertAfter vbCr
      .InsertAfter Chr(12)
      .Collapse wdCollapseEnd
      .Style = "Normal"
      .Text = StrAcronyms
      Set Tbl = .ConvertToTable(Separator:=vbTab, NumRows:=.Paragraphs.Count, NumColumns:=5)
      With Tbl
        .Columns.AutoFit
        .Rows(1).HeadingFormat = True
        .Rows(1).Range.Style = "Strong"
        .Rows.Alignment = wdAlignRowCenter
      End With
      .Collapse wdCollapseStart
    End With
  End With
  Rng.Start = ActiveDocument.Range.Start
  For i = 2 To Tbl.Rows.Count
    StrTmp = "": j = 0: k = 0
    With .Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Format = False
        .Forward = True
        .Text = "[!\(]" & Split(Tbl.Cell(i, 1).Range.Text, vbCr)(0) & "[!\)]"
        .MatchWildcards = True 
        .Execute
      End With
      Do While .Find.Found
        If Not .InRange(Rng) Then Exit Do
        j = j + 1
        If k <> .Duplicate.Information(wdActiveEndAdjustedPageNumber) Then
          k = .Duplicate.Information(wdActiveEndAdjustedPageNumber)
          StrTmp = StrTmp & k & " "
        End If
        .Collapse wdCollapseEnd
        .Find.Execute
      Loop
    End With
    Tbl.Cell(i, 4).Range.Text = j
    StrTmp = Replace(Trim(StrTmp), " ", ",")
    If StrTmp <> "" Then
      'Add the current record to the output list (StrOut)
      StrTmp = Replace(Replace(ParseNumSeq(StrTmp, "&"), ",", ", "), "  ", " ")
    End If
    Tbl.Cell(i, 5).Range.Text = StrTmp
  Next
End With
Set Rng = Nothing: Set Tbl = Nothing
Application.ScreenUpdating = True
End Sub

Function ParseNumSeq(StrNums As String, Optional StrEnd As String)
'This function converts multiple sequences of 3 or more consecutive numbers in a
' list to a string consisting of the first & last numbers separated by a hyphen.
' The separator for the last sequence can be set via the StrEnd variable.
Dim ArrTmp(), i As Long, j As Long, k As Long
ReDim ArrTmp(UBound(Split(StrNums, ",")))
For i = 0 To UBound(Split(StrNums, ","))
  ArrTmp(i) = Split(StrNums, ",")(i)
Next
For i = 0 To UBound(ArrTmp) - 1
  If IsNumeric(ArrTmp(i)) Then
    k = 2
    For j = i + 2 To UBound(ArrTmp)
      If CInt(ArrTmp(i) + k) <> CInt(ArrTmp(j)) Then Exit For
      ArrTmp(j - 1) = ""
      k = k + 1
    Next
    i = j - 2
  End If
Next
StrNums = Join(ArrTmp, ",")
StrNums = Replace(Replace(Replace(StrNums, ",,", " "), ", ", " "), " ,", " ")
While InStr(StrNums, "  ")
  StrNums = Replace(StrNums, "  ", " ")
Wend
StrNums = Replace(Replace(StrNums, " ", "-"), ",", ", ")
If StrEnd <> "" Then
  i = InStrRev(StrNums, ",")
  If i > 0 Then
    StrNums = Left(StrNums, i - 1) & Replace(StrNums, ",", " " & Trim(StrEnd), i)
  End If
End If
ParseNumSeq = StrNums
End Function
0 голосов
/ 07 марта 2019

Для любой данной аббревиатуры вы можете использовать такой макрос:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = InputBox("What is the Text to Find")
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = True
    .MatchWholeWord = True
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
  End With
  Do While .Find.Found
    i = i + 1
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub

Инструкции по установке и использованию макроса на ПК см .: http://www.gmayor.com/installing_macro.htm

Инструкции по установке и использованию макроса Mac см .: https://wordmvp.com/Mac/InstallMacro.html

...