Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2014, 17:13   #1
Maria_Babkina
Пользователь
 
Регистрация: 29.09.2014
Сообщений: 13
По умолчанию Пожауйста помогите студентке гуманитарного вуза

Здравствуйте!

Пожалуйста, помогите! Проблема заключается в следующем, есть огромный художественный текст, в котором случайным образом находятся Имена+Фамилии. Необходимо выписать из всего текста каждое Именя+Фамилию и записать, какое количество раз оно встречается в тексте.
Например:
Архитектор Василий Петров завершил проект это здания в 1953 году. Под его началом трудились многие инженеры и проектировщики, среди них Ольга Зайцева, Антон Антипов. Позднее, Ольга Зайцева участвовала и в других проектах.
В результате хочется получить:
Антон Антипов - 1
Василий Петров - 1
Ольга Зайцева - 2
Мне посоветовали обратиться к вам на формум, сама я программировании не разбираюсь.
Уповаю на вашу доброту!

Последний раз редактировалось Maria_Babkina; 30.09.2014 в 12:51.
Maria_Babkina вне форума Ответить с цитированием
Старый 30.09.2014, 07:23   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Код:
Dim names() As String 'массив встречающихся имен
Dim name_count() As Integer ' количество каждого из встречающихся имен
Dim flag1,flag2, i As Integer
Dim fs
Dim f
Dim TextLine
Dim TestArray()

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile("c:\testfile.txt", True)
flag1 = 0
Do While f.AtEndOfStream <> True
TextLine = f.ReadLine
TestArray = Split(TextLine)
If flag1 = 0 Then
ReDim names(1)
ReDim name_count(1)
names(0) = TestArray(0)
name_count(0) = 1
flag1=1
Else
flag2 = 0
For i=0 To names.Length-1
If TestArray(0) = names(i) Then
flag2=1
name_count(i) = name_count(i) + 1
End If
If flag2=0 Then
ReDim Preserve names(names.Length+1)
ReDim Preserve name_count(names.Length+1)
names(names.Length-1) = TestArray(0)
name_count(names.Length-1)=1
End If
Next i
End If
Loop
Код не проверял, нужно доводить.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 30.09.2014, 10:52   #3
Maria_Babkina
Пользователь
 
Регистрация: 29.09.2014
Сообщений: 13
По умолчанию

Здравстуйте, challenger !
Огромное спасибо за ответ!
Цитата:
Сообщение от challengerr Посмотреть сообщение
[code]
Код не проверял, нужно доводить.
Не могли бы вы ответить на вопрос, как должен работать этот скрипт? Каким образом код понимается, что найденое слово - это имя?
Как я уже писала, имена в тексте встречаются в формате: Имя+Фамилия или Фамилия+Имя.
В каком направлении двигаться? Пожалуйста, подскажите
Maria_Babkina вне форума Ответить с цитированием
Старый 30.09.2014, 12:45   #4
Maria_Babkina
Пользователь
 
Регистрация: 29.09.2014
Сообщений: 13
По умолчанию

Наверное, я неполно объясниласуть задачи.
Есть художественный текст, в котором случайным образом находятся Имена+Фамилии. Необходимо выписать каждое Именя+Фамилию и узнать, какое количество раз оно встречается в тексте.

Например:
Архитектор Василий Петров завершил проект это здания в 1953 году. Под его началом трудились многие инженеры и проектировщики, среди них Ольга Зайцева, Антон Антипов. Позднее, Ольга Зайцева участвовала и в других проектах.
В результате хочется получить:
Антон Антипов - 1
Василий Петров - 1
Ольга Зайцева - 2


Я совсем не знаю, что делать. Пожалуйста, помогите!

Последний раз редактировалось Maria_Babkina; 30.09.2014 в 12:52.
Maria_Babkina вне форума Ответить с цитированием
Старый 30.09.2014, 13:22   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Maria_Babkina

Архитектор Василий Петров завершил проект это здания в 1953 году. Под его началом трудились многие инженеры и проектировщики, среди них Ольга Зайцева, Антон Антипов. Позднее, Ольга Зайцева участвовала и в других проектах.
В результате хочется получить:
Антон Антипов - 1
Василий Петров - 1
Ольга Зайцева - 2


У вас должна быть база имен и фамилий (или только база имён, если предположить, что за именем всегда следует фамилия), потом из текста выделять каждое слово, производить морфологический разбор слова и сверять по базе.

Я не знаю, что именно вам сообщили, когда "посоветовали обратиться к вам на формум", может быть что-то в стиле "здесь тусуется кучка ботанов, пишешь им на форум задание, и они всей толпой радостно бросаются решать его, а потом подносят готовый результат прямо в клювик", но я сомневаюсь что кто-то будет тратить свое время, чтобы впрягаться за очередную конвеерную "студентку гуманитарного вуза".

Я совсем не знаю, что делать. Пожалуйста, помогите!

Озвучте цену за выпоняемую для вас работу.
Rififi вне форума Ответить с цитированием
Старый 30.09.2014, 15:04   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Архитектор Василий Петров завершил проект это здания в 1953 году. Под его началом трудились многие инженеры и проектировщики, среди них Ольга Зайцева, Антон Антипов. Позднее, Ольга Зайцева участвовала и в других проектах вместе с Василием Петровым
В результате хочется получить:
Антон Антипов - 1
Василий Петров - 1
Ольга Зайцева - 2
и как быть с падежами и дополнительным первым словом в предложении(повторы не проблема)

** Архитектор Василий Петров
Ольга Зайцева
Антон Антипов
Ольга Зайцева
** Василием Петровым
Антон Антипов
Василий Петров
Ольга Зайцева
=======
или В.Петровым или В.А.Петровым
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 30.09.2014, 15:35   #7
Maria_Babkina
Пользователь
 
Регистрация: 29.09.2014
Сообщений: 13
По умолчанию

Я не знаю, как использовать готовые базы данных, например для имён и фамилий. Однако, считаю, что такой подход нельзя использовать, т.к. в тексте присутствуют зарубежные имена, например Джордж Лукас.

Один знакомый предложил использовать выборку по двум соседним словам, написанным с заглавной буквы. Но как это записать в макрос он не знает.

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
и как быть с падежами и дополнительным первым словом в предложении(повторы не проблема)
Дополнительных слов в тексте нет, все написаны развернуто.
Как я понимаю, падежи - огромная проблема, поэтому её не надо решать. Думаю, я смогу потом руками отредактировать за день...

shanemac51, Если у вас есть возможность, пожалуйста, помогите.
Maria_Babkina вне форума Ответить с цитированием
Старый 30.09.2014, 16:33   #8
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

вы сможете записать макрос в шаблон и запустить его?
или присылайте файл
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 30.09.2014, 16:48   #9
Maria_Babkina
Пользователь
 
Регистрация: 29.09.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
вы сможете записать макрос в шаблон и запустить его?
или присылайте файл
Да, думаю, что смогу.
Макрос-> записать макрос.
Затем я сразу его останавливаю.
Макрос-> посмотреть макрос.
Выбираю, только что записанный пустой макрос.
Жму кнопку Edit.
И сюда, как я поняла, и нужно вставлять код.
Все верно?
Maria_Babkina вне форума Ответить с цитированием
Старый 30.09.2014, 18:02   #10
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

ВСЕ правильно, правда у меня подсчет не вставлен
попробуйте попрактиковаться на
Код:
Sub w140930_14()
Dim w1 As Object, s1, K1, SS
Dim zpath, zname
SS = ""
zpath = Word.ActiveDocument.Path & "\"
zname = zpath & "spisok140930.txt"
Open zname For Output As #1
For Each w1 In Selection.Words
s1 = w1
If s1 Like "[А-ЯЁ]*" Then
K1 = K1 + 1
SS = SS & Trim(s1) & " "
Else
If Len(SS) > 5 And K1 > 1 Then
'Debug.Print K1, SS
Print #1, SS
End If
SS = ""
K1 = 0
End If
Next w1

Close #1
End Sub
получите текстовик, откройте его ехсель и через впр и сводную волучите желаемое
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор вуза mmlol Свободное общение 16 28.05.2011 16:07
Помогите бедной студентке-програмистке kat'ka Фриланс 10 03.04.2009 11:04
Помогите, пожалуйста, студентке. Викуля Помощь студентам 2 18.12.2007 03:20