О словарях и проверке орфографии
Сегодня меня что-то заинтересовал вопрос: можно ли как-то пользоваться вордовскими словарями (или есть еще какие-то, удобные для использования?), а также как теоретически можно устроить проверку орфографии. Отчего-то кажется, что средства для этого уже написаны кем-то и когда-то... а?
Ну с орфографией все относительно просто - достаточно иметь список всех слов. Ровно так и поступает Ворд. Поэтому в предложении, например, "Чтение развевает интеллект" он ошибки не найдет (как, впрочем, и многие из людей).
Поскольку в русском языке (в отличие от английского) слова склоняются, возникает геморрой - узнав слово "кот", Ворду приходится отдельно учить и слова "котом", "кота", "коту", "коте" и т.д.
Но это все равно цветочки. С пунктуацией все гораздо сложнее...
Спасибо :) То, что нужно иметь большой список слов - это очевидно. В это связи и спрашиваю: можно как-то воспользоваться готовыми словарями?
Можно, у меня где-то был готовый пример. Найду, проверу и выложу
Можно, у меня где-то был готовый пример. Найду, проверу и выложу
Большое спасибо! :) Очень жду.
1. DocumentForm
2. Module1
3. SuggestionsForm
Старт программы из формы DocumentForm
[COLOR=red]1.[/COLOR] На форме DocumentForm один Textbox под именем Text1, multiline=true и две кнопки: Command1 (Caption="Check Document", Command2 ("Exit").
Код этой формы:
Private Sub Command1_Click()
Dim DRange As Range
Me.Caption = "starting word ..."
On Error Resume Next
Set AppWord = GetObject(, "Word.Application")
If AppWord Is Nothing Then
Set AppWord = CreateObject("Word.Application")
If AppWord Is Nothing Then
MsgBox "Could not start Word. Application will end"
End
End If
End If
On Error GoTo ErrorHandler
AppWord.Documents.Add
Me.Caption = "checking words..."
Set DRange = AppWord.ActiveDocument.Range
DRange.InsertAfter Text1.Text
Set SpellCollectionSpellCollection = DRange.SpellingErrors
If SpellCollectionSpellCollection.Count > 0 Then
SuggestionsForm.List1.Clear
SuggestionsForm.List2.Clear
For iWord = 1 To SpellCollectionSpellCollection.Count
SuggestionsForm!List1.AddItem SpellCollectionSpellCollection.Item(iWord)
Next
End If
Me.Caption = "Word VBA Example"
SuggestionsForm.Show
Exit Sub
ErrorHandler:
MsgBox "The following error occured during the document's spelling" & vbCrLf & Err.Description
End Sub
Private Sub Command2_Click()
End
End Sub
[COLOR=red]2.[/COLOR] Модуль Module1:
Public AppWord As Application
Public CorrectionsCollectionCollection As SpellingSuggestions
Public SpellCollectionSpellCollection As ProofreadingErrors
[COLOR=red]3.[/COLOR] Форма SuggestionsForm:
На форме два ListBox'a с именами List1 List2 и кнопка Command1 с заголовком "Close"
Private Sub Command1_Click()
Me.Hide
End Sub
Private Sub List1_Click()
Screen.MousePointer = vbHourglass
Set CorrectionsCollectionCollection = _
AppWord.GetSpellingSuggestions(SpellCollectionSpellCollection.Item _
(List1.ListIndex + 1))
List2.Clear
For iSuggWord = 1 To CorrectionsCollectionCollection.Count
List2.AddItem CorrectionsCollectionCollection.Item(iSuggWord)
Next
Screen.MousePointer = vbDefault
End Sub
Все взято из книги "Visual Basic 6 и VBA для профессионалов" издательство "Питер" 2000г.
Полный проект могу выслать на мыло, стучите в аську
Скачаю - посмотрю.
Спасибо, примерно это я и хотел найти.
Скачаю - посмотрю.
Так это вы пользуетесь дядей Вордом для проверки. Я думал, вам интересно САМИМ проверять...
Так это вы пользуетесь дядей Вордом для проверки. Я думал, вам интересно САМИМ проверять...
Ты прав - интересно.
Но где взять объемный словарь? Кроме того, нужно оптимизировать поиск, различать словоформы и т.д. Хотя для моей задачи подошла бы обычная проверка: есть такое слово или нет (хотя бы в своей основной форме). Есть сомнения, что кроме ворда и еще ряда спец. программ имеют такие словари в принципе. Так что если ворд - это решение, то все ок. Но если так сделать будет довольно медленно (процесс обращения к ворду, подозреваю, требует ощутимого времени), то видимо потребуется искать другие пути... (может быть формат вордовского словаря «раскрутить» придется и написать свои инструменты? :))
А больше идей нет?
Ты прав - интересно.
Но где взять объемный словарь? Кроме того, нужно оптимизировать поиск, различать словоформы и т.д. Хотя для моей задачи подошла бы обычная проверка: есть такое слово или нет (хотя бы в своей основной форме). Есть сомнения, что кроме ворда и еще ряда спец. программ имеют такие словари в принципе. Так что если ворд - это решение, то все ок. Но если так сделать будет довольно медленно (процесс обращения к ворду, подозреваю, требует ощутимого времени), то видимо потребуется искать другие пути... (может быть формат вордовского словаря «раскрутить» придется и написать свои инструменты? :))
А больше идей нет?
Есть еще такая штука, как Lingvo. Это больше чем просто англо-русский словарь. Поскольку он написан в России, от него можно ожидать приятных сюрпризов. Наши программисты - лучшие в мире. Не говоря уже о программистках... :D
Есть еще такая штука, как Lingvo. Это больше чем просто англо-русский словарь. Поскольку он написан в России, от него можно ожидать приятных сюрпризов. Наши программисты - лучшие в мире. Не говоря уже о программистках... :D
Lingvo - это набор словарей иностранных слов с переводом, проверка орфографии это [COLOR=red]ОРФО[/COLOR]
Lingvo - это набор словарей иностранных слов с переводом, проверка орфографии это [COLOR=red]ОРФО[/COLOR]
Ребята, я конечно новичок и мало чего знаю. Но нельзя ли как-то использовать FineReader. Он когда незнакомые слова распознает спрашивает о том что это за слово: существительное, глагол, прилагательное, род. Предлагает формы множественного числа, падежные формы и т.д.
Ребята, я конечно новичок и мало чего знаю. Но нельзя ли как-то использовать FineReader. Он когда незнакомые слова распознает спрашивает о том что это за слово: существительное, глагол, прилагательное, род. Предлагает формы множественного числа, падежные формы и т.д.
Уважаемый! А на х@я? FineReader имеет свое четкое назначение, да в нем есть проверка орфографии, но это производная от ОРФО! Я думаю, не стоит микроскопами гвозди забивать!
А вы вот про орфо и файнридер говорите, а как конкретно ими воспользоваться знаете?
Вордом, кстати, вполне ничего получилось. Только как его потом из памяти выгружать?
А вы вот про орфо и файнридер говорите, а как конкретно ими воспользоваться знаете?
В рамках приведенных выше макросов Ворд выгружается так:
AppWord.Quit SaveChanges:=False
Только если у тебя на момент запуска макроса уже был открыт Ворд, он (макрос) подцепляется к нему (открытому Ворду), и так ты в конце можешь ненавязчиво прибить чью-то работу. По хорошему надо вот эти строки:
If AppWord Is Nothing Then
Set AppWord = CreateObject("Word.Application")
If AppWord Is Nothing Then
MsgBox "Could not start Word. Application will end"
End
End If
End If
оформить вот так:
If Not AppWord Is Nothing Then
WordIsNew = 0
Else
Set AppWord = CreateObject("Word.Application")
If Not AppWord Is Nothing Then
WordIsNew = 1
Else
MsgBox "Could not start Word. Application will end"
End
End If
End If
а выгружать так:
AppWord.Quit SaveChanges:=False
Else
AppWord.Documents(AppWord.Documents.Count).Close SaveChanges:=False
End If
Переменная WordIsNew - Static, Integer.
Вордом, кстати, вполне ничего получилось. Только как его потом из памяти выгружать?
А вы вот про орфо и файнридер говорите, а как конкретно ими воспользоваться знаете?
а ты уже используешь ОРФО смотри в Word "О программе", Microsoft вместо того чтобы писать свой модуль проверки орфографии использует ОРФО!