Страницы: Пред. 1 2
RSS
Наиболее часто встречающиеся слова в столбце
 
Похоже что это дефисы. Хотя их там 13 - но он точно находится между
Опыт
такая
И ещё чего-то 3 шт. прихвачено.
Но если заменить

Код
                                    For n = 0 To UBound(vaWordsText)
                                        If .exists(vaWordsText(n)) Then
                                            CntWords = CLng(.Item(vaWordsText(n)))
                                            .Item(vaWordsText(n)) = CntWords + 1
                                        Else
                                            .Add vaWordsText(n), 1
                                        End If
                                    Next
 
на

Код
                    For n = 0 To UBound(vaWordsText)
                        If Len(vaWordsText(n)) Then .Item(vaWordsText(n)) = .Item(vaWordsText(n)) + 1
                    Next
 
то лишнее не считает.
 
Спасибо большое, Hugo!
А как заменить код? Я с макросами только начинаю знакомиться, пока только через запись макроса. Я больше по формулам!
 
Hugo, спасибо ещё раз.
Я разобралась с заменой кода! Всё работает!!!
А можно ещё и цифры все удалить из текста перед подсчетом слов?
Заранее благодарна!
Изменено: docentas - 25.01.2014 22:19:55 (Уточнение формулировки)
 
Вам, LVL, так-же отдельное спасибо за создание очень эффективного макроса. При анализе текстов просто необходимый инструмент, кучу времени экономит!
 
Цифры могут быть и внутри слов - например сленговые "то4но" и т.д. Я б не парился - их можно сортировкой отобрать в результатах.
Но если что - это не ко мне, тут другие знатоки regexp есть :)
Вообще нужен пример текста с этими цифрами - какие укажете на выброс, такие и выкинут. Если захотят :)
 
Hugo, спасибо!
Я имела ввиду цифры отражающие даты, возраст. Но это не проблема, это так, перфекционизм. Можно в ворде удалить все цифры.  
 
Ну для отдельностоящих цифр можно добавить проверку:

Код
If Len(vaWordsText(n)) Then  
if not isnumeric(vaWordsText(n)) Then
.Item(vaWordsText(n)) = .Item(vaWordsText(n)) + 1 
end if 
end if
 
возможно, я чего-то недопонял...
но мне кажется, макрос может быть попроще:
Код
Sub t()
  Dim a()
  a = Sheets("Лист1").[a1].CurrentRegion.Value
  Set r = CreateObject("vbscript.regexp")
  Set d = CreateObject("scripting.dictionary")
  d.comparemode = 1
  
  r.MultiLine = True: r.Global = True: r.IgnoreCase = True
  r.Pattern = "[^-а-яёa-z]([-а-яёa-z]+)"
  For Each x In a
    If Not IsEmpty(x) Then
      Set m = r.Execute(" " & x)
      If m.Count Then
        For i = 0 To m.Count - 1
          d.Item(m(i).SubMatches(0)) = d.Item(m(i).SubMatches(0)) + 1
        Next
      End If
    End If
  Next
  Sheets("Лист2").Cells.Clear
  Sheets("Лист2").[a1:b1].Resize(d.Count) = Application.Transpose(Array(d.keys, d.items))
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А как сделать так чтобы например слова "Текст" и "тексту" "Текста" (т.е. слово в разных падежах, отличающееся только падежом) суммировались как одно!
ОЧЕНЬ НУЖНО!
ПОЖАЛУЙСТА ПОМОГИТЕ!
 
Да, для меня это тоже очень актуально. Но мне кажется, это либо невозможно, либо очень сложно! Но если это можно сделать, просто цены такому макросу не будет!!!!
Изменено: docentas - 28.01.2014 10:54:30
 
Цитата
novyi: ...чтобы например слова "Текст" и "тексту" "Текста" (т.е. слово в разных падежах, отличающееся только падежом) суммировались...
Это как это - плюс+плюс+плюс?!
Цитата
docentas: ...это либо невозможно, либо очень сложно!..
А проверить - заказать (а не брать "на слабо") - http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=list&FID=7 ... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
novyi, это реально сложная задача.
с русским языком вообще сложно...
одинаково написанные слова могут означать разные части речи (например, "течь", "смог")...
слово в каком-либо падеже может совпасть с совершенно другим словом в другом падеже или частью речи...
ну и т.д.

впрочем, многое зависит от контекста.
если это обработка каких-либо "офисных" документов (где русский литературный присутствует по минимуму) - то можно и попытаться.
без 100%-ной гарантии, конечно.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Для меня это не оплачиваемый проект. Соответственно, заказывать его исполнение не имеет смысла. А по исполнению, мне кажется, что придется или разбивать все слова по частям, после чего извлекать корень и значимые суффиксы и приставки, либо тупо прописывать какие слова нужно считать вместе. Исходя из того, что в современном русском языке более 60 тысяч часто употребляемых слов, то эту задачу, как я уже и говорила, либо невозможно решить вообще, либо очень трудоёмко. Посему моё предыдущее сообщение не попытка взять на "слабо", а личное, субъективное мнение.
 
Цитата
LVL написал:
согласен, немного идеализировал, дополненный вариант
Господа, приветствую!
Очень помогла эта ветка. Спасибо.
Есть вопрос к LVL - если в коде закомментировать эту часть:
Код
Private Function ReplaceText(ByRef astring As Variant, ByRef Mask As String, ByRef Model As String) As String
'Функция заменяет совпавшую с маской часть строки в соответствии с указанной моделью
Dim re As RegExp

Set re = New RegExp
re.Pattern = Mask
re.Global = True
re.IgnoreCase = True
re.MultiLine = False

ReplaceText = re.Replace(astring, Model)
End Function

Что произойдет/должно произойти при запуске макроса?
Я не знаток, поэтому закомментировал этот кусок, т.к. при запуске макроса вылетала ошибка с сылкой на первую строку этого блока.
 
Замените
Код
Dim re As RegExp

на
Код
Dim re As Object

и
Код
Set re = New RegExp

на
Код
Set re = CreateObject("vbscript.regexp")

после этого должно работать
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
после этого должно работать
Огромное спасибо!
Сработало.
 
Добрый день. скачал этот давний файл с макросом. Но он не работает. Может то что уже другие версии Excel. Не может кто нить глануть и поправить.
Спасибо огромное за вашу помощь.  

Цитата
LVL написал: Подсчет слов.xlsm  (23.88 КБ)
вот этот файл я скачал
 
Цитата
Makis86 написал:
поправить
Не интересно, вы же даже файл пример не приложили. Современный вариант - Power Query и сводная.
Цитата
Makis86 написал:
Может то что уже другие версии Excel.
Если что, то "Хрясь" в Excel 365 64bit работает.
Изменено: Андрей VG - 07.03.2021 14:03:41
 
спасибо, ваш файл с работал.  
Страницы: Пред. 1 2
Наверх