Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Проверка орфографии с помощью Perl и MS Word


Автор: Suppir 26.9.2011, 14:59
Добрый день!

Подскажите, кто уже делал подобное. Есть большие текстовые файлы, я прогоняю их Perl-скриптом и достаю нужные абзацы. Теперь нужно в этих абзацах сделать проверку орфографии (проверка пунктуации не нужна). Можно ли использовать словари Word'а для проверки орфографии? Чтобы Perl вызвал Word в фоновом режиме и прогнал через его спеллчекер?

Добавлено через 13 минут и 44 секунды
Причем, мне не нужно, чтобы всплывало окно проверки орфографии Word. 

Мне нужно, например, послать переменную "миниципального"
и в результате вернуть 1, если такое слово есть в словаре Word, и 0, если такого слова нет. 

Автор: Pfailed 26.9.2011, 16:43
Помоему есть средства более подходящие чем word. Попробуйте Text::Aspell

Автор: Suppir 26.9.2011, 16:46
Дело в том, что у пользователей уже "хорошо обученные" словари Word.
Словари Aspell  придется заново обучать специфичной тематике. 

Автор: shamber 26.9.2011, 20:29
смотрите http://cpan.uwinnipeg.ca/htdocs/Lingua-MSWordSpell/Lingua/MSWordSpell.pm.html

Автор: Suppir 27.9.2011, 08:31
Смотрите, на AutoIt получилось решить:
http://autoit-script.ru/index.php/topic,6867.msg47472/topicseen.html#new


shamber, спасибо, попробую.

Автор: Suppir 27.9.2011, 10:54
На Perl написал, используя OLE. Смотрите, как все просто:

Код

use Win32::OLE;
$word = CreateObject Win32::OLE 'Word.Application';
$word->{'Visible'} = 0;

@words = ("Муниципального", "МуницЫпального", "Закон", "Зокон");
foreach (@words){
    my $result = $word -> CheckSpelling($_);
    print "$_ - $result\n";
}
$word->Quit;

<>;




Только нужно в кодировке ANSI посылать.

Добавлено через 2 минуты и 44 секунды
Имхо, очень полезная вещь!

Автор: Suppir 27.9.2011, 13:34
Вопрос:

Я создаю объект

use Win32::OLE;
$word = CreateObject Win32::OLE 'Word.Application';


Но не дожидаюсь окончания работы скрипта и закрываю консоль. При этом в задачах приложение Word продолжает висеть и работать. Можно ли как-то связать выполнение скрипта и запущенный Word - если скрипт принудительно закрывают, то для объекта предварительно делать $word->Quit; 
?

Автор: shamber 27.9.2011, 14:49
Код

    sub DESTROY {
    my $self = shift;
     
$word->Quit; 
    }

?

Автор: Suppir 27.9.2011, 15:04
shamber

нет, процесс Winword остается!

Т.е. я закрываю консоль Perl-скрипт с помощью крестика, не дождавшись до завершения скрипта. Можно ли в таком случае закрыть процесс winword, который был вызван этим скриптом?

Автор: Pfailed 27.9.2011, 18:32
При закрытии консоли приложению обычно прилетает SIGHUP, хотя не факт что в windows это так.

Автор: KSURi 27.9.2011, 23:06
В конструктор OLE-объекта можно передать ссылку на кастомный "деструктор". Читайте документацию внимательней.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)