morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 

Склонение фамилий в SQL Server

SqlMorpher.dll позволяет склонять фамилии, должности, названия городов и другие реквизиты в SQL Server и SQL Azure. Вы можете создавать вычисляемые колонки со значением нужного падежа, автоматически вставлять в поля падежные формы или просто вызывать функции склонения со стороны клиента базы данных.

Совместимость

SqlMorpher.dll работает на следующих платформах:

  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2008 R2
  • SQL Server 2012
  • SQL Server 2014
  • SQL Azure v12

Функция Падеж

CREATE FUNCTION dbo.Падеж (
    @s nvarchar (max), 
    @падеж nvarchar (6), 
    @признаки nvarchar (7)) 
RETURNS nvarchar (max)

@s – строка для склонения,

@падеж – требуемая падежная форма:

  • 'И' – именительный (без изменения)
  • 'Р' – родительный (кого? чего?)
  • 'Д' – дательный (кому? чему?)
  • 'В' – винительный (кого? что?)
  • 'Т' – творительный (кем? чем?)
  • 'П' – предложный (о ком? о чем?) без предлога
  • 'По' – предложный (о ком? о чем?) с предлогом О/ОБ/ОБО
  • 'Где' – предложный с предлогом В/НА – отвечает на вопрос где?
  • 'Куда' – винительный с предлогом В/НА – отвечает на вопрос куда?
  • 'Откуда' – с родительный предлогом ИЗ/С – отвечает на вопрос откуда?

Рекомендации по выбору варианта предложного падежа

@признаки – набор признаков, разделенных пробелом или запятой:

  • 'ФИО' – фамилия, имя или отчество
  • 'Гео' – географическое название
  • 'Нар' – нарицательное
  • 'Муж' – мужской род
  • 'Жен' – женский род

@признаки нужны, когда в словосочетании (@s) недостаточно информации для однозначного склонения, например:

select dbo.Падеж ('Любовь', 'Д', 'ФИО') -- Любови
select dbo.Падеж ('Любовь', 'Д', 'нар') -- Любви
 
select dbo.Падеж ('Полищук', 'Д', 'муж') -- Полищуку
select dbo.Падеж ('Полищук', 'Д', 'жен') -- Полищук

В остальных случаях признаки указывать необязательно:

select dbo.Падеж ('Любовь Полищук', 'Д', null) -- Любови Полищук
select dbo.Падеж ('Дмитрий Полищук', 'Д', null) -- Дмитрию Полищуку

Функция ПолучитьФамилиюПротивоположногоПола

CREATE FUNCTION dbo.ПолучитьФамилиюПротивоположногоПола (
    @фамилия nvarchar (max)) 
RETURNS nvarchar (max)

Данная функция строит фамилию женского рода для данной фамилии мужского рода и наоборот. Например:

select dbo.ПолучитьФамилиюПротивоположногоПола ('Пушкин') -- Пушкина
select dbo.ПолучитьФамилиюПротивоположногоПола ('Толстой') -- Толстая
select dbo.ПолучитьФамилиюПротивоположногоПола ('Лермонтов') -- Лермонтова

Для фамилий, не изменяющихся по родам, фамилия остается без изменений:

select dbo.ПолучитьФамилиюПротивоположногоПола ('Лещенко') -- Лещенко
select dbo.ПолучитьФамилиюПротивоположногоПола ('Заворотнюк') -- Заворотнюк
select dbo.ПолучитьФамилиюПротивоположногоПола ('Перельман') -- Перельман

Функция определения рода

SELECT dbo.ОпределитьРод ('Евгений') -- Мужской
SELECT dbo.ОпределитьРод ('Евгения') -- Женский
SELECT dbo.ОпределитьРод ('окно') -- Средний
SELECT dbo.ОпределитьРод ('часы') -- Множественное число
SELECT dbo.ОпределитьРод ('Petrov') -- Ошибка

Функция Пропись: формирование суммы прописью

CREATE FUNCTION dbo.Пропись (@число int, @единицаИзмерения nvarchar (max))
RETURNS TABLE (ПрописьЧисла nvarchar (max), ЕдиницаИзмеренияВНужномПадеже nvarchar (max))

Инструкция по установке

Модуль склонения интегрируется в SQL Server при помощи технологии под названием CLR Integration, появившейся в SQL Server начиная с версии 2005.

Комплект поставки:

  • Install.sql — скрипт установки библиотеки, включающий в себя двоичный код библиотеки;
  • Uninstall.sql — скрипт удаления библиотеки, рекомендуется запускать перед переходом на новую версию;
  • СуммаПрописью.sql — пример вывода суммы прописью с помощью функции Morpher.dll Пропись;
  • Install-Azure.sql — скрипт установки модуля в SQL Azure.

