В качестве базы синонимов используется информация в тезаурусе.
Содержимое этой базы можно удобно просматривать с помощью программы Грамматический Словарь
Русского Языка. Расширение базы синонимов возможно несколькими способами.
Во-первых, SDK Синонимизатора поддерживает механизм пользовательских словарей. Таким образом можно добавлять собственные синонимы к базовому словарю, к примеру используя утилиту LexiconEditor.
Во-вторых, SDK Pro позволяет загрузить словарь в SQL базу данных и редактировать тезаурус с помощью программы SQLex.
В-третьих, в случае приобретения полного комплекта SDK с исходными текстами словаря можно редактировать данные, на основе которых собирается тезаурус, с помощью обычного текстового редактора.
Все описываемые ниже процедуры являются частью API синонимизатора, который доступен
как DLL и .NET сборка в SDK
синонимизатора.
На странице синонимизатора
есть ссылки для скачивания демонстрационных версий программ Synonymizer (консольный синонимизатор и перефразировщик) и Joker (генератор и перефразировщик
текста).
В составе SDK есть две утилиты, выполняющие синонимизацию и перефразировку текста.
Во-первых, консольная утилита Rewriter для платформы .NET. Она написана на C#, использует DLL-версию движка. Она работает на 32- и 64-битных версиях MS Windows с установленным .NET Framework. Ее исходные тексты включены в SDK как один из примеров.
Во-вторых, консольная утилита Synonymizer. В
отличие от
Rewriter, в ней код грамматического
движка
скомпилирован как часть программы. Она доступна в вариантах для 32- и 64-битных
версий MS
Windows и Linux.
В составе демо-программы Joker, доступной для свободного
скачивания, так же есть модуль синонимизации и перефразировки:
В составе SDK Синонимизатора есть несколько простых программ,
демонстрирующих работу с API перефразировщика.
К примеру, в подкаталоге
...\demo\ai\solarix\Grammar_Engine\LinuxRewriter можно найти простой
пример на C++, который компилируется и под Windows, используя synonymizer.dll, а под Linux, используя synonymizer.so.
HGREN_PHRASOMAT sol_CreatePhraseGenerator( HGREN hEngine, int ilang )
Аргументы:
ilang - код языка, целочисленные константы объявлены в _sg_api.h, _sg_api.cs, _sg_api.pas для C++, C# и Delphi соответственно.
Возвращает: дескриптор объекта, который затем указывается в других процедурах для работы с генератором текста. Вы должны удалить объект по окончании работы вызовом sol_DeletePhraseGenerator. При возникновении ошибки, например если задан неподдерживаемый язык, возвращается NULL.
int sol_DeletePhraseGenerator( HGREN_PHRASOMAT hBuilder )
Аргументы:
hBuilder - дескриптор генератора, созданный sol_CreatePhraseGenerator.
Перенастройка внутреннего генератора псевдослучайных чисел
void sol_RandomizePhraseGenerator( HGREN_PHRASOMAT hBuilder )
Для удобства отладки генерация текста всегда происходит одинаковым образом, так как входящий в состав ГТ генератор псевдослучайных чисел по умолчанию инициализируется одинаково для каждой сессии. Чтобы ввести в работу ГТ необходимых элемент энтропии, просто вызовите данную процедуру. Каждый новый вызов запускает ГПСЧ с нового значения.
Аргументы:
hBuilder - дескриптор генератора, созданный sol_CreatePhraseGenerator.
void sol_SetWordsForPhrase( HGREN_PHRASOMAT hBuilder, int n, const int* words_ie, bool use_thesaurus )
По умолчанию генератор использует все имеющиеся в загруженном лексиконе слова. Чтобы ограничить генератор, можно задать список слов и N-грамм (см. sol_Set2GramsForPhrase).
Аргументы:
hBuilder - дескриптор объекта генератора текста, созданного вызовом sol_CreatePhraseGenerator.
n - число слов в списке
words_ie - индексы слов, разрешенных к использованию (см. sol_FindEntry).
use_thesaurus - использовать ли грамматически связанные с заданными в words_ie слова.
void sol_Set2GramsForPhrase( HGREN_PHRASOMAT hBuilder, int npairs, const int* words_ie )
По умолчанию генератор использует любые грамматически законные, но возможно семантически и прагматически недопустимые, сочетания слов. Чтобы ограничить генератор в выборе пар, можно задать список слов (см. sol_SetWordsForPhrase) и N-грамм.
Аргументы:
hBuilder - дескриптор объекта генератора текста, созданного вызовом sol_CreatePhraseGenerator.
n - число пар в списке
words_ie - индексы слов, разрешенных к использованию (см. sol_FindEntry). Число элементов списка равно удвоенному n.
Задание фильтрующих тегов для выбора синонимов
int sol_SetTagsW( HGREN_PHRASOMAT hBuilder, const wchar_t * Tags, int Flags )
int sol_SetTagsA( HGREN_PHRASOMAT hBuilder, const char * Tags, int Flags )
int sol_SetTags8(
HGREN_PHRASOMAT hBuilder, const char * Tags, int Flags )
Аргументы:
Tags - список (в текущей версии поддерживается только одна пара) пар тег=значение.
Указанные теги запоминаются и при последующих вызовах sol_Paraphrase
влияют на выбор синонимов из тезауруса. Для варианта sol_SetTagsW это строка из широких символов, для sol_SetTags8 строка имеет кодировку utf-8. Если указать пустую строку, то фильтр будет отменен.
Flags - дополнительные управляющие флаги, в текущей версии должно быть 0.
Генерация очередного предложения
wchar_t* sol_GeneratePhrase( HGREN_PHRASOMAT hBuilder, int PhraseType )
Аргументы:
PhraseType - флаги, управляющие генерацией. Может быть битовой комбинацией констант, объявленных в faind.h:
FG_QUEST
- генерировать вопросительные
предложения
FG_EXCLAM -
генерировать восклицательные
предложения
FG_COMSENT -
генерировать
повествовательные предложения
FG_LOGICS
- предложения с логическими конструкциями
типа кошка и собака, быть или не
быть.
FG_GERUND1 -
использовать
причастные обороты
FG_GERUND2 -
использовать
деепричастные обороты
FG_INTRO -
использовать
семантический мусорв виде вводных слови словосочетаний.
FG_COMPLEX -
использовать сложные
конструкции типа "луна видна при условии, что небо чистое".
FG_MULTISENT
- генерировать
фрагменты, состоящие из нескольких связанных
по
смыслу предложений, например - временные
последовательности.
При работе алгоритм учитывает заданные ранее белые списки слов и пар слов (sol_SetWordsForPhrase и sol_Set2GramsForPhrase). С помощью добавления к PhraseType нижеописанных констант можно управлять использованием фильтрующих списков:
FG_USE_LEX_WHEN_EXHAUSTED - слова
берутся из
белого списка случайным образом и удаляются в случае успеха,
а после исчерпания списка начинают поставлятьсяиз
всего лексикона. По умолчанию
без этого флага исчерпание белого списка приведет к тому,
что слова будут браться из белого списка без удаления
использованных.
FG_EXTRACT_FIRST
- слова берутся из
белого списка не случайно, а последовательно.
FG_DONT_REMOVE_USED
- слова берутся
из белого списка, но удаляются из него, так что могут встречаться в сгенерированных
предложениях
снова и снова.
Возвращает: указатель на строку со сгенерированным предложением. Освобождение этого указателя выполняется функцией sol_DeleteGeneratedPhrase.
Генерация фразы - вариант без выделения памяти
int sol_GeneratePhrase2( HGREN_PHRASOMAT hBuilder, int PhraseType, wchar_t* Buffer, int maxlen )
Единственным отличием этой процедуры от sol_GeneratePhrase является то , что она копирует созданное предложение в предоставленный буфер Buffer.
Освобождает память , выделенную под сгенерированную фразу
int sol_DeleteGeneratedPhrase( wchar_t*Phrase )
Аргументы:
Phrase - указатель на строку, которую возвратила процедура sol_GeneratePhrase.
Подготовка к имитации текста - изучение исходного текста
int sol_BuildKnowledgeBase( HFAIND hEngine, const wchar_t *DocumentsFolder, const wchar_t *DestinationFolder, int LanguageId, int Flags )
Выявляются статистические характеристики текста документов, которые находятся в указанном каталоге. База данных о тексте сохраняется в заданном каталоге. Затем эту базу можно загрузить процедурой sol_LoadKnowledgeBase и сгенерировать набор предложений, имитирующих статистические характеристики исходного текста без сохранения семантики, с помощью sol_GeneratePhrase.
Аргументы:
DocumentFolder - путь к папке с изучаемыми документами. Движок используется для обработки документов все доступные плагины поискового движка.
DestinationFolder - папка для сохранения файлов базы знаний об исходных документах.
LanguageId - идентификатор языка, можно использовать константы API или процедуру sol_FindLanguage.
Flags - должен быть 0 в текущей версии.
Возвращает:
0 - база знаний успешно построена, значение <0 возвращается при ошибке.
Загрузка результатов изучения текста
int sol_LoadKnowledgeBase( HGREN_PHRASOMAT hBuilder, const wchar_t *FolderPath )
База с результатами изучения текста создается вызовом sol_BuildKnowledgeBase. После загрузки базы можно генерировать случайный текст, сохраняющий статистические характеристики исходного текста, с помощью вызовов sol_GeneratePhrase.
Аргументы:
FolderPath - папка с базой знаний, записанной sol_BuildKnowledgeBase.
Возвращает:
0 - база успешно загружена, -1 возникла ошибка.
HGREN_FGTEMPLATE sol_CreateFGTemplate( HGREN_PHRASOMAT hBuilder, const wchar_t*text, int Language )
Аргументы:
text - одно или несколько предложений. Оптимальным вариантом является именно одно предложение.
Language - идентификатор языка.
Возвращает: дескриптор объекта , который затем может быть использован для генерации текста. Удаление этого объекта выполняется процедурой sol_DeleteFGTemplate.
int sol_DeleteFGTemplate( HGREN_FGTEMPLATE hTemplate )
Сколько слов в шаблоне могут подставляться при генерации
int sol_CountFGTemplateQuantors( HGREN_FGTEMPLATE hTemplate )
Возвращает: количество слов в шаблоне (в текущей версии - существительных), которые могут подставляться на другие слова с учетом согласований, при генерации текста из шаблона.
Степень завершенность синтаксического анализа для шаблона
int sol_CountFGTemplateRoots( HGREN_FGTEMPLATE hTemplate )
Возвращает: количество узлов верхнего уровня в минимальном графе после выполнения синтаксического анализа.
Синтаксический анализ выполняется для шаблона автоматически при его создании в sol_CreateFGTemplate. Обычно полностью успешный синтаксический анализ приводит к графу с 1 узлом верхнего уровня (2 специальных узла, отмечающих начало и конец предложения в данной функции не учитываются). Так как последующая корректная генерация предложений из шаблона во многом определяется успешностью синтаксического анализа исходного шаблона, то данная функция позволяет выявить слишком "сложные" или неверное интерпретируемые тексты.
int sol_GeneratePhrase3( HGREN_PHRASOMAT hBuilder,HGREN_FGTEMPLATE hTemplate,int PhraseType, wchar_t* NewPhrase,int maxlen)
Возвращает: кол-во символов, не считая терминирующего 0, записанных в NewPhrase
Аргументы:
PhraseType - управляет ходом генерации фразы. В текущей версии допускается только значение FG_SUBSTWORDS.
NewPhrase - буфер для записи сгенерированного текста
maxlen - максимальная вместимость буфера (в символах).
Задание списка запрещенных синонимов
void sol_StopSynonyms( HGREN_PHRASOMAT hBuilder, int n, const int* words_ie, bool use_thesaurus )
Синонимизатор не будет синонимизировать слова из списка. Программа Rewriter использует этот вызов для обработки списка стоп-слов из файла stopsyn.txt.
Аргументы:
hBuilder - дескриптор объекта генератора текста, созданного вызовом sol_CreatePhraseGenerator.
n - число слов в списке
words_ie - индексы слов, запрещенных для синонимизации (см. sol_FindEntry).
use_thesaurus - использовать ли грамматически связанные с заданными в words_ie слова.
Перефразирование и синонимизация
int sol_Paraphrase( HGREN_PHRASOMAT hBuilder, int ScenarioType, int SyntaxAnalysisFlags, int NGramFlags, int ThesaurusFlags, int DebugFlags, int ResultsFormat, int MaxSubst, const wchar_t* OrgPhrase, wchar_t* NewPhrase, int maxlen, int max_elapsed_msec )
Данная процедура пытается изменить синтаксис предложения без изменения его семантики, прежде всего за счет изменения порядка слов, который для русского языка близок к свободному. Кроме того, опционально может выполняться синонимизация - подстановка синонимов для некоторых слов.
Возвращает: кол-во символов, не считая терминирующего 0, записанных в NewPhrase
Аргументы:
ScenarioType - флаг выбора сценария модификации:
FG_SYNONYMIZE - случайным образом менять слова на синонимы.
FG_SYNONYMIZER_MULTIWORD - работать с многословными синонимами, в том числе - расшифровывать аббревиатуры.
FG_PARAFRASE_REORDER - менять порядок слов. В русском языке порядок слов достаточно свободен, в отличие от, к примеру, английского или китайского.
FG_PARAFRASE_CONSERVATIVE - консервативные (не меняющие семантику) преобразования, к примеру перестройка причастных и деепричастных оборотов.
FG_TRANSFORM - различные
неконсервативные преобразования, в некоторых случаях они могут изменить
смысл
текста. Обычно этот сценарий меняет фрагменты
FG_RANDOMIZE - рандомизация, подстановка случайных слов с сохранением грамматической формы.
Вместе с флагом FG_RANDOMIZE употребляются следующие флаги для включения замены определенных частей речи:
FG_RND_NOUN - заменять существительные
FG_RND_ADJ - заменять прилагательные и причастия
FG_RND_VERB - заменять глаголы, инфинитивы и деепричастия
FG_RND_ADVERB - заменять наречия
SyntaxAnalysisFlags - управление морфологическим и синтаксическим анализатором:
FG_SIMPLE_ANALYSIS - упрощенный анализ, быстрый, но не дающий возможность отработать сценариям FG_PARAFRASE_REORDER, FG_PARAFRASE_CONSERVATIVE и ограничивающий результативность синонимизатора.
FG_PEDANTIC_ANALYSIS - особо тщательный, но медленный анализ.
NGramFlag - флаг учета N-грамм при синонимизации:
FG_NO_NGRAMS - не использовать N-граммы
FG_SYNONYMIZER_USES_NGRAMS - проверять возможность синонимизации по таблице N-грамм
FG_PEDANTIC_NGRAMS - тщательный и трудоемкий отсев вариантов
FG_OMIT_FREQ1 - игнорировать N-граммы с частотой 1
FG_2GRAMS - фильтровать по 2граммам
FG_23GRAMS - фильтровать по 2граммам, 3граммы для сортировки частоты
FG_3GRAMS - фильтровать по 2 и 3граммам
FG_4GRAMS - фильтровать по 2, 3 и 4граммам
FG_5GRAMS - фильтровать по 2, 3, 4 и 5граммам
FG_2345GRAMS - фильтровать по 2граммам, 3, 4 и 5 граммы для сортировки частоты
ThesaurusFlags - управление тезаурусом (зарезервированный флаг).
DebugFlags - отладка:
FG_DEBUG - печатать отладочные пометки в результирующий текст.
FG_DEBUG_HTML - печатать отладочные пометки в формате HTML в результирующий текст.
ResultsFormat - управление форматом результатов, выдаваемых в буфер NewPhrase:
FG_YIELD_PLAIN_TEXT - результаты выдаются без форматирования, как plain text
FG_YIELD_XML - результаты работы синонимизатора выдаются в формате XML
FG_YIELD_ALL_SYNS - в XML результатах будут выводится все найденные для каждого исходного слова синонимы
OrgPhrase - исходное (единственное) предложение.
NewPhrase - буфер для записи модифицированного предложения.
maxlen - максимальная вместимость NewPhrase.
max_elapsed_msec
-
максимальное отведенное для работы время в миллисекундах.
Перефразирование и синонимизация utf-8 текста
int sol_Paraphrase( HGREN_PHRASOMAT hBuilder, int ScenarioType,
int SyntaxAnalysisFlags,
int NGramFlags,
int ThesaurusFlags, int DebugFlags,
int ResultsFormat,int MaxSubst, const char* OrgPhrase, char* NewPhrase, int maxlen, int
max_elapsed_msec )
Отличается от sol_Paraphrase только тем, что
принимает в OrgPhrase и возвращает в NewPhrase текст в кодировке utf-8.
Эта функция введене специально для удобной работы под Linux.
Примеры на C++ и C# входят в состав SDK синонимизатора - см. описание консольной
утилиты
Rewriter.
Также в состав SDK входит простой пример синонимизатора на Delphi.
Генератор случайного текста и имитатор текста
© Mental Computing 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 08-Aug-10 | ||||||||||||||||||||||||||||||||||||||