Частотность слов в word - VBA

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

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

Здравствуйте, уважаемые программисты! Нуждаюсь в Вашей доброй помощи. Моей девушке (лингвисту-переводчику) на последнем курсе ввели новую дисциплину "основы программирования", зачем это сделали для гуманитария,- не понятно Естественно она в этом не бум бум, ну и я тоже. Нуждаемся в Вашем совете и помощи! Задание следующие, преподаватель сказал, что им нужно разработать программу на vba по определению частотности основных слов и словосочетаний в ее дипломе, который она сейчас пишет в ворде 2007. Дала две книги по 300-400 страниц и сказала, что через три недели прогу надо сдать, для нас гуманитариев это конец, мы в этих книгах ничего не понимаем. Прошу большой помощи!

Решение задачи: «Частотность слов в word»

textual
Листинг программы
  1. Sub Частота_основ()              ' cyberforum.ru > KoGG > Sasha_Smirnov > KoGG
  2.    Const freq% = 1              ' частота появления слова, больше которой оно учитывается
  3.    Const OsnovaLen% = 2         ' Минимальная длина несокращаемой основы слова
  4.    Dim i&, j&, Lent%, dic As Object, vX As Variant, S$
  5.     Dim vesText As String       ' переменная для всего текста
  6.    Dim Slova                   ' переменная для массива слов
  7.    Dim Ok                      ' переменная для массива окончаний
  8.    Dim t As String             ' переменная для текста очередного "слова"
  9.    ' Массив удаляемых окончаний, массив упорядочен от 3 буквенных до 1 буквенных :
  10.    Ok = Split("АМИ ЕМИ ЕМЯ ЁТЕ ЕТЕ ЁШЬ ЕШЬ ИМИ ИТЕ ИШЬ ОМУ ОГО УМЯ ЫМИ ЫТЕ ЫШЬ АМ АС АТ AX АЯ ЕЕ ЕЁ ЕЙ ЕМ EX ЕЮ ЁТ ЕТ ЁХ ЕХ ИИ ИЕ ИЙ ИМ ИТ ИХ ИЮ ЫИ ЫЕ ЫЙ ЫМ ЫТ ЫХ ЫЮ МИ МЯ ОВ ОЕ ОЁ ОЙ ОМ ОЮ УМ УТ УХ УЮ ШЬ ЬЕ ЬЁ ЬЮ ЬЯ А Е Ё И О У Ы Ь Ю Я", " ")
  11.     ' Массив длин окончаний
  12.    Dim k%(): ReDim k(UBound(Ok)): For i = 0 To UBound(Ok): k(i) = Len(Ok(i)): Next
  13.     Application.ScreenUpdating = False
  14.     Set dic = CreateObject("Scripting.Dictionary")
  15.     With dic
  16.         .CompareMode = 1   ' Отключение чувствительности к регистру в словаре.
  17.        vesText = ActiveDocument.Range.Text
  18.         vesText = Replace$(vesText, vbCr, " ")
  19.         vesText = Replace$(vesText, vbLf, " ")
  20.         vesText = Replace$(vesText, vbTab, " ")
  21.         vesText = Replace(vesText, Chr$(160), " ", , , vbBinaryCompare) ' Неразрывный пробел
  22.        vesText = Replace$(vesText, "  ", " ") ' 2 пробела на 1
  23.        vesText = Replace$(vesText, "  ", " ") ' еще раз - уменьшится массив
  24.        vesText = Replace$(vesText, "  ", " ") ' еще раз
  25.        Slova = Split(vesText, " ")
  26.         vesText = ""
  27.         For i = 0 To UBound(Slova)
  28.            t = Slova(i)
  29.            If t <> "" Then
  30.                 Select Case Asc(UCase$(Right$(t, 1))) ' Проверяем , является буквой или цифрой последний символ слова
  31.                    Case 48 To 57               '  цифры
  32.                    Case 65 To 90, 168, 184, 192 To 223    '  ЗАГЛ. буквы
  33.                    Case Else: t = Left$(t, Len(t) - 1) ' Если нет, то обрезаем последний символ
  34.                End Select
  35.            End If
  36.            If t <> "" Then
  37.                 S = UCase$(t)
  38.                 Select Case Asc(S)
  39.                     Case 48 To 57: .Item(t) = .Item(t) + 1 '  цифры
  40.                    Case 65 To 90: .Item(t) = .Item(t) + 1 '  ЗАГЛ. латинские буквы
  41.                    Case 168, 184, 192 To 223  '  ЗАГЛ. буквы кириллицы
  42.                        ' Перебираем и удаляем окончания
  43.                        For j = 0 To UBound(Ok)
  44.                             Lent = Len(t)
  45.                             If Lent >= OsnovaLen + k(j) Then
  46.                                 If Right$(S, k(j)) = Ok(j) Then
  47.                                     t = Left$(t, Lent - k(j))
  48.                                     Exit For
  49.                                 End If
  50.                             End If
  51.                         Next j
  52.                         .Item(t) = .Item(t) + 1
  53.                 End Select
  54.            End If
  55.         Next
  56.         Documents.Add: ActiveWindow.ActivePane.View.Type = wdPrintView  ' вид "Разметка страницы"
  57.        For Each vX In .Keys
  58.             If .Item(vX) > freq Then Selection.TypeText vX & Chr(9) & .Item(vX) & Chr(13)
  59.         Next
  60.     End With
  61.     Set dic = Nothing
  62.     Erase Slova
  63.     With Selection: .Sort: .Collapse: .Delete: End With     ' Сортировка по алфавиту.
  64.    ActiveDocument.PageSetup.TextColumns.SetCount NumColumns:=4 ' В 4 колонки.
  65.    ActiveDocument.PageSetup.TextColumns.LineBetween = True     ' Линии между колонок.
  66.    ActiveDocument.Paragraphs.TabStops.Add CentimetersToPoints(3.5), wdAlignTabRight
  67. End Sub

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


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

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

13   голосов , оценка 4 из 5

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

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

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