Для установки выполните следующие шаги:

  • Распакуйте поставочный архив во временную папку, доступную службе SQL Server.
  • Запустите среду управления SQL Server, например, бесплатную среду Microsoft SQL Server 2008 Management Studio Express (2005).
  • Откройте файл Install.sql в редакторе и укажите в нем путь к SqlMorpher.dll:
    CREATE ASSEMBLY Morpher
    FROM 'путь\SqlMorpher.dll'
    WITH PERMISSION_SET = SAFE;
    go
  • Выполните Install.sql.
    • Если при этом выдается сообщение об ошибке:
      Неправильный синтаксис около "EXTERNAL". Возможно, следует установить более высокий уровень совместимости для текущей базы данных, чтобы включить эту функцию. См. справку по параметру SET COMPATIBILITY_LEVEL инструкции ALTER DATABASE.
      То выполните команду:
      sp_dbcmptlevel 'название_БД', 90
      И запустите Install.sql еще раз.
    • Если вы получили сообщение Configuration option 'clr enabled' changed from 0 to 1. Run the RECONFIGURE statement to install, то перезапустите службу SQL Server и выполните Install.sql заново.
  • Ваш SQL Server к склонению готов! Проверяем:
    select dbo.Падеж ('Петров Пётр','Р')
  • Временную папку можно удалить.

Установка в SQL Azure

Просто выполните файл Install-Azure.sql, входящий в комплект поставки. В остальном работа с "Морфером" в SQL Azure ничем не отличается от работы в SQL Server.

Получение и установка обновлений

Чтобы получить новую версию библиотеки, напишите нам с электронного адреса, на который зарегистрирована лицензия, либо укажите номер договора, название юрлица или контактного лица.

Процедура установки обновления:

  • Выполните файл Uninstall.sql из старого дистрибутива.
  • Следуйте инструкции по установке выше.

История изменений

Дата Версия  
  2.0.2 Исправлен баг с Полищук (жен).
  2.1.0 Добавлена функция ПолучитьФамилиюПротивоположногоПола.
  2.2.0 Добавлена функция Пропись.
30.09.2012 2.2.1 Учет аббревиатуры "и.о." (исполняющий обязанности), небольшое пополнение словаря.
  2.2.2 Исправлена ошибка 'CREATE ASSEMBLY failed because method is storing to a static field.'
25.07.2013 2.2.3 Учтены последние изменения в Morpher.dll для .NET
22.08.2013 2.2.4 Добавлена функция ОпределитьРод.
23.09.2013 2.2.5 Исправлена ошибка в прописи числа 0,2 в винительном падеже. Эта ошибка касалась только чисел 0,2, 0,002, 0,000002 и т.д. и проявлялась только в винительном падеже ("двух десятых" вместо "две десятых").
18.02.2014 2.3.0 Улучшено распознавание ФИО для составных имен. Теперь входное словосочетание признается ФИО, если хотя бы один из разделенных дефисом компонентов известен как имя. В результате стали правильно склоняться такие имена как ГЕЙ-ЛЮССАК Жозеф-Луи, Кени Шарль-Андре, Гильермо Гомес-Пенья и другие.
07.05.2014 2.3.1 Пополнение словаря.
12.07.2014 2.4.0 Добавлена поддержка SQL Server 2005. Ранее поддерживались только SQL Server 2008 и выше. Сборка теперь использует .NET 2.0 (раньше был .NET 3.5).
17.07.2014 2.4.1 Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005 (CREATE ASSEMBLY failed because method 'Проанализировать' on type 'Slepov.Russian.Morpher.СклонятельНарицательных' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies.). Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу СклонятельНарицательных. В SQL Server 2008 сборка предыдущей версии работала нормально.
21.07.2014 2.5.0 Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005 (CREATE ASSEMBLY failed because type 'Slepov.Russian.Morpher.Склонятель' in safe assembly 'SqlMorpher' has a static field 'CS$<>9__CachedAnonymousMethodDelegate12'. Attributes of static fields in safe assemblies must be marked readonly in Visual C#, ReadOnly in Visual Basic, or initonly in Visual C++ and intermediate language.). Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу Склонятель. В SQL Server 2008 сборка предыдущей версии работала нормально. Работоспособность сборки проверена в SQL Server 2005 SP4 и SQL Server 2008 R2.
17.08.2014 2.6.0 Исправлена ошибка в прописи чисел вида ... x1y abc, где x=1..9, y=1..4, abc - любые 3 цифры, а ... - любая последовательность цифр, в т.ч. нулевой длины. Пример числа: 311 000. Ошибка проявлялась только в родительном падеже (трёхсот одиннадцати ТЫСЯЧИ вместо трёхсот одиннадцати ТЫСЯЧ).
1.10.2014 2.6.1
  • Существенное пополнение словаря (более 7000 новых слов).
  • Сокращения зам. и зав. теперь не склоняются.
  • Функции теперь возвращают NULL, а не ошибку, если любой из обязательных параметров равен NULL.
15.03.2015 2.6.2 Исправлено склонение сокращения "И.о." (исполняющий обязанности), когда первая буква заглавная, например "И.о. директора".
15.04.2015 2.6.3 Пополнение словаря.
22.04.2015 2.6.4 Исправлена ошибка, возникавшая в MSSQL 2005 при регистрации сборки ( CREATE ASSEMBLY failed because method 'get_DecoratedLemma' on type 'Slepov.Russian.Morpher.MultiPartDecoratedWord' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies. ). В MSSQL 2008 ошибка не возникала.

Комментарии

Добавить комментарий
Роман 15.07.2011 11:37 UTC

Можно модуль использовать для полнотекстового поиска?



Сергей Слепов 01.03.2012 22:12 UTC

В SQL Server 2008 есть полнотекстовый поиск со стеммингом. Но просклонять словосочетание он не сможет, это две разные задачи.



Андрей 30.03.2012 06:42 UTC

будет ли работать данная библиотека в 64-разрядных версиях SQL Server? Это будут разные версии библиотеки или можно обойтись одной?



Сергей Слепов 30.03.2012 07:29 UTC

Да, будет, так как библиотека собрана для платформы MSIL / AnyCPU.



Андрей 30.03.2012 09:29 UTC

Какая лицензионная политика на библиотеку? Она будет работать на всех sql-серверах нашей компании или для каждого сервера нужно её покупать отдельно?
Где можно увидеть цены на библиотеку?



Сергей Слепов 31.03.2012 17:20 UTC

Да, будет работать на всех серверах. Цена договорная - заполните, пожалуйста, форму на странице Купить.



Анатолий, freelancer 17.02.2014 09:57 UTC

Использую Morpher с июля 2012 года. Хочу поделиться впечатлениями.

Применяю библиотеку для трансляции шаблонов печатных форм на основе базы клиентов, когда требуется поставить в печатной форме ФИО и должность клиента в нужный падеж, а также получить цифры прописью. Шаблон печатной формы получает на вход результат выборки, уже содержащий все фамилии и должности в нужных падежных формах. CLR-сборка успешно применялась на MSSQL2005 запущенном под Windows Server 2003, сейчас так же успешно использую под MSSQL2008R2, Windows Server 2012 64x. Библиотека отлично справляется с поставленными задачами, ни разу не пожалел о покупке. Это напоминает какое-то волшебство: даже самую запутанную фамилию умеет просклонять безошибочно.

До покупки Morpher испробовал три варианта. Начал с самого надёжного и «дубового» - хранил в таблице клиентов не только поля с ФИО, но и поля в дательном падеже. Пока число клиентов было невелико – этот подход себя оправдывал. Но когда добавилось ещё несколько баз – ввести все падежи вручную стало нереально. К тому же, усложнились сами печатные формы, потребовались числа прописью.

Пробовал применить библиотеку padeg.dll (1.0.5.2). По ощущениям – хорошо склоняет понятные имена и фамилии, но полученный текст обязательно надо вычитывать: библиотека может неожиданно такое завернуть, что не дай бог клиент увидит. А вычитывать всё – немногим лучше правки руками. К тому же, не было CLR-версии, требовался постпроцессинг выборки уже на клиенте, перед трансляцией печатной формы. Да и всегда надо таскать с собой dll вместе с клиентским приложением.

Гораздо больше, чем padeg.dll, понравилось использовать JScript-овое решение от Johnny Woo (0.1.4) agalkin@agalkin.ru. Удобно работать с открытым кодом, куда можно легко внести свои исключения, чтобы склонять самые заковыристые фамилии. К тому же, не требует регистрации библиотеки в системе, по сути, мультиплатформенное решение. Ошибки очень редки, а фамилии, где ошибся padeg, отлично просклонял. Но не умеет формировать числа прописью, и тоже требует постпроцессинга на клиенте.

По сравнению с перечисленными решениями SqlMorpher – настоящий грамматический комбайн. Благодаря расположению на сервере позволяет получать уже готовые выборки в нужных падежах, отпала необходимость в клиентском постпроцессинге. Можно вызывать функции комплексно, например, передать одной функции результат выполнения другой, и поместить в выборку уже готовый результат. Словом, именно то, что требовалось. К тому же, умеет склонять должности. Другими средствами легко склонить в дательный падеж «Генеральный директор», эту должность можно рассматривать как имя и отчество в мужском роде. Но сделать тоже самое с должностью «Главный заведующий отделом народного просвещения» может только Morpher!

Безусловно, Morpher стоит своих денег!



Добавить комментарий


 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2017. Перепечатка материалов сайта только с разрешения автора.