Как определить количество неповторяющихся слов в документе - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, как известно, в документе Word (моя версия - 2010) есть статистика, которая показывает количество символов (всего) в документе. А есть ли такое внутреннее средство Word (или сторонняя программа), которое бы позволило узнать сколько в документе именно слов, причём слов не повторяющихся (если в документе слово, например, "молоко" встречается 10 раз, то учитывалось бы только одно использование)? И было бы неплохо, чтобы это средство (или прога) составила список всех (не повторяющихся) слов, использованных в документе. Если что-то подобное есть, подскажите, пожалуйста! Буду весьма признателен!

Решение задачи: «Как определить количество неповторяющихся слов в документе»

textual
Листинг программы
  1. Sub Частота_слов()      ' cyberforum.ru > KoGG > Sasha_Smirnov-30.9.2015
  2. Const freq = 1 ' частота появления слова в тексте, начиная с которой оно учитывается в словаре
  3. Dim oWord As Range, dic As Object, vX As Variant, S As String
  4. Dim t As String             ' переменная для текста очередного "слова" (oWord.Text)
  5.    Set dic = CreateObject("Scripting.Dictionary")
  6.             Application.ScreenUpdating = False
  7. With dic
  8.         .CompareMode = 0   ' чувствительность к регистру символов при подсчёте слов [1=выкл.]
  9.        
  10.         For Each oWord In ActiveDocument.Range.Words
  11.             t = oWord.Text
  12.                 t = Replace(t, Chr(160), Space(1)) ' замена в слове t неразр. пробела на пробел '|
  13.            While InStr(t, Space(2))                                                            '|
  14.                t = Replace(t, Space(2), Space(1)) ' замена в слове t двух и > пробелов на один '|
  15.            Wend                                                                                '|
  16.                If Not Right(t, 1) Like "[ " & Chr(10) & Chr(11) & Chr(13) & "]" Then t = t & " "
  17.                 S = UCase(t)
  18.                     Select Case Asc(S)
  19.                     Case 48 To 57, 65 To 90, 168, 184, 192 To 223   ' цифры и ЗАГЛ. буквы
  20.                    .Item(t) = .Item(t) + 1
  21.                     End Select
  22.         Next
  23.        
  24.     Documents.Add: ActiveWindow.ActivePane.View.Type = wdPrintView  ' вид "Разметка страницы"
  25.    For Each vX In .Keys
  26.         If .Item(vX) >= freq Then Selection.TypeText RTrim(vX) & Chr(9) & .Item(vX) & Chr(13)
  27.     Next
  28. End With
  29.         With Selection: .Sort: .Collapse: .Delete: End With         ' Сортировка слов по алфавиту.
  30.    
  31.         ActiveDocument.PageSetup.TextColumns.SetCount NumColumns:=4 ' В 4 колонки.
  32.        ActiveDocument.PageSetup.TextColumns.Spacing = CentimetersToPoints(2) ' 20 мм между колонок
  33.        ActiveDocument.PageSetup.TextColumns.LineBetween = True     ' Линии между колонок.
  34.        
  35.     With ActiveDocument    'установка полей; нумерация строк
  36.        With .PageSetup
  37.         .TopMargin = CentimetersToPoints(1)
  38.         .BottomMargin = CentimetersToPoints(1)
  39.         .LeftMargin = CentimetersToPoints(0.9)
  40.         .RightMargin = CentimetersToPoints(0)
  41.         .LineNumbering.Active = True    ' нумерация строк словаря (не слов! слово может и 2 строки занять)
  42.        .LineNumbering.RestartMode = wdRestartContinuous ' сплошная нумерация строк
  43.        .LineNumbering.DistanceFromText = 1.5 'pt
  44.        End With
  45.     .Paragraphs.TabStops.Add CentimetersToPoints(3.3), wdAlignTabRight ' таб 33 мм c выравниванием вправо
  46.    End With
  47. Set dic = Nothing 'Борис_Р, cyberforum.ru
  48. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы