1

Тема: Поиск имён собственных и указание на них при помощи комментария

Здравствуйте уважаемые друзья!Помогите решить проблему. Есть текстовый документ Word в котором встречаются имена собственные, т.е. слова с прописной буквы.Некоторые имена собственные стоят в кавычках (как ёлочках так и лапках), они тоже должны быть обнаружены.Слово с прописной буквы стоящее в начале предложения, так же как и слово с прописной буквы из одного символа (т.е. сокращенного имени) должно игнорироваться.Нужно их найти и указать на них вставкой комментария.Нижеприведенный код не работает так как хочется, пропускает имена кои должны быть найдены и т.п.Sub PROBA()Dim s As StringDim i1 As Long For i1 = 1 To ActiveDocument.Sentences.Count    ActiveDocument.Sentences(i1).Select ' Выделяем i1 предложение  Selection.MoveStart Unit:=wdCharacter, Count:=1  ' Сдвигаем выделение на 1 букву, а вдруг заглавная  'В выделеном i1 предложении (пропустив первую букву предложения) ищем строчную букву  With Selection.Find    .text =

2

Re: Поиск имён собственных и указание на них при помощи комментария

Прошу прощения. Текст сообщения почему-то при вставке скомкался и обрезался.  sad

3

Re: Поиск имён собственных и указание на них при помощи комментария

Мне кажется, что вам хватит поиска по тексту без долгого перебора. Не знаю, что вы имеете в виду под

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

4

Re: Поиск имён собственных и указание на них при помощи комментария

Мне кажется, что вам хватит поиска по тексту без долгого перебора. Не знаю, что вы имеете в виду под "комментарием", но вот этот код добавит "примечания". Не совсем понял про начало предложения, но если только с прописной игнорировать, то это легче лёгкого.

Sub Макросс1()
'Поиск слов с заглавной
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
sText = "[А-Я][а-я]{1;}"
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Wrap = wdFindContinue
    .Forward = True
    .MatchWildcards = True
    .Text = sText
    Do While .Execute = True
        Selection.Comments.Add Range:=Selection.Range: ActiveWindow.Panes(2).Close
    Loop
End With
Application.ScreenUpdating = True
End Sub
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

5

Re: Поиск имён собственных и указание на них при помощи комментария

Большое Вам спасибо!
Все работает замечательно. Но нужно еще, чтобы слова с большой буквы стоящие в начале предложения игнорировались. Так-же не должны быть отмечены (т.е. проигнорированы) слова со строчной буквы длинной в один символ. Аббревиатуры типа -  ОИРК, БВС должны так же быть помечены "примечаниями".

6

Re: Поиск имён собственных и указание на них при помощи комментария

Доброго времени суток!
  Получился скрипт выполняющий некоторые, ранее озвученные, требования, в частности:
   1) Слова с большой буквы стоящие в начале предложения игнорируются.
   2) Не отмечаются слова со строчной буквы длинной в один символ.
Но пока не получается составить регулярное выражение, чтобы аббревиатуры типа -  ОИРК, БВС   помечались "примечаниями" и скрипт находил слова с прописной буквы стоящие в кавычках (как "ёлочках",  так и "лапках"). Подскажите решение этой проблемы?

Sub ИменаСобственные ()
 Dim sText As String
  Application.ScreenUpdating = False    'Не обновлять страницы после каждого действия
  Selection.HomeKey Unit:=wdStory       'Перемещаемся в начало текста
 sText = "[ ]{1;3}[А-Я][а-я]{1;}"

 With Selection.Find
    .ClearFormatting                    'Сбросить форматирование из предыдущих операций поиска
    .Replacement.ClearFormatting        'Очистить атрибуты поля "Заменить"
    .Wrap = wdFindContinue
    .Forward = True
    .MatchWildcards = True
    .text = sText
      Do While .Execute = True
        'Если перед выделением стоит точка, то это начало предложения, и оно игнорируется
        If Application.Selection.Previous <> "." Then
          Selection.Comments.Add Range:=Selection.Range, text:="Возможно это имя собственное."
        End If
      Loop
 End With
 'Включить обновление экрана после каждого события
 Application.ScreenUpdating = True
End Sub

7

Re: Поиск имён собственных и указание на них при помощи комментария

Сбрасывайте пример документа страницы на 2 хотя бы. И там выделите красным цветом то, что не должно попасть в комментарий, но попадает, а зелёным то, что должно попасть в комментарий, но не попадает. Я не могу гадать.
То, что вы написали

If Application.Selection.Previous <> "." Then

работать не будет т.к. предыдущий символ - знак пробела, а не точка. А если это начало абзаца, то знак абзаца, а если начало документа = вообще ничего нет и будет ошибку выбивать.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

