Переводчикам на заметку: ускорение работы ABBYY Lingvo и других инструментов

в 22:21, , рубрики: ABBYY, big data, Lingvo, ram disk, windows, браузеры, высокая производительность, производительность, словари, словарь, Софт, метки: , , , , , , , ,

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

Среди электронных словарей ABBY Lingvo отличается одной ключевой особенностью: полнотекстовым поиском с индексацией. Что-то похожее можно реализовать при помощи индексов в Adobe Acrobat, но удобство интерфейсов именно в словарной области не подлежит сравнению.

ABBY Lingvo давно уже превратился из обычного словаря в универсальный агрегатор источников. Вдобавок к титанической работе фирмы-создателя, энтузиастами оцифрованы в формат Lingvo сотни пособий, в том числе и основные двуязычные, и огромные многотомные толковые словари серий Cambridge, Collins, Longman, Merriam-Webster, Oxford, и энциклопедические словари вроде Британики. Созданы локальные копии сетевых гигантов (Википедий, Викисловарей, Urban Dictionary и так далее). И при обычном использовании это предоставляло бы исключительные возможности. Но при полнотекстовом поиске всё это богатство превращается ещё и в языковые корпусы и базы соответствий. Значение такого поиска при переводах сложных терминов, устойчивых словосочетаний, фразеологизмов трудно переоценить.

С каждым выпуском ABBY расширяет допустимые границы компилируемых словарей и поисковых индексов. Уже сейчас можно скомпилировать словарь размером почти в 2 гигабайта исходного текста. Однако при подключении большого количества словарей индекс разрастается. И сами словари на диске, и поисковый пользовательский индекс также могут достигать гигабайтных размеров. При этом полнотекстовый поиск замедляется, на него начинает влиять скорость работы винчестеров. Эпоха развития SSD может помочь в решении этой проблемы, но пока эти механизмы ещё не используются повсеместно из-за большей цены и меньшей износоустойчивости. К счастью, есть способ, по приросту скорости выигрывающий даже у SSD.

Можно заставить программу переместить сами словари и поисковые индексы с диска в память. Вернее, мы сами их туда переместим, а программа будет продолжать работать с ними так, будто они всё ещё находятся на винчестере. Поможет нам в этом старое проверенное средство — RAM-диск.

Существует много программ, создающих подобие диска в памяти. Особое внимание нужно обратить на те, которые позволяют использовать память, недоступную для других нужд.

В современных 32-разрядных не-серверных Windows есть две основные границы использования памяти: программное ограничение до четырёх гигабайт, которые урезаются до трёх особенностями выделения памяти для устройств. По этим причинам сколько бы памяти вы не поставили, основные пользовательские Windows не увидят больше 3-х гигабайт плюс/минус ещё чуть-чуть.

Однако для указанных ограничений есть свои обходные пути: PAE и memory remapping (memory hole, PCI hole). Поэтому, если у вас не 64-разрядная или не серверная система и при этом трёх гигабайт памяти не хватает для размещения там RAM-диска со всем нужным, придётся включать все эти штуки. Биос лучше проверить самостоятельно: например, в этой полезной статье определённым устройствам отказывают в поддержке описанных обходных путей, однако я в биосе своей обречённой старенькой материнской платы таки нашёл опцию «memory hole», после включения которой всё заработало как нужно.

Перед всеми описываемыми манипуляциями полезно зарезервировать важные данные и создать актуальный образ системы для восстановления, если что-то пойдёт не так.

На сегодняшний день есть две хорошо известные программы, позволяющие использовать всю невидимую для системы память: Primo Ramdisk (VSuite Ramdisk II) и SuperSpeed RamDisk Plus. Если же кто планирует обойтись тремя гигабайтами, можно обратить внимание и на очень быстрый (а по некоторым данным — см. здесь и здесь — самый быстрый) RAMDisk Enterprise. Все эти программы позволяют сбрасывать содержимое RAM-дисков в образы на винчестер перед выключением компьютера или перезагрузкой и восстанавливать образы в память на самой ранней стадии загрузки системы. Хотя это и будет замедлять саму загрузку, будущий выигрыш стоит даже минутной задержки при запуске.

Большинство материнских плат для десктопов и ноутбуков последних 6-7 лет позволяют устанавливать до 8 гигабайт памяти. Сейчас это уже довольно недорогое удовольствие, и данного размера должно хватить даже для самого богатого набора словарей в Lingvo. Однако в крайних случаях можно обойтись и меньшим размером.

Что же можно переместить в Lingvo на RAM-диск?

1. Самое простое — это словари, как пользовательские, так и системные. Пользовательские словари пользователь подключает сам, поэтому он знает, где они находятся. Системные словари на Windows XP находятся в папке c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0DicSystem.

Обе группы словарей можно оставить на их прежнем месте для резерва, а программе указать на папки-копии при помощи файлов словарной конфигурации. Для пользовательских словарей это файл %USERPROFILE%Local SettingsApplication DataABBYYLingvo15.0Dicdictconf.ini, для системных — c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0Dicdictconf.ini. В обоих файлах нужно при помощи автозамены подменить старые адреса на новые, перед этим не забыв сохранить резервные копии обоих ini-файлов. Если же этот способ покажется неудобным, можно прибегнуть к описанному в следующих пунктах.

Естественно, все описанные в этом и следующих пунктах манипуляции нужно делать после закрытия программы и выгрузки её из памяти (Lingvo может долго завершать работу, проверять лучше по программам, отображающим активность процессов).

2. Можно переместить папку с самой программой и бинарными библиотеками (c:Program FilesABBYY Lingvo номер_версии). Возможно, разительного прироста скорости это не даст, но что-то можно выиграть. Тем более что в этой папке размещаются также многочисленные файлы .amd и .amm, отвечающие за морфологию. Если программа сама не загружает их в память, а подгружает с диска при необходимости, тогда перемещение имеет смысл.

3. И наконец — словарные индексы. К системным словарям это будет папка c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0Index, к пользовательским — %USERPROFILE%Local SettingsApplication DataABBYYLingvo15.0NonAbbyyIndex (хотя можно перенести и всю родительскую папку; для системных словарей лучше этого не делать, потому что вместе с индексом в родительской папке находятся и звуки, которые весят много, а нужны редко).

Здесь следует оговорить ещё одну трудность. Если перемещение словарей можно подкрепить редактированием файлов конфигурации, то перемещение индексов и самой программы вещь более заковыристая. Но тут нам поможет одно средство, работающее, к сожалению, только на файловых системах NTFS (к счастью, сам RAM-диск может быть и в системе FAT-32: она быстрее, а надёжность и отказоустойчивость при сбоях нам тут не так важна). Это средство — точки соединения NTFS. Primo Ramdisk (VSuite Ramdisk II) имеет встроенную утилиту для их создания, но можно воспользоваться и утилитой Junction. Алгоритм очень прост: копируем папку на RAM-диск (переназвать её там можно как угодно), для резерва переименовываем оригинальную папку во что-то вроде «оригинальное_название_bak» и создаём к копии точку соединения в родительской папке оригинала с оригинальным названием. Всё работает прозрачно, программа не будет делать никакого различия между прежней работой с оригиналами и новой переадресацией к копиям.

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

***

Работу с RAM-диском стоит также взять на вооружение тем, кто оцифровывает словари. Иногда приходится работать с текстовыми файлами гигабайтных размеров. И хотя есть текстовые редакторы для работы с такими громадными исходниками, редактирование и операции замены происходят при этом очень медленно. Если же поместить исходник в память, и редактирование ускорится, и компиляция, возможно, также пойдёт быстрее.

Все эти навыки можно применить и к другим программам. Поскольку браузером переводчики пользуются сейчас столь же часто, как и словарями, стоить подумать о перемещении в память браузерных профилей с их базами данных, а также браузерных кэшей. К счастью, статей об этом много, даже на одном только Хабре.

Автор: vmb


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js