Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2013 - Анализ текста

Ответить
Настройки темы
2013 - Анализ текста

Старожил


Сообщения: 241
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:28, 07-10-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Invincible, можно. Макросом.

Цитата Invincible:
пары слов наиболее связанных друг с другом »
Что это значит?

Отправлено: 09:57, 08-10-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 241
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
Что это значит? »
Пары слов, которые чаще всего встречаются, проще говоря их количество

Отправлено: 22:38, 08-10-2015 | #3


Старожил


Сообщения: 241
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
можно. Макросом. »
А у вас нету такого макроса? А то я в них не силен

Отправлено: 07:01, 09-10-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить 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
Надо понимать, что у Word'а своё понимание понятия «слова», оно может быть отличным от Вашего. Например, данная страница может давать такой набор «слов»:
Скрытый текст
Код: Выделить весь код
[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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
«мама мыла» и «мыла мама» — это должно числиться как одна пара или как две разных пары? »
Как одна пара слов

Отправлено: 11:18, 10-10-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, А как правильно запустить данный макрос?
Вставляю код в редактор Visual Basic, нажимаю Run (F5), но в документе где находится мой текст никаких изменений не происходит, пользуюсь Word 2013.

Отправлено: 16:09, 10-10-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Invincible:
но в документе где находится мой текст никаких изменений не происходит »
А разве там должны происходить какие-либо изменения?

Находясь в редакторе VBA, попробуйте нажать «Ctrl-G» для отображения окна «Immediate», куда идёт вывод «Debug.Print».

При желании, конечно, можно сделать вывод в новый документ Word или в текстовый файл на диске.

Отправлено: 19:59, 10-10-2015 | #9


Старожил


Сообщения: 241
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
А разве там должны происходить какие-либо изменения?
Находясь в редакторе VBA, попробуйте нажать «Ctrl-G» для отображения окна «Immediate», куда идёт вывод «Debug.Print». »
Все получилось, просто я думал, что результат работы макроса заменит исходный текст.

А нельзя добавить, чтобы учитывались падежи слов? Чтобы слово из-за разного окончания слова относилось к одному слову, а не к 5 например.
И еще союзы, предлоги, частицы удалить из текста, такие как "и", "а".

Отправлено: 20:08, 10-10-2015 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2013 - Анализ текста

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход