|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2013 - Анализ текста |
|
||||
|
|
2013 - Анализ текста
|
|
Старожил Сообщения: 241 |
Всем привет.
Можете подсказать, можно в Word производить такой анализ текста: разбить текст на слова, посчитать количество повторяющихся слов в тексте, найти пары слов наиболее связанных друг с другом и посчитать их количество? |
|
|
Отправлено: 23:28, 07-10-2015 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Invincible, можно. Макросом.
Цитата Invincible:
|
|
|
Отправлено: 09:57, 08-10-2015 | #2 |
|
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
|
Отправлено: 22:38, 08-10-2015 | #3 |
|
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
|
Отправлено: 07:01, 09-10-2015 | #4 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Invincible:
Цитата Invincible:
Например, для первой части: Цитата Invincible:
Option Explicit
Sub Sample()
Dim objWord As Range
Dim strWord As String
Dim objDictionary As Object
Dim elem As Variant
Set objDictionary = CreateObject("Scripting.Dictionary")
For Each objWord In ThisDocument.Words
strWord = Trim(Replace(objWord.Text, vbCr, ""))
If Not Len(strWord) = 0 Then
If Not objDictionary.Exists(strWord) Then
objDictionary.Add strWord, 1
Else
objDictionary.Item(strWord) = objDictionary.Item(strWord) + 1
End If
End If
Next
For Each elem In objDictionary.Keys
Debug.Print "[" & elem & "]", objDictionary.Item(elem)
Next
End Sub
Скрытый текст
[Invincible] 6 [вне] 2 [форума] 2 [Старожил] 2 [Сообщения] 3 [:] 13 [171] 2 [Благодарности] 3 [1] 2 [ ] 3 [Профиль] 3 [|] 12 [Отправить] 3 [PM] 3 [Цитировать] 3 [Сообщить] 3 [модератору] 3 [Всем] 1 [привет] 1 [.] 3 [Можете] 1 [подсказать] 1 [,] 8 [можно] 2 [в] 2 [Word] 1 [производить] 1 [такой] 1 [анализ] 1 [текста] 1 [разбить] 1 [текст] 1 [на] 2 [слова] 1 [посчитать] 2 [количество] 3 [повторяющихся] 1 [слов] 4 [тексте] 1 [найти] 1 [пары] 2 [наиболее] 2 [связанных] 2 [друг] 2 [с] 2 [другом] 2 [и] 1 [их] 2 [?] 3 [Полезное] 1 [сообщение] 1 [Отправлено] 2 [23] 1 [28] 1 [Вчера] 1 [Iska] 3 [сейчас] 1 [форуме] 1 [Ветеран] 1 [Contributor] 1 [14335] 1 [4358] 1 [Редактировать] 1 [Макросом] 1 [Цитата] 2 [»] 2 [Что] 2 [это] 2 [значит] 2 [09] 1 [57] 1 [Сегодня] 1 [#] 1 [2] 1 [Автор] 1 [темы] 1 [Пары] 1 [которые] 1 [чаще] 1 [всего] 1 [встречаются] 1 [проще] 1 [говоря] 1 |
||||
|
Отправлено: 08:17, 09-10-2015 | #5 |
|
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
|
Отправлено: 11:18, 10-10-2015 | #6 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Invincible, давайте попробуем так:
Скрытый текст
Option Explicit
Sub Sample()
Dim objWord As Range
Dim strWord As String
Dim objDictionary As Object
Dim elem As Variant
Dim strWord1 As String
Dim strWord2 As String
Dim i As Integer
Set objDictionary = CreateObject("Scripting.Dictionary")
For Each objWord In ThisDocument.Words
strWord = RemoveNonAlpha(objWord.Text)
If Not Len(strWord) = 0 Then
If Not objDictionary.Exists(strWord) Then
objDictionary.Add strWord, 1
Else
objDictionary.Item(strWord) = objDictionary.Item(strWord) + 1
End If
End If
Next
For Each elem In objDictionary.Keys
Debug.Print "[" & elem & "]", objDictionary.Item(elem)
Next
objDictionary.RemoveAll
Debug.Print "===================================================================="
For i = 1 To ThisDocument.Words.Count - 1
strWord1 = LCase(RemoveNonAlpha(ThisDocument.Words.Item(i).Text))
strWord2 = LCase(RemoveNonAlpha(ThisDocument.Words.Item(i + 1).Text))
If Len(strWord1) > 0 And Len(strWord2) > 0 Then
If StrComp(strWord1, strWord2, vbTextCompare) = 1 Then
strWord = strWord2 & " " & strWord1
Else
strWord = strWord1 & " " & strWord2
End If
If Not objDictionary.Exists(strWord) Then
objDictionary.Add strWord, 1
Else
objDictionary.Item(strWord) = objDictionary.Item(strWord) + 1
End If
End If
Next
For Each elem In objDictionary.Keys
Debug.Print "[" & elem & "]", objDictionary.Item(elem)
Next
objDictionary.RemoveAll
Set objDictionary = Nothing
End Sub
Function RemoveNonAlpha(strValue As String) As String
With CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Global = True
.Multiline = True
.Pattern = "([^a-zа-яё])*"
RemoveNonAlpha = .Replace(strValue, "")
End With
End Function
Дополнительно будем удалять из «слов» Word'а все небуквенные символы, а то как-то больно нелепо смотрятся слова из знаков препинания, цифр, кавычек и т.п. Пример для текста со страницы Темпы распространения Windows 10 за два месяца опережают Windows 7: Скрытый текст
[популярной] 1 [из] 1 [когда] 1 [либо] 1 [выпущенных] 1 [операционных] 1 [систем] 1 [для] 2 [персональных] 1 [компьютеров] 1 [Поэтому] 1 [показатели] 1 [распространения] 2 [сравнивают] 1 [именно] 1 [с] 1 [ней] 1 [Статистика] 1 [от] 1 [NetMarketShare] 1 [показывает] 1 [что] 1 [в] 5 [первые] 1 [два] 2 [месяца] 2 [после] 3 [релиза] 1 [дела] 1 [идут] 1 [лучше] 1 [чем] 2 [у] 2 [за] 2 [аналогичный] 1 [промежуток] 1 [времени] 1 [У] 1 [результат] 2 [намного] 1 [ниже] 1 [как] 1 [наглядно] 1 [показано] 1 [графике] 1 [Доля] 2 [достигла] 1 [значения] 1 [против] 1 [привлекла] 1 [своё] 1 [время] 1 [внимание] 1 [только] 1 [Однако] 1 [демонстрировала] 1 [стабильные] 1 [результаты] 1 [течение] 1 [девяти] 1 [месяцев] 1 [чего] 1 [её] 1 [темпы] 1 [выросли] 1 [ещё] 1 [больше] 1 [а] 2 [во] 1 [второй] 1 [месяц] 1 [устанавливали] 1 [примерно] 1 [три] 1 [раза] 1 [меньше] 1 [первый] 1 [через] 1 [лет] 1 [появления] 1 [составляет] 2 [около] 1 [целью] 1 [распространение] 1 [млрд] 1 [устройств] 1 [пока] 1 [же] 1 [млн] 1 ==================================================================== [операционная система] 1 [windows система] 1 [исправить призвана] 1 [исправить недостатки] 1 [версии недостатки] 1 [windows версии] 1 [главным однако] 1 [главным стремлением] 1 [microsoft стремлением] 1 [microsoft является] 1 [переманить является] 1 [на переманить] 1 [на неё] 1 [многочисленных неё] 1 [многочисленных пользователей] 1 [windows пользователей] 1 [на последняя] 1 [данный на] 1 [данный момент] 1 [момент уверенно] 1 [лидирует уверенно] 1 [и лидирует] 1 [и может] 1 [может считаться] 1 [самой считаться] 1 [популярной самой] 1 [из популярной] 1 [из когда] 1 [выпущенных либо] 1 [выпущенных операционных] 1 [операционных систем] 1 [для систем] 1 [для персональных] 1 [компьютеров персональных] 1 [показатели поэтому] 1 [показатели распространения] 1 [windows распространения] 1 [именно сравнивают] 1 [именно с] 1 [ней с] 1 [от статистика] 1 [netmarketshare от] 1 [netmarketshare показывает] 1 [в что] 1 [в первые] 1 [два первые] 1 [два месяца] 2 [месяца после] 1 [после релиза] 1 [дела релиза] 1 [windows дела] 1 [идут лучше] 1 [у чем] 1 [windows у] 3 [аналогичный за] 1 [аналогичный промежуток] 1 [времени промежуток] 1 [намного результат] 1 [намного ниже] 1 [как наглядно] 1 [наглядно показано] 1 [на показано] 1 [графике на] 1 [windows доля] 2 [два за] 1 [достигла месяца] 1 [достигла значения] 1 [в привлекла] 1 [в своё] 1 [время своё] 1 [внимание время] 1 [внимание только] 1 [windows однако] 1 [демонстрировала стабильные] 1 [результаты стабильные] 1 [в результаты] 1 [в течение] 1 [девяти течение] 1 [девяти месяцев] 1 [после чего] 1 [её чего] 1 [её темпы] 1 [распространения темпы] 1 [выросли распространения] 1 [выросли ещё] 1 [больше ещё] 1 [windows а] 1 [во второй] 1 [второй месяц] 1 [месяц устанавливали] 1 [примерно устанавливали] 1 [в примерно] 1 [в три] 1 [раза три] 1 [меньше раза] 1 [в чем] 1 [в первый] 1 [лет после] 1 [после появления] 1 [появления составляет] 1 [около составляет] 1 [а для] 1 [windows для] 1 [целью является] 1 [распространение является] 1 [на распространение] 1 [же пока] 1 [же результат] 1 [результат составляет] 1 |
|
Отправлено: 15:13, 10-10-2015 | #7 |
|
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать Iska, А как правильно запустить данный макрос?
Вставляю код в редактор Visual Basic, нажимаю Run (F5), но в документе где находится мой текст никаких изменений не происходит, пользуюсь Word 2013. |
|
Отправлено: 16:09, 10-10-2015 | #8 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Invincible:
Находясь в редакторе VBA, попробуйте нажать «Ctrl-G» для отображения окна «Immediate», куда идёт вывод «Debug.Print». При желании, конечно, можно сделать вывод в новый документ Word или в текстовый файл на диске. |
|
|
Отправлено: 19:59, 10-10-2015 | #9 |
|
Старожил Сообщения: 241
|
Профиль | Отправить PM | Цитировать Цитата Iska:
А нельзя добавить, чтобы учитывались падежи слов? Чтобы слово из-за разного окончания слова относилось к одному слову, а не к 5 например. И еще союзы, предлоги, частицы удалить из текста, такие как "и", "а". |
|
|
Отправлено: 20:08, 10-10-2015 | #10 |
|
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| F-Анализ 1.0 | OSZone Software | Новости программного обеспечения | 0 | 02-09-2015 16:30 | |
| CMD/BAT - [решено] Анализ лог файла с изменением текста. | Kainos | Скриптовые языки администрирования Windows | 2 | 18-04-2015 01:49 | |
| Договора и анализ 1.0 | OSZone Software | Новости программного обеспечения | 0 | 27-03-2010 09:30 | |
| MSFT SQL Server - анализ dm_os_wait_stats | eboue | Программирование и базы данных | 0 | 03-04-2009 20:05 | |
| [решено] Какая разница между "Сигнатурный анализ" и "Эвристический анализ"? | verdix | Хочу все знать | 3 | 10-11-2008 23:50 | |
|