8

Re: Поиск имён собственных и указание на них при помощи комментария

Здравствуйте!
  Прошу прощения, что долго не отвечал. Про необходимость разбора текста...
Данный пример текста в приатаченном файле повествует о железнодорожной тематике.
В тексте зелёным цветом выделено, то что правильно, красным цветом - ошибки.
Когда речь идёт о железнодорожных горках, то наименования горок должны быть сокращены до одного заглавного (первого) символа взятого в кавычки ёлочки (т.е. ключевое слово -
гор|ки|ок|ка  и т.п.).
Когда речь идёт о станции, то наименование станции должно быть сокращены до одного заглавного символа с большой буквы, без кавычек.
В примере примечания А2 кавычки должны быть не "лапки", а "ёлочки".
В примере примечания А3 нужны кавычки "ёлочки".
Абревиатуры типа "ПТО" и "ЛХ" должны игнорироваться.
Наименование перегона должно быть сокращено до одной первой заглавной буквы, как и "Новосибирск-Западный" должно выглядеть как Н-З.
Наименование  парк|ов|и|а и т.п. (где символ - "|" означает - "или" ) “Б” должно быть в кавычках - "ёлочки", но не лапки.
Прочие имена собственные должны быть сокращены до одной первой заглавной буквы (например: "реку Обь" -  должно выглядеть как "реку О").
Похоже, что мне с таким заданием самому не справиться. Не могли бы Вы мне помочь?

Post's attachments

Пример.doc 15 Кб, 1 скачиваний с 2018-05-16 

You don't have the permssions to download the attachments of this post.

9

Re: Поиск имён собственных и указание на них при помощи комментария

5koleso пишет:

Здравствуйте!
  Прошу прощения, что долго не отвечал. Про необходимость разбора текста...
Данный пример текста в приатаченном файле повествует о железнодорожной тематике.
В тексте зелёным цветом выделено, то что правильно, красным цветом - ошибки.
Когда речь идёт о железнодорожных горках, то наименования горок должны быть сокращены до одного заглавного (первого) символа взятого в кавычки ёлочки (т.е. ключевое слово -
гор|ки|ок|ка  и т.п.).
Когда речь идёт о станции, то наименование станции должно быть сокращены до одного заглавного символа с большой буквы, без кавычек.
В примере примечания А2 кавычки должны быть не "лапки", а "ёлочки".
В примере примечания А3 нужны кавычки "ёлочки".
Абревиатуры типа "ПТО" и "ЛХ" должны игнорироваться.
Наименование перегона должно быть сокращено до одной первой заглавной буквы, как и "Новосибирск-Западный" должно выглядеть как Н-З.
Наименование  парк|ов|и|а и т.п. (где символ - "|" означает - "или" ) “Б” должно быть в кавычках - "ёлочки", но не лапки.
Прочие имена собственные должны быть сокращены до одной первой заглавной буквы (например: "реку Обь" -  должно выглядеть как "реку О").
Похоже, что мне с таким заданием самому не справиться. Не могли бы Вы мне помочь?

Самое главно, что для замены можно настроить "автозамену" в ворде. ПОчитайте об этом в интернете. Прописывать каждый вариант в макросе - долговато

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

10

Re: Поиск имён собственных и указание на них при помощи комментария

Должен вам сказать, что то, о чём вы говорили в самом начале совсем не соответствует вашему тексту. В сброшенном вами тексте вообще ни одного слова с заглавной буквы в кавычках. Слова с заглавной буквы в кавычках, о которых шла речь выглядят так:
"Ааааааа"
И именно для них писался макрос. Про выделение красным и зелёным я имел в виду, что нужно выделить в документе места, которые не были затронуты макросом, но должны были быть затронуты, и наоборот - были затронуты макросом, но не должны были быть затронуты. А вы мне сбросили уже совсем другой документ с другим ТЗ. Прочитайте в интернете про поиск и замену и осуществите несколько таких замен при включённой записис макроса (Вид - Макросы - Записать макрос - Ctrl+H - вписываем строку поиска и строку замены - жмём заменить всё - Вид - Макросы - Остановить запись). Впоследствии у вас будет готовый макрос, запуская который можно будет обрабатывать подобные слова. Чем универсальнее строка поиска - тем лучше. + Как я уже отмечал выше, используйте автозамену ворд. Данные инструменты позволят вам добиться хороших результатов, разбираться в каждом конкретном случае при написании макроса - займёт достаточно много времени.
Вот наилучший, на мой взгляд, сайт по Поиску и замене, в котором всё предельно ясно всё описывается:
внешняя ссылка

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871