| | | | |
Склонение фамилий, имен и отчеств по падежам Библиотека функций. | Полный текст материала
Другие публикации автора: Сергей Плахов Другие публикации автора: Геннадий Покаташкин
Цитата или краткий комментарий: «... Программный продукт предназначен для преобразования фамилии, имени, отчества (ФИО), заданных в именительном падеже, в форму любого падежа. При этом, ФИО может быть задано как одной строкой, так и тремя.
...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
[Обработка текста]
Отслеживать это обсуждение
Всего сообщений: 33504-05-2022 11:06Добрый день!
При попытке в CMD выполнить пункт 4 установки, выдает ошибку, что модуль не найден.
Еще не понятно, как это все в excel должно заработать. Толком инструкции не нашел. |
|
15-01-2021 08:18
30-12-2020 14:13
30-12-2020 14:10
10-10-2019 06:40
12-03-2018 11:55
01-01-2018 00:20Почему размер PadegUC.dll 32 битной версии библиотеки 4,7Мб, а 64 битной 2,4мб? А размер Padeg.dll версии 3.3 120Кб. Неужели поддержка unicode увеличивает настолько размер библиотеки? |
|
26-10-2017 06:07Здравствуйте! Вопрос касается Ecxel. Благодаря примеру самостоятельно удалось получить только ФИО.
Для этого нужно добавить в проект модуль с примером, а затем в самом Ексел написать =MakePadeg(A2;2)
Что писать в модуле, а затем в ячейки для склонения должностей? |
|
10-09-2017 14:44Скажите, пожалуйста, возможно ли использовать эту библиотеку на c#?>>> Сообщение не подписано |
|
11-06-2017 23:55Скачала последнюю версию библиотеки. Попробовала использовать функцию DeclCurrency для формирования суммы прописью для 2 разных валют, но наткнулась на такую проблему: сумма прописью выдается всегда в первой указанной валюте, а код второй валюты как бы не видит, хотя он явно задан. Вот и получается, что если мне надо сформировать пропись для рублей и, скажем, долларов, то в прописи всегда будут рубли. Если первые будут доллары, то обе суммы будут в долларах... Может кто-нибудь сталкивался с такой проблемой?
|
|
30-05-2017 00:57Это сообщение к сообщению от 11-02-2017 03:17
После долгих мытарств нашел где грабли мои были. ))) Может кому еще пригодиться.
1. Чисто случайно увидел на google-диске, что PadegUC.dll изменен 31.12.2016 г., перезакачал, т.к. у меня была старее версия.
Начало "работать", но как раз уже с ошибками о которых писал уважаемый seer_true, т.е. "Без преобразования в/из юникод(а) на выходе получал урезанную строку ФИО в именительном падеже, что вполне объяснимо (библиотека возвращала не корректное значение nLen)." Хоть немного, но это был уже прогресс.
2. После этого долго бился над всевозможными изменениями кодировок, чего только не перепробовал, и так, и сяк, и на перекосяк... Нихт арбайтен и все тут.
Как итог - ларчик просто открывался:
При объявлении надо обязательно указать атрибут Unicode и все заработает как надо, т.к. по умолчанию преобразует все строки в значения ANSI, т.е. надо так и все заработает:
Private Declare Unicode Function GetPadeg Lib "PadegUC.dll" Alias "GetFIOPadegFSAS" (ByVal pFIO As String, ByVal nPadeg As Integer, ByVal pResult As String, ByRef nLen As Integer) As Integer
|
|
07-04-2017 09:43
07-04-2017 05:292YAV
Как можно исправить ситуацию, во многих местах используется именно GetFIOPadegFS, и не факт что только для такой ФАМИЛИИ теряется ОТЧЕСТВО.
Здесь дело не в фамилии, как таковой, а в том, что она составная и записана не через дефис. Попробуйте заменить пробел в фамилии на дефис. Если это критично в результате, то придется выполнить обратное преобразование после склонения.
Может как то использовать словарь исключений, только я не понял в какую секцию тогда вписать исключение.
Не думаю, что словарь как-то поможет в такой ситуации. |
|
07-04-2017 01:29Подскажите пожалуйста
Есть человек с Фам = АБУ ХАЗИМ, Им = МАРИАННА, От = СЕРГЕЕВНА
Если использовать GetFIOPadegFS, то теряется ОТЧЕСТВО
Если использовать GetFIOPadeg, то ОТЧЕСТВО остается
Как можно исправить ситуацию, во многих местах используется именно GetFIOPadegFS, и не факт что только для такой ФАМИЛИИ теряется ОТЧЕСТВО.
Может как то использовать словарь исключений, только я не понял в какую секцию тогда вписать исключение. |
|
12-03-2017 14:38а в MS Office 2007/2010 эта библиотека работает? |
|
11-02-2017 03:17День добрый.
Используя в VB (Visaul Studio 2015, целевая платформа .NET Framework 4) старую версию библиотеки Padeg.dll с ниже приведенным кодом все работает нормально, склонение идет, никаких ошибок.
[Code=Библиотека Padeg.dll]
Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" (ByVal pFIO As String, ByVal nPadeg As Integer, ByVal pResult As String, ByRef nLen As Integer) As Integer
Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String
Dim nLen As Long = 255
Dim tmpS As String = StrDup(255, Chr(0))
Dim RetVal As Integer
If Len(cFIO) = 1 Then
MakePadeg = -2
Exit Function
End If
RetVal = GetPadeg(cFIO, nPadeg, tmpS, nLen)
' MsgBox(tmpS)
If RetVal = -1 Then MsgBox("Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО")
MakePadeg = Mid(tmpS, 1, nLen)
End Function
Попытался использовать новую версию библиотеки PadegUC.dll с ниже приведенным кодом получаю "ошибку", склонение не происходит, программа просто завершает работу.
Также пробовал по аналогии с примером приведенным в Readme переводить в Unicode и обратно, результат тот же. (Но, имхо, если я правильно понимаю, переводить в Unicode в принципе не надо, т.к. данные для склонения берутся из TextBox, а текст TextBox'a в VS 2015 итак хранится в Unicode).
[Code=Библиотека PadegUC.dll]
Private Declare Function GetPadeg Lib "PadegUC.dll" Alias "GetFIOPadegFSAS" (ByVal pFIO As String, ByVal nPadeg As Integer, ByVal pResult As String, ByRef nLen As Integer) As Integer
Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String
Dim nLen As Long = 255
Dim tmpS As String = StrDup(255, Chr(0))
Dim RetVal As Integer
If Len(cFIO) = 1 Then
MakePadeg = -2
Exit Function
End If
RetVal = GetPadeg(cFIO, nPadeg, tmpS, nLen)
' MsgBox(tmpS)
If RetVal = -1 Then MsgBox("Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО")
MakePadeg = Mid(tmpS, 1, nLen)
End Function
Подскажите, пожалуйста, где и в чем ошибка, сам понять не могу. Заранее спасибо. |
|
18-10-2016 14:52сообщение от автора материала Федорив Александр Сергеевич
Родительный (кого/чего нет): Федорива Александра Сергеевича
Дательный (кому/чему дать): Федориву Александру Сергеевичу
Винительный (кого/что вижу): Федорива Александра Сергеевича
Творительный (кем/чем горжусь): Федоривым Александром Сергеевичем
Предложный (о ком/о чем мечтаю): Федориве Александре Сергеевиче
Это верный результат? |
|
28-07-2016 22:04Нашлась ещё одна неправильно склоняемая фамилия: Федорива
Она должна склоняться по аналогии с фамилией Федорова. |
|
30-05-2016 22:05А под linux портировали уже? В обсуждении пару раз проскакивали вопросы и ответы в духе "что хотим, но попозже". |
|
01-03-2016 00:10В принципе, я уже разобралась с вызовом из C#...
Есть маленькое предложение по программе - так как со справочником валют можно склонять любые единицы измерения, возможно ли сделать ещё одно отображение без расшифровки числительного типа: 11 попугаев. |
|
29-02-2016 06:28Здравствуйте!
Скажите, пожалуйста, может быть кто-нибудь знает как правильно вызывать из C# функцию DeclCurrency (так как в нем отсутствует тип Currency)?
|
|
04-12-2015 03:39to Seer
Конечно, библиотека оказалась не причем, как и моя программка.
При запуске программа регистрируется в базе данных, проверяет допуски и т.д. Регистратор в терминальном режиме неправильно кодирует пользовательский пароль, выдавая в нем в некоторых случаях недопустимый (в контексте декодирования) символ. Как оказалось, и раньше люди сталкивались с траблом (юниту порядка десяти лет), который обычно решали заменой пароля :)
Сорри за офтоп. |
|
10-11-2015 03:44сообщение от автора материала > Формально правильно, но противоречит моему жизненному опыту
Я рад, что все таки правильно, хоть и формально.
Мой жизненный опыт говорит мне что солнце вокруг, а не земля, но учебники утверждают обратно.
Все таки согласитесь, что реализация неких алгоритмов основывается на некоторых формах (правилах), а уж никак не на "жизненных опытах", тем более что все они у всех неоднозначные. |
|
19-10-2015 17:43>О! Помнится здесь эта тема уже возникала. Но не все так однозначно. Мы следовали вот такому подходу.
Спасибо за развёрнутый ответ. Формально правильно, но противоречит моему жизненному опыту :) |
|
18-10-2015 22:16сообщение от автора материала 2Олесь: О! Помнится здесь эта тема уже возникала. Но не все так однозначно. Мы следовали вот такому подходу.
Мужские фамилии восточнославянского происхождения, имеющие беглую гласную при склонении, могут склоняться двояким образом - с потерей и без потери гласной при склонении: Заяц - Заяца - Заяцем и Зайца - Зайцем.
Учитывая юридическую функцию, выполняемую фамилиями, предпочтение следует отдавать склонению без выпадения гласного.
http://www.bgunb.ru/bgunb/professional/bgb/2002/3/article8.html Основы делового общения
————-
По правилам мужские фамилии восточнославянского происхождения, имеющие беглую гласную при склонении, могут склоняться двояким образом - с потерей и без потери гласной при склонении: Заяц - Заяца - Заяцем и Зайца - Зайцем. По мнению специалистов языковедов, предпочтение следует отдавать склонению без выпадения гласного (т.е. Кравец - Кравеца).
http://uloblsud.ru/index.php?option=com_content&task=view&id=332 Поговорим о фамилиях
————-
При склонении мужских фамилий с беглой гласной принято оставлять беглую гласную (Иван Заяц - с Иваном Заяцем, об Иване Заяце).
http://www.hacklife.ru/?q=node/372 Как склонять фамилии?
|
|
18-10-2015 14:43Тестовые данные
Заяц Валерий Петрович
Не выпадает гласная
Р: Заяца Валерия Петровича
Д: Заяцу Валерию Петровичу
В: Заяца Валерия Петровича
Т: Заяцем Валерием Петровичем
П: Заяце Валерии Петровиче
На всех версиях. На днях поймал :) |
|
08-10-2015 01:06
Что за ошибка-то?
Может стоит подключить коллективный разум?
Да кто же его знает-то...
Она происходит между инициализацией приложения и входом в DataModuleCreate, которая у меня создается первой.
Коллективный разум интернета ничего не дает, только то, что exception генерится дельфийской библиотекой, для обсуждения в КД пока мало данных. Коллективный разум предприятия высказался за создание стенда. Создаем.
Вопрос этот обрисовался только из-за гипотетической несовместимости вашей библиотеки 3.3 с 64-битной системой, но когда выяснилось, что этим страдает и 32-битная семерка, причем в терминальном режиме, что же ее обсуждать в этой теме? Будет больше пищи, будет другая тема. КС большой.
Спасибо. |
|
05-10-2015 04:33сообщение от автора материала Что за ошибка-то?
Может стоит подключить коллективный разум?
По вконтакте, как говорится "на вкус и цвет все фломастеры разные". Я вот не дух не переношу яндекс с его жуткоммерческой рожей, что не мешает пользоваться его услугами.
К сожалению Королевство слишком заточен на Delphi, а потенциальное к-во пользователей б-ки все таки не только дельфисты.
Потому и хочется расширить зону.
|
|
05-10-2015 01:45Мой вопрос снят. Ошибка возникает на Windows 7 вне зависимости от рязрядности, один случай на 32-битной, второй на 64-битной, но оба раза на семерке. ("И всегда только двое их"). Что самое противное, ошибка вылезает на экран до того, как я успеваю подключить лог. |
|
05-10-2015 00:32Сергей
Если бы мне только не нравилась идеология этого прямо скажем дурного сайта, я бы свое имхо не озвучивал. Дело в том, что большое количество предприятий ограничивает доступ к социальным сетям, а к вконтакте и ютубу в первую очередь.
Я все-таки не увидел прямого ответа: совместима ли 3.3 с 64-битной версией так, что может вызвать ошибку не при обращении к ее функции, а при запуске приложения? |
|
04-10-2015 11:24сообщение от автора материала 64 бита есть толко в 4 версии.
Чем плох вконтаке?
С Королевства все равно не уйдем. |
|
02-10-2015 03:30Выражаю благодарность Сергею, Геннадию и другим активным участникам обсуждения. Проект продолжает развиваться. 15-летний юбилей не за горами :) Одна просьба - не уходите вконтакт.
Скачал библиотеку в дремучем 2007 году (версия 3.3 от 01.11.2007) чисто для ознакомления. И вот только в этом году с новыми инициативами (пилотными проектами) ФСС потребовалось прикрутить на предприятии определение родительного падежа. Можно я пока останусь в рамках физлица? :) Во всяком случае пока не потребуется склонение должностей, подразделений, или не случится массовая миграция на x64 (тогда уж через кассу).
Кстати, вопрос есть: версия 3.3 на 64-битной винде работает? Не могу пока определить источник 0x0eefade на этой ОС. |
|
08-06-2015 17:25Спасибо большое за ответ! |
|
03-06-2015 00:03
03-06-2015 00:01
02-06-2015 13:34сообщение от автора материала А это в PadegFIO.pas функция определения рода
Заметьте, параметром в эту функцию передается pMiddleName, т.е. отчество. Расшифруйте, что такое А. из Воробьева В.А. (Александровна, Андреевна и т.д.) и тогда функция вернет верное значение рода.
Я вот и спрашиваю, можно ли как-то иным образом указать род.
Боюсь, средствами библиотеки, нет. Только получить из других источников. |
|
02-06-2015 13:15А это в PadegFIO.pas функция определения рода
function GetSex(pMiddleName: String): Integer; stdcall;
var pGetSex: TGetSex;
begin
LoadPadeg;
Result:=1;
pGetSex:=GetProcAddress(LibPadeg, 'GetSex');
if not Assigned(pGetSex) then
raise Exception.Create('Функция ''GetSex'' в библиотеке PADEG.DLL не найдена');
Result:=pGetSex(PChar(pMiddleName));
end; |
|
02-06-2015 13:14Я вот и спрашиваю, можно ли как-то иным образом указать род.
function GetFIOPadegFS(pFIO: PChar; bSex: Boolean; nPadeg: LongInt; pResult: PChar; var
nLen: LongInt):Integer; stdcall; external
'C:\Users\Администратор\Desktop\Склонение\padeg.dll' Name 'GetFIOPadegFS';
function GetFIOPadegFSAS(pFIO: PChar; nPadeg: LongInt; pResult: PChar; var
nLen: LongInt):Integer; stdcall; external
'C:\Users\Администратор\Desktop\Склонение\padeg.dll' Name 'GetFIOPadegFSAS';
function GetFIOPadegAS(pLastName, pFirstName, pMiddleName: PChar; nPadeg: LongInt; pResult: PChar; var
nLen: LongInt):Integer; stdcall; external
'C:\Users\Администратор\Desktop\Склонение\padeg.dll' Name 'GetFIOPadegAS';
function GetIFPadeg(pFirstName, pLastName: PChar;
nPadeg: LongInt; pResult: PChar;
var nLen: LongInt): Integer; stdcall; external
'C:\Users\Администратор\Desktop\Склонение\padeg.dll' Name 'GetIFPadeg';
procedure TForm1.btDoClick(Sender: TObject);
var
bSex: Boolean;
nPadeg: Integer;
PartsFIO: TFIOParts;
s: String;
FTrue, Ffalse, Template, NewTemplate, ItemIndex, T, D, DD, Replese_T, Find_T: OleVariant;
Tbl, L, col, Tablwdline, con: OleVariant;
i, ii, j: integer;
TExtend: OleVariant;
begin
bSex := Boolean(PadegFIO.GetSex(edMiddle.Text));
nPadeg := cbPadeg.ItemIndex + 1; |
|
02-06-2015 05:20Наталья, возможно, я влезу не в свою епархию, но...
Пусть у нас есть запись Дубина В.А. Скажите мне, какой это род?
Это с равным успехом может быть как Дубина Валентина Александровна, так и Дубина Виктор Андреевич. Не существует формального правила, позволяющего здесь по фамилии и инициалам определить род. |
|
01-06-2015 14:16сообщение от автора материала Вы указали фамилию с инициалами, т.к. окончания отчества мы не знаем, в этом случае должны явно указать род.
Какую функцию используете, как ее вызываете?
Вообще, желательно привести пример кода или файлик MS Office, если склоняете там. |
|
01-06-2015 14:03Здравствуйте! Столкнулась с проблемой склонения женских фамилий с
инициалами с помощью библиотеки Padeg.dll. С мужскими фамилиями все
замечательно, но вот если ввожу,например, Воробьева В.А. выводит ерунду.
Написано, что определение падежа происходит по окончанию отчества. Как
этого избежать? Ведь с мужскими фамилиями работает все.. Спасибо! |
|
22-05-2015 01:13Благодарю за понимание )))
трехсотая попытка была успешна.
' Функция получения рода (пола) по отчетву
' Параметры: pMiddleName - отчество
' Значение: 1 - мужской
' 0 - женский
' -1 - невозможно определить
Private Declare Function GetSex Lib "PadegUC.dll" _
(ByVal pMiddleName As String) As Integer
Public Function MakeSex(ByVal cMiddleName As String) As String
Dim tmpS As String
MakeSex = GetSex(StrConv(cMiddleName, vbUnicode)) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
End Function |
|
22-05-2015 01:04Здравствуйте, Сергей!
Понимаю что задал вопрос не совсем по адресу, т.к. он относится не к библиотеке как таковой а к VBA.
Если по аналогии изменить функцию по склонению должностей у меня получилось, то для получения значения пола у меня знаний не хватает - уже три дня читаю, но без результата. |
|
21-05-2015 11:49сообщение от автора материала И читайте докумнтацию https://drive.google.com/open?id=0ByCjt0r9Y_FcY0h2b0o0eGtwRzg&authuser=0:
Так как версия 4 полностью поддерживает строки Unicode, то при передаче и воз-врате значений функций Библиотеки следует перед обращением преобразовать строки VBA в Unicode, что и показано в приведенном примере (функция StrConv()):
RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с пере-водом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
|
|
21-05-2015 11:47сообщение от автора материала > Помогите пожалуйста.
> Всегда использовал следующий код...
Коллеги, смотрите мое сообщениеЖ о работе с 4-кой
03-01-2015 05:10
Разбирался с примерами VBA, как оказалось М$ опять впереди планеты всей.
Jпять Unicode.
После объявления Dim tmpS As String мы получим ASC строку.
Для того чтоб она стала UТF, необходимо явное преобразование, см. StrConv()
RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
Вот так вот. При использовании 4-ки в VBA прошу помнить об этом.
|
|
21-05-2015 10:01Помогите пожалуйста.
Всегда использовал следующий код
Private Declare Function GetSex Lib "PadegUC.dll" _
(ByVal pMiddleName As String) As Integer
Public Function MakeSex(ByVal pMiddleName As String) As String
MakeSex = GetSex(pMiddleName)
End Function
Сейчас функция при любом исходном тексте выдает значение -1
Что сделать ума не приложу.
|
|
14-04-2015 14:32сообщение от автора материала Реализовано преобразование чисел в строку (сумма прописью) и склонение числительных и валют.
Есть желающие потестировать? |
|
05-03-2015 12:41
04-03-2015 11:29сообщение от автора материала Интересное кино. Ошибка во всех версиях.
В любом случае исправил в 4-ке. Чуть позже выложу на Google Диск.
А позвольте полюбопытствовать, Ударение где? "Ярец или Яр"ец?
|
|
04-03-2015 05:18Здравствуйте!
неправильно склоняется фамилия Ярец в мужском роде: не выпадает гдасная -е, т.е. надо чтобы в родительном падеже было Ярца, а программа склоняет как Яреца.
Причем другие похожии фамилии склоняет вроде как правильно... |
|
27-02-2015 07:09Для тех, у кого возникают проблемы при использовании библиотеки с Qt. Переработанный код примера работает в Qt 4.8.6, по идее в 5+ тоже должен работать.
#include <QLibrary>
#include <QDebug>
typedef int (__stdcall *LPFNGetFIOPadegAS)(wchar_t *, wchar_t *, wchar_t *, int, wchar_t *, int &);
typedef int (__stdcall *LPFNGetAppointmentPadeg)(wchar_t *, int, wchar_t *, int &);
LPFNGetFIOPadegAS GetFIOPadegAS = 0;
LPFNGetAppointmentPadeg GetAppointmentPadeg = 0;
void loadLib()
}
QString getFIOPadeg(QString lastName, QString firstName, QString middleName, int padeg)
int main(int, char**)
|
|
30-01-2015 14:40
26-01-2015 03:40PGL, спасибо за код и объяснение! |
|
26-01-2015 01:522 Alesandr Nicalace
Попробуйте так
Type TMyPartsFIO
pLastName As String
pFirstName As String
pMiddleName As String
nLastName As Long
nFirstName As Long
nMiddleName As Long
End Type
Public Sub MakeGetFIOParts(ByVal cFIO As String, ByRef cLastName As String, ByRef cFirstName As String, ByRef cMiddleName As String)
Dim RetVal As Integer
Dim PartsFIO As TMyPartsFIO
With PartsFIO
' устанавливаем размеры буферов (можно и другие значения
' главное, чтобы они были достаточными для результатов
.nLastName = 50
.nFirstName = 50
.nMiddleName = 50
' выделяем память под строки
.pLastName = String(.nLastName, 0)
.pFirstName = String(.nFirstName, 0)
.pMiddleName = String(.nMiddleName, 0)
End With
If Len(cFIO) = 1 Then Exit Sub
RetVal = GetPartsFIO(cFIO, PartsFIO)
If RetVal <> 0 Then MsgBox "ПарсингФИОнеудался "& "(" & RetVal & ")"
cLastName = Mid(PartsFIO.pLastName, 1, PartsFIO.nLastName)
cFirstName = Mid(PartsFIO.pFirstName, 1, PartsFIO.nFirstName)
cMiddleName = Mid(PartsFIO.pMiddleName, 1, PartsFIO.nMiddleName)
EndSub |
|
26-01-2015 01:20Здравствуйте !
В VBA новичок подскажите почему не работает код, функция GetPartsFIO возвращает -5
Type TMyPartsFIO
pLastName As String
pFirstName As String
pMiddleName As String
nLastName As Long
nFirstName As Long
nMiddleName As Long
End Type
Private Declare Function GetPartsFIO Lib "Padeg.dll" Alias "GetFIOParts" _
(ByVal pFIO As String, ByRef pResult As TMyPartsFIO) As Integer
Public Sub MakeGetFIOParts(ByVal cFIO As String, ByRef cLastName As String, ByRef cFirstName As String, ByRef cMiddleName As String)
Dim RetVal As Integer
Dim PartsFIO As TMyPartsFIO
If Len(cFIO) = 1 Then Exit Sub
RetVal = GetPartsFIO(cFIO, PartsFIO)
If RetVal <> 0 Then MsgBox "ПарсингФИОнеудался "& "(" & RetVal & ")"
cLastName = Mid(PartsFIO.pLastName, 1, Len(PartsFIO.pLastName))
cFirstName = Mid(PartsFIO.pFirstName, 1, Len(PartsFIO.pFirstName))
cMiddleName = Mid(PartsFIO.pMiddleName, 1, Len(PartsFIO.pMiddleName))
EndSub
' Макросы преобразования выделенного ФИО в соответствующий падеж
Public Sub ФамИнициалы()
Dim F As String, I As String, O As String
Call MakeGetFIOParts(Selection, F, I, O)
Selection.TypeText (Selection)
EndSub |
|
12-01-2015 18:20
12-01-2015 12:12сообщение от автора материала На google выложен пример для MS SQL. Спасибо Илье Галкину. |
|
12-01-2015 11:57сообщение от автора материала > И влияют ли новые лицензионные требования на старые версии библиотеки?
В довесок.
Лицензионные условия всегда были одинаковыми, мы только цены скорректировали. |
|
12-01-2015 11:55сообщение от автора материала > А какие у Вас теперь лицензионные условия для OpenSource-проектов? И влияют ли новые лицензионные требования на старые версии библиотеки?
Как-то не думали об этом.
Во всяком случае если вы не извлекаете выгоды от своих проектов то пользуйтесь на здоровье.
Что за проект, если не секрет? |
|
12-01-2015 04:55А какие у Вас теперь лицензионные условия для OpenSource-проектов? И влияют ли новые лицензионные требования на старые версии библиотеки? |
|
11-01-2015 20:31Я бы к примерам мог бы еще добавить реализацию данных функций в MS SQL 2005 и выше... |
|
03-01-2015 12:08сообщение от автора материала Прошу обратить внимание. Сменились условия поставки, точнее цены.
Библиотека поставляется на условиях неисключительной бессрочной лицензии.
1. Для личного использования (лицензия физ. лица) - 0 р.
2. Для использования внутри организации (лицензия на юр. лицо) - 1000 р. + НДФЛ.
3. Для использования в коммерческих продуктах собственной разработки (лицензия разработчика) - 5000 р. + НДФЛ на один продукт без раскрытия исходного кода.
4. Исходники 20000 р. + НДФЛ. Приобретение исходников не освобождает от приобретения коммерческой лицензии (№ 2 или 3).
Лицензия включает подписку на годовую информационную поддержку.
Для оформления лицензии достаточно подписать с одним из авторов лицензионный договор и акт приема-передачи. Для получения типового договора обращайтесь по одному из указанных в конце адресов.
|
|
03-01-2015 05:50
03-01-2015 05:16сообщение от автора материала > IDE Qt5. Столкнулся с проблемой, как понимаю проблема в самой библиотеке.
И тут проблема не в библиотеке в в типе передаваемой строки. Кто силен в Qt, попробуйте объявить:
int iParam=lpfnGetFIOPadegAS((wchar_t *)cpLastName,
(wchar_t *)cpFirstName,
(wchar_t *)cpMiddleName,
6,
(wchar_t *)cResult,
iLen);
Во всяком случае с C++ Builder такое прокатывает. |
|
03-01-2015 05:10Разбирался с примерами VBA, как оказалось М$ опять впереди планеты всей.
Jпять Unicode.
После объявления Dim tmpS As String мы получим ASC строку.
Для того чтоб она стала UТF, необходимо явное преобразование, см. StrConv()
RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
Вот так вот. При использовании 4-ки в VBA прошу помнить об этом.
Сообщение не подписано |
|
28-12-2014 10:26сообщение от автора материала Улучшал работу с файлом исключений. На днях выложу на Goodle-диск полную сборку 4-ки.
|
|
25-12-2014 19:27
25-12-2014 08:05сообщение от автора материала Коллеги, у кого-либо были проблемы с работой библиотеки в разных потоках, отпишитесь пож.
Есть прозрение. :-)
Завершаю актуализацию документации по 4-ке, теперь она и с COM-сервером, а также читает словарь исключений в любой кодировке.
К НГ на Google диск выложу.
В планах склонение числительных. |
|
24-12-2014 13:51Отлично работает, для моих нужд подходит, но так как я в коде не очень (вообще ник) подскажите как сделать чтоб заработала в автоматическом режиме, чтоб было понятней опишу как я работаю.
в excel забивается список фамилий (ФИО) потом создаю кнопки и назначаю на них макрос, прохожу по строчке и нажимаю кнопку и так по всему списку, естественно было бы попроще если бы он работал для выделенных ячеек, и в этом то и вопрос подскажите а?) думаю это не сложно но поможете сильно. |
|
24-12-2014 12:04Также возникла проблема при подключении словаря. Подключаю словарь таким образом (C#):
string fileName = Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().FullName).DirectoryName, "plugins" + Path.DirectorySeparatorChar + "Except.dic");
if (File.Exists(fileName))
{
Declension.SetExceptionsDictionaryFileName(fileName);
if (!Declension.UpdateExceptionsDictionary())
{
ConvertException exception = new ConvertException("Не удалось подгрузить словарь {0}");
exception.Data.Add("{0}",fileName);
throw exception;
}
}
Метод UpdateExceptionsDictionary возвращает true, как я понимаю это значит, что словарь подключился. Перед вызовом склонения пробую проверить словарь, возвращается корректный путь до словаря, но в результате словарь не используется. К примеру, "Иванова Альфия Ивановна" в дательном падеже становится "Ивановой Альфии Ивановне", вместо "Ивановой Альфие Ивановне".
Использую словарь по умолчанию |
|
24-12-2014 11:08
02-12-2014 08:38Мой косяк, словарь не подключил. Осталось туда добавить еще имя Асия |
|
02-12-2014 07:04
20-11-2014 15:03Наконец-то дошли руки до COM сервера для UniCode (4 версия библиотеки).
Есть желающие потестить COM сервер (в виде DLL)\? Пишите seer.true@gmail.com
Реализованы след. функции:
//function GetFIOPadeg(const cLastName, cFirstName, cMiddleName, cSex: WideString; nPadeg: Integer): WideString; safecall;
//function GetFIOPadegFS(const cFIO, cSex: WideString; nPadeg: Integer): WideString; safecall;
//function GetIFPadeg(const cFirstName, cLastName, cSex: WideString; nPadeg: Integer): WideString; safecall;
//function GetIFPadegFS(const cIF, cSex: WideString; nPadeg: Integer): WideString; safecall;
//function GetNominativePadeg(const cFIO: WideString): WideString; safecall;
//function GetAppointmentPadeg(const cAppointment: WideString; nPadeg: Integer): WideString; safecall;
//function GetOfficePadeg(const cOffice: WideString; nPadeg: Integer;): WideString; safecall;
//function GetFullAppointmentPadeg(const cAppointment, cOffice: WideString; nPadeg: Integer): WideString; safecall;
//function GetSex(const cMiddleName: WideString): Integer; safecall;
//procedure SeparateFIO(const cFIO: WideString; var cLastName, cFirstName, cMiddleName: WideString); safecall;
Описания есть в readme.doc 3-ей версии.
P.S. редактор RIDL в XE чудовищно глючный и не удобный! |
|
20-11-2014 12:15Здравствуйте!
Пытаемся установить библиотеку но возникает ошибка "Модуль ... загружен но точка входа DLLRegisterServer не найдена..."
Устанавливаем на Windows 8 - возможно в этом причина - под 8-ку не идет? |
|
21-10-2014 12:13
21-10-2014 09:01
21-10-2014 06:07Использую библиотеку PadegUC.dll от 23 ?декабря ?2013 ?г., ??23:15:30
Зациклила на "Ву Тхань Хыонг", именительный падеж, мужской пол |
|
17-09-2014 18:21А эту версию удалось подружить с .Net? Я попытался в Declension1251 просто заменить Padeg.dll на PadegUC.dll + замена библиотеки, но после отработки функции строка в первоначальном виде остается
kuzkok, советую посмотреть архив с кодом, который я выкладывал для CLR библиотеки MSSQL. Там все доработано именно для .NET.
PS. Прошу авторов добавить или заменить в основном архиве файл DeclensionBLL.cs, который является .NET оберткой для библиотеки PadegUC.dll |
|
25-08-2014 04:02сообщение от автора материала > А эту версию удалось подружить с .Net?
В версии 4 есть поддержка unicode. Касательно .Net и поддержки любой другой технологии.
Попробуйте, дерзните "и история вас не забудет". :-)
> закон, уведомление, протокол, акт...
Это работает тоже. |
|
25-08-2014 03:19>Все справедливо для версии 4.
А эту версию удалось подружить с .Net? Я попытался в Declension1251 просто заменить Padeg.dll на PadegUC.dll + замена библиотеки, но после отработки функции строка в первоначальном виде остается
в предыдущем обсуждении нашел что уже пытались но там остановились на
>>В C# нет
>>Microsoft.VisualBasic.Strings.StrConv(cFIO, Microsoft.VisualBasic.VbStrConv.vbUnicode)
>>а строки всегда UNICODE
С 3.3 тоже работает, по крайней мере с теми же "постановлениями" и "решениями"
>Какие еще примеры названий документов придумаете на вскидку?
закон, уведомление, протокол, акт...
|
|
25-08-2014 02:28сообщение от автора материала > Возможно ли склонять наименования документов?
А попробуйте воспользоваться склонение должностей и подразделений. Во всяком случае если испрользовать
"постановление" - как должность, а совет министров как подразделение, тот склоняет правильно:
Р: постановления совета министров
Д: постановлению совета министров
В: постановление совета министров
Т: постановлением совета министров
П: постановлении совета министров
Слова "решение", "приказ", "график", "заказ", "счет", "план" ф-ция склонения должности тоже склоняет правильно.
Все справедливо для версии 4.
Какие еще примеры названий документов придумаете на вскидку? |
|
25-08-2014 01:58Возможно ли склонять наименования документов? Или возможно ли добавить такую фичу. Например в базе есть документы "постановление...", "решение ..." и т.д. А надо выводить фразу "утверждено постановлением ...". |
|
07-04-2014 23:10IDE Qt5. Столкнулся с проблемой, как понимаю проблема в самой библиотеке
typedef int (__stdcall *LPFNGetFIOPadegAS)
(unsigned char *,unsigned char *, unsigned char *, int, unsigned char *, int &);
LPFNGetFIOPadegAS lpfnGetFIOPadegAS;
QLibrary lib("PadegUC32.dll");
lpfnGetFIOPadegAS = (LPFNGetFIOPadegAS) lib.resolve("GetFIOPadegAS");
char *cpLastName, *cpFirstName, *cpMiddleName;
char cResult[200];
cpLastName="Иванов";
cpFirstName="Иван";
cpMiddleName="Иванович";
int iLen=200;
int iParam=lpfnGetFIOPadegAS((unsigned char *)cpLastName,
(unsigned char *)cpFirstName,
(unsigned char *)cpMiddleName,
6,
(unsigned char *)cResult,
iLen);
qDebug() << cResult;
qDebug() << iParam;
Немного переделал пример из описания под Qt (подгрузка dll)
Функция работает, но не склоняет
Вывод:Иванов
0 |
|
27-03-2014 23:29Просто не работал особо в студии, не могу найти как создать проект SQL Server Library. Что для этого должно стоять?
Иван, для этого должна стоять Visual Studio 2008 или более новая, любой редакции кроме Express |
|
27-03-2014 05:12Иван, в сообщении от 24.12.2013 мною было подробно описано что нужно делать с данными исходниками. Выложить готовую DLL и скрипт для ее установки и создания всех функций конечно можно, но я бы посоветовал все-таки разобраться с процессом создания проектов, компиляции и установки функций
Просто не работал особо в студии, не могу найти как создать проект SQL Server Library. Что для этого должно стоять? |
|
26-03-2014 18:39Я сделал Dll для MSSQl2008R2 64bit. Подключил. Теперь периодически она твешает сервер наглух что никак не снять, только перегрузкой сервера. а он рабочий . там еще база 1C круктится - так что стремно. Харкрерно что это происходи лишь при одновременном обращении к фукциям нескольких юзеров. Она у меня вызывается из Report Service для формирования приказов.
Очень странно, у меня такого поведения замечено не было за 3 месяца использования... Правда базы у меня крутятся на MSSQL 2005. Надо смотреть почему это может происходить... |
|
25-03-2014 02:46Я сделал Dll для MSSQl2008R2 64bit. Подключил. Теперь периодически она твешает сервер наглух что никак не снять, только перегрузкой сервера. а он рабочий . там еще база 1C круктится - так что стремно. Харкрерно что это происходи лишь при одновременном обращении к фукциям нескольких юзеров. Она у меня вызывается из Report Service для формирования приказов.
|
|
24-03-2014 19:28Здравствуйте! Скачал обертку для mssql с google диска. Подскажите как эти файлы скомпилить в dll. Может у кого уже есть готовые либы для x64 Сервера. Поделитесь пожалуйста!
Иван, в сообщении от 24.12.2013 мною было подробно описано что нужно делать с данными исходниками. Выложить готовую DLL и скрипт для ее установки и создания всех функций конечно можно, но я бы посоветовал все-таки разобраться с процессом создания проектов, компиляции и установки функций. |
|
21-03-2014 07:29Здравствуйте! Скачал обертку для mssql с google диска. Подскажите как эти файлы скомпилить в dll. Может у кого уже есть готовые либы для x64 Сервера. Поделитесь пожалуйста! |
|
20-03-2014 02:59хотя если использовать любой другой знак: _ или / или + то склоняет нормально
а можно что бы это работало независимо от наличия дефиса как в on-line форме?
заранее спасибо |
|
20-03-2014 02:52спасибо, попробовал теперь пишет "инженерно" is not a valid integer value |
|
19-03-2014 23:52сообщение от автора материала в Edit1.Text пишется допустим название факультета: инженерно технологический факультет
Попробуйте написать: инженерно-технологический факультет |
|
19-03-2014 14:15помогите пожалуйста разобраться почему не работает ниже приведенный код
в Edit1.Text пишется допустим название факультета: инженерно технологический факультет
но склоняется только первое слово инженерно, это видно если заменить инженерно на инженер тогда склонят в дательном падеже инженеру технологический факультет |
|
19-03-2014 14:11function GetOfficePadeg(pOffice: PWideChar; nPadeg: Integer; pResult: PWideChar;
var nLen: Integer): Integer; stdcall;
external 'padegUC.dll' Name 'GetOfficePadeg';
procedure TForm8.Button2Click(Sender: TObject);
var
tmpS: PWideChar;
nLen: LongInt;
wideChars : array[0..150] of WideChar;
begin
nLen := Length(Edit1.Text) + 10;
tmpS := StrAlloc(nLen);
try
StringToWideChar(Edit1.Text,WideChars,150);
GetOfficePadeg(WideChars, 3, tmpS, nLen);
Label1.Caption:= Copy(tmpS, 1, nLen);
finally
StrDispose(tmpS);
end;
end;
|
|
07-03-2014 23:53Решил, выкладываю может кому-то пригодится:
Type PPartsFIO
pLastName As String
pFirstName As String
pMiddleName As String
nLastName As Long
nFirstName As Long
nMiddleName As Long
End Type
Private Declare Function GetFIOParts Lib "j:\!!!!!!!!Excel\CreateWordDocuments2\CreateWordDocuments\x32\PadegUC.dll" _
(ByVal pFIO As String, Parts As PPartsFIO) As Integer
Public Function GetFIOParts_My(ByVal cFIO As String, ByVal Num As Integer) As String
Dim PartsFIO As PPartsFIO
Dim RetVal As Integer
PartsFIO.pLastName = String(10000, 0)
PartsFIO.pFirstName = String(10000, 0)
PartsFIO.pMiddleName = String(10000, 0)
PartsFIO.nLastName = 10000
PartsFIO.nFirstName = 10000
PartsFIO.nMiddleName = 10000
RetVal = GetFIOParts(StrConv(cFIO, vbUnicode), PartsFIO)
Dim tmpS As String
Select Case Num
Case 1
tmpS = PartsFIO.pLastName
Case 2
tmpS = PartsFIO.pFirstName
Case 3
tmpS = PartsFIO.pMiddleName
Case 4
tmpS = PartsFIO.nLastName
Case 5
tmpS = PartsFIO.nFirstName
Case 6
tmpS = PartsFIO.nMiddleName
Case Else
tmpS = StrConv(cFIO, vbUnicode)
End Select
GetFIOParts_My = Left(StrConv(tmpS, vbFromUnicode), 10000)
End Function
Seer, возможно ли добавить в словарь исключений концевую часть фамилии/имени, или лучше добавить возможность задать маску (регекс) для словаря исключений?
|
|
07-03-2014 10:59Попытался использовать в Excel, но одну функцию не получается вызвать:
вот что cделал:
Type PPartsFIO
pLastName As String
pFirstName As String
pMiddleName As String
nLastName As Long
nFirstName As Long
nMiddleName As Long
End Type
Private Declare Function GetFIOParts Lib "PadegUC.dll" _
(ByVal pFIO As String, Parts As PPartsFIO) As Integer
Public Function MakePadegGetFIOParts(ByVal cFIO As String) As String
Dim aaaa As PPartsFIO
Dim aa As Integer
aa = GetFIOParts(cFIO, aaaa)
MakePadegGetFIOParts = aaaa
End Function
Не получается, что я делаю не так и как нужно правильно использовать данную функцию?
|
|
18-02-2014 05:50Добрый день.
Использую padeg_ua.
Слово "довіреність" склоняет как "довіреністя".
Есть ли возможность внести его в словарь, так что бы склоняло правильно "довіреності"? |
|
21-01-2014 11:43Здравствуйте хотелось бы получить исправленную версию склоняющую звено, узел, поле и т.п. для работы на VBA |
|
25-12-2013 01:46
25-12-2013 01:21
24-12-2013 01:17Здравствуйте! Поздравляю всех с наступающим Новым Годом! И в качестве подарка выкладываю то? что все так просили - исходный код позволяющий сделать обертку над библиотекой PadegUC.dll в виде CLR функций для MS SQL, которая реально работает. Прикладываю архив, в котором 2 файла: один - это непосредственно враппер библиотеки, второй - реализация CLR функций. Если вы все это скомпилите в VS в проекте SQL SERVER Library, то получите так желанную многими библиотеку. Сразу скажу, что сборка требует для себя разрешения типа UNSAFE. А так же, для ее работы необходимо положить библиотеку PadegUC.dll нужной разрядности в каталог на сервере, который прописан в системной переменной среды PATH, например C:\Windows\system32.
Ну а вот и ссылка :)
https://docs.google.com/file/d/0BwgSDWxKYvogNE9uSXoxaW1URTA/edit?pli=1 |
|
23-12-2013 14:15
23-12-2013 14:12Наконец-то руки дошли
https://drive.google.com/folderview?id=0ByCjt0r9Y_FcNlU1cHVrbHpGd3M&usp=sharing
пароль 123
1. cdecl, исправил на stdcall, кроме PadegFB
2. "тестовая программа SamplesFIO.exe 32-битная при попытке выполнить какое-то действие молча вылетает. Это происходит на 64-битной Windows 7 при любых параметрах запуска. То же самое - на Windows XP 32 бита." исправил. Причины до конца не понятны, однако работает.
Гена сейчас как раз мучается с COM сервером, может есть желающие помочь? Пока советом.Сообщение не подписано |
|
19-12-2013 08:14Товарищи, а может все таки есть умельцы, которые соорудили CLR для MS SQL Server 2005-2012?
> А что не так с 64 бит MSSQL 2008?
> Для 64-х бит можно пересобрать пример в файле pd_Sample.zip
Просто хочется использовать не ввиде хранимых процедур, а в виде функций! |
|
30-11-2013 14:15Замечательная библиотека, огромное спасибо.
Только пару уточнений (возможно, кому-то пригодится).
1. PadegUC.dll, 32-битная версия, точно так же не содержит COM-сервера, как и 64-битная (это было не очень ясно с самого начала, возможно, я где-то что-то пропустил). Поэтому ни regsvr32.exe, ни СоздатьОбъект работать не будут.
2. Попытки использовать библиотеку в VBA6 (Excel, Word) через Declare тоже работать не будут, так как экспортируемые функции объявлены как cdecl, а не stdcall. Такие функции VBA (без дополнительных ухищрений) вызывать не умеет.
3. Ровно так же в C++ примеры с typedef'ом stdcall выдают ошибку.
(Кстати, тестовая программа SamplesFIO.exe 32-битная при попытке выполнить какое-то действие молча вылетает. Это происходит на 64-битной Windows 7 при любых параметрах запуска. То же самое - на Windows XP 32 бита. Причины не понятны. 64-битная версия на 64-битной Windows работает благополучно.)
Хорошие новости.
1. После замены в C++ stdcall на cdecl и unsigned char нв wchar_t все отработало на ура.
2. Таки можно заставить Excel VBA работать с библиотекой. Класс для вызова cdecl функций, найденный в интернете; Сhr(0), подклеенный к аргументам; массивы байт, принимающие в себя строки; VarPtr; строки, принимающие значения из массива байт - и все в итоге великолепно. Можно, конечно, еще поиграться с tlb или с С++ обертками (cdecl -> stdcall), но для моих целей это лишнее.
Так что имейте в виду.
А автору еще раз спасибо.
|
|
18-11-2013 20:09спасибо!! этого не заметил |
|
15-11-2013 12:28сообщение от автора материала В 1С использую библиотеку padeg.dll при вызове процедуры GetFIOPadegFSAS, выдаёт ошибку —- ( Метод объекта не обнаружен (GetFIOPadegFSAS) ) —-, в инструкции такая процедура описана.
Вы ошибаетесь, у COM-сервера нет такого метода (см.п.8.1). Да он и не нужен, т.к. для автоматического определения рода достаточно указать параметром рода пустую строку в методе GetFIOPadegFS(). Собственно, в примерах использования в п.8.2.3 именно это и приведено. |
|
14-11-2013 22:05В 1С использую библиотеку padeg.dll при вызове процедуры GetFIOPadegFSAS, выдаёт ошибку —- ( Метод объекта не обнаружен (GetFIOPadegFSAS) ) —-, в инструкции такая процедура описана. |
|
13-11-2013 11:03сообщение от автора материала Склонение "звено", "веретено" и прочие "ено" исправлено |
|
12-11-2013 15:21сообщение от автора материала Работаю над "звеном". :-) |
|
12-11-2013 15:18
11-11-2013 22:18
11-11-2013 05:24Евгений, здравствуйте!
17-10-2013 Seer дал ссылку на Google Drive. Для того чтобы скачать файлы, надо иметь доступ к учётной записи Google, т.е. быть зарегистрированным на GMail.
При работе с PadegUC.dll, в отличие от ранних версий padeg.dll, код функций надо поменять, иначе они будут работать с ошибками. Примерно вот так:
#If VBA7 Then
Private Declare PtrSafe Function GetFIOPadegFSAS Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare PtrSafe Function GetNominativePadeg Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare PtrSafe Function GetAppointmentPadeg Lib "PadegUC.dll" _
(ByVal pAppointment As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
#Else
Private Declare Function GetFIOPadegFSAS Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare Function GetNominativePadeg Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare Function GetAppointmentPadeg Lib "PadegUC.dll" _
(ByVal pAppointment As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
#End If
' Функция преобразования cFIO в падеж nPadeg
Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
If Len(cFIO) = 1 Then Exit Function
nLen = 255
tmpS = String(nLen, 0)
RetVal = GetFIOPadegFSAS(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen)
'If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО"
MakePadeg = Left(StrConv(tmpS, vbFromUnicode), nLen)
End Function
' Функция преобразования sAppointment в падеж nPadeg
Public Function MakeAppointment(ByVal sAppointment As String, ByVal nPadeg As Long) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
If Len(sAppointment) < 3 Then Exit Function
nLen = 10000
tmpS = String(nLen, 0)
RetVal = GetAppointmentPadeg(StrConv(sAppointment, vbUnicode), nPadeg, tmpS, nLen)
If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение должности"
MakeAppointment = Left(StrConv(tmpS, vbFromUnicode), nLen)
End Function
|
|
08-11-2013 04:33Добрый день! Пользуюсь Вашей библиотекой очень давно. На работе поменяли компы, и поставили новую ОС x64. Перенес. Не работает. Прочитал, что для x64 нужна новая библиотека padegUC. Не могу найти ее здесь. Дайте пожалуйста ссылку. |
|
31-10-2013 12:39Здравствуйте, заметил несколько слов которые склоняются не верно, как их исправить не могу взять в толк: Должность - Начальник узла, подразделение - Узел связи, результат - Начальник узла узела связи; Должность - Командир звена, подразделение - вертолетное звено, результат - Командир звена вертолетного звено. Буду благодарен за ответ. |
|
30-10-2013 20:20Подскажите пожалуйста как можно подключить библиотеку padeg.dll не регистрируя её через (regsvr32)?
В модуле подключаю таким образом:
Попытка
ЗагрузитьВнешнююКомпоненту("C:\Program Files (x86)\1cv82\Padeg.dll");
КомпонентаСклонения = Новый COMОбъект("Padeg.Declension");
Исключение
Сообщить("Не удалось подключить внешнюю компоненту Padeg.dll !");
КонецПопытки;
КомпонентаСклонения.Dictionary.FileName = "C:\Program Files (x86)\1cv82\Except.dic";
Не подключается, уходит в исключение ("Не удалось подключить внешнюю компоненту Padeg.dll!")
|
|
29-10-2013 02:07сообщение от автора материала С тире проблему исправим.
Что касается N-спальный должностей (как имена испанских грандов) тут в лоб проблема не решается но что-нить попробуем придумать.
И потом такие должности встречаются достаточно редки и явно не в общих списках.
Каcательно склонения "генерал-майор", склонение построено по общему правилу деловой переписки (наша любимая книжка: Розенталь Д.Э., Теленкова М.А. Словарь трудностей русского языка, изд. 3-е. М., 1984, с. 108, 239.)
Порядок склонения составных слов:
1) установить, сколько частей слова склоняется;
2) если склоняются обе части, определить грамматический род по первому слову (платье-костюм — у меня нет платья-костюма — у нее появилось новое платье-костюм);
3) если склоняется только вторая часть, грамматический род определяется по второму слову (кафе-мороженое открыто).
Для воинских званий с несклоняемой первой частью необходимо использовать словарь исключений.
|
|
28-10-2013 23:55Seer, я выслал Вам файл с примерами. Посмотрите, пожалуйста, почту.
Хотел бы ещё попросить Вас, если есть возможность, поменять заголовок темы и содержание. Всё же, программа склоняет и должности. |
|
28-10-2013 01:05сообщение от автора материала > Печально, никто не любит 64 бит MSSQL 2008
А что не так с 64 бит MSSQL 2008?
Для 64-х бит можно пересобрать пример в файле pd_Sample.zip |
|
25-10-2013 17:56сообщение от автора материала > Выяснил, что должность "и.о. ректора" склоняется так, как будто слово "ректора" - женского рода.
У вас не загружен файл исключений!
> Кроме того, если в должности есть тире (не дефис, который ставится кнопкой "минус"), то вторая часть должности тоже склоняется неверно.
сохраните пример с "не дефисом" в ворде и пришлите пож. на мою почту.
> "заместитель директора – начальник отдела" склоняется так,
Да, это особенность, как-то "двуспальные" должности не рассматривали. |
|
23-10-2013 01:09Печально, никто не любит 64 бит MSSQL 2008 |
|
22-10-2013 08:54Прошу прощения, ошибся, вот такой вариант предлагается программой: "заместителю директора – начальник отдела". |
|
22-10-2013 08:49Здравствуй, уважаемый автор программы!
Протестировал сегодня 32-разрядную библиотеку на нескольких примерах. Спасибо за хорошее оформление программы.
Выяснил, что должность "и.о. ректора" склоняется так, как будто слово "ректора" - женского рода.
Кроме того, если в должности есть тире (не дефис, который ставится кнопкой "минус"), то вторая часть должности тоже склоняется неверно. Например, "заместитель директора – начальник отдела" склоняется так, что вторая часть (начальник отдела) не меняется ("заместителю директора - начальнику отдела"). Если заменить тире на дефис, то ошибка исчезает. |
|
17-10-2013 12:47
17-10-2013 12:43сообщение от автора материала Пересобрал библиотеку для Firebird (32 и 64) попутно избавился от паразитных параметров, типа длинна возвращаемого результата.
Ссылка для скачивания https://docs.google.com/file/d/0ByCjt0r9Y_FcUEFtMTJmd3h0eDA/edit?usp=sharing
Скрипт подключения в архиве.
Не требуется лицензирования.
Реализованы след. ф-ции:
GETAPPOINTMENTPADEG 'Склонение должности. Параметры должность, падеж.';
GETDICTIONARY 'Получение полного имени словаря исключений. Без входных параметров.';
GETFIOPADEGFS 'Функция склонения фамилии, имени, отчества, записанных одной строкой, из именительного падежа в любой другой падеж. Входные параметры: ФИО в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.';
GETFIOPADEGFSAS 'Склонение ФИО с автоматическим определением рода (пола). Параметры ФИО, падеж';
GETFIPADEGFS 'Склонение фамилии и имени(см. GETIFPADEGFS, там имени и фамилии), записанных одной строкой. Параметры ФИ, род (1 - мужчина, 0 - женщина), падеж.';
GETFULLAPPOINTMENTPADEG 'Склонение наименования должности (1-й параметр) и подразделения (2-й параметр) в падеже заданным третьим параметром.';
GETIFPADEGFS 'Склонение имени и фамилии (см. GETFIPADEGFS, там фамилии и имени), записанных одной строкой. Параметры ИФ, род (1 - мужчина, 0 - женщина), падеж.';
GETNOMINATIVEPADEG 'Функция восстановления именительного падежа. Входной параметр ФИО в склонении, выход: ФИО в именительном падеже';
GETOFFICEPADEG 'Склонение подразделения. Параметры подразделение, падеж';
GET_SEX 'Определение пола по ФИО (отчеству). Параметры ФИО. Возвращает 1 - "М", 0 - "Ж"';
SETDICTIONARY 'Установка и загрузка нового словаря исключений. Входной параметр полное имя словаря исключений. Возвращает успех - 1, неудача - 0.';
UPDATEEXCEPTIONS 'Выполняет перезагрузку словаря исключений. Возвращает значения: 1 - успешное, 0 - ошибка.';
|
|
16-10-2013 20:06библиотеку с помощью regsvr32 зарегистрировал, в ключе реестра путь указал HKLM\SOFTWARE\Padeg, автоматом не подключается.
Через КомпонентаСклонения.Dictionary.FileName = C:\Program Files (x86)\1cv82\Except.dic подключился, склоняет как надо, большое спасибо за помощь, очень оперативно. |
|
16-10-2013 07:09сообщение от автора материала В сообщении пусто, видимо не подключены исключения, а как его подключить?
Если библиотека зарегистрирована в системе с помощью regsvr32 и файл исключений находится по адресу, указанному в ключе реестра HKLM\SOFTWARE\Padeg "ExceptionDicDir", то исключения должны подключаться автоматом.
Но можно и непосредственно указать расположение файла после создания компоненты:
КомпонентаСклонения.Dictionary.FileName = путь_к_файлу/Except.dic |
|
15-10-2013 23:06В 1с должность "заведующий мастерским участком" склоняет в "заведующему мастерскиму участком",
Проверьте подключение словаря исключений:
Сообщить(""Текущий словарь: ""+КомпонентаСклонения.Dictionary.FileName);
А если он подключен, то наличие слова "заведующий" в секции [NonAdjective]
В сообщении пусто, видимо не подключены исключения, а как его подключить? |
|
15-10-2013 07:54Использовал эклевский макрос на VBA. В первом столбце перечислены ФИО в иминительном падеже, во второй назначил функцию для преобразования в Творительный падеж.
При первом запуске и добавлении макроса в файл все отлично переделал.
После сохранения и перезапуска этого же файла макрос отказался работать-пишет в ячейке #ЗНАЧ!. Переназначение функции в ячейке не помогает, в коде макроса ничего не менял.
В чем может заключаться проблема? |
|
14-10-2013 05:43
13-10-2013 22:17сообщение от автора материала В 1с должность "заведующий мастерским участком" склоняет в "заведующему мастерскиму участком",
Проверьте подключение словаря исключений:
Сообщить(""Текущий словарь: ""+КомпонентаСклонения.Dictionary.FileName);
А если он подключен, то наличие слова "заведующий" в секции [NonAdjective] |
|
11-10-2013 01:46В 1с должность "заведующий мастерским участком" склоняет в "заведующему мастерскиму участком",
а должно быть "заведующему мастерским участком".
пример кода:
КомпонентаСклонения = Новый COMОбъект("Padeg.Declension");
ДолжностьПадеж = КомпонентаСклонения.GetAppointmentPadeg(Должность, 3); |
|
07-10-2013 10:59сообщение от автора материала Желающие потестировать библиотеку PadegFB.dll для Firebird (32 и 64 бита) милости прошу написать seer.true@gmail.com. В теме укажите "PadegFB XX-бита".
Новое в версии: изменена ветка реестра для хранения настроек на HKEY_CURRENT_CONFIG.
Исправлена ошибка восстановления именительного падежа ("а" после шипящих).
и прочие незначительные улучшения. |
|
07-10-2013 05:10Пытаюсь связать библиотеку PadegUC.dll с Firebird'ом следующими способом:
DECLARE EXTERNAL FUNCTION GET_FIO_PADEG_FSAS
CSTRING(100),
INTEGER
RETURNS CSTRING(100)
ENTRY_POINT 'GetFIOPadegFSAS'
MODULE_NAME 'PadegUC';
Проверяю работоспособность в IBExpert'е:
select p.name, get_fio_padeg_fsas(p.name, 2)
from person where p.id = 1000
В результате вылетает exception и служба Firebird падает.
Отзовитесь, у кого получилось подключить данную библиотеку! |
|
07-10-2013 05:10Пытаюсь связать библиотеку с Firebird'ом следующими командами:
DECLARE EXTERNAL FUNCTION GET_FIO_PADEG_FSAS
CSTRING(100),
INTEGER
RETURNS CSTRING(100)
ENTRY_POINT 'GetFIOPadegFSAS'
MODULE_NAME 'Padeg';
Проверяю работоспособность в IBExpert'е:
select p.name, get_fio_padeg_fsas(p.name, 2)
from person where p.id = 1000
В результате вылетает exception и служба Firebird падает.
Отзовитесь, у кого получилось подключить данную библиотеку! |
|
20-09-2013 06:52Здравствуйте ! Использую обертку xp_padej.dll v3.0 вместе с MS SQL SERVER 2008 работает, но при единовременном обращении неск. пользователей сервер останавливает соед. Возникает ошибка, вот лог
2013-09-20 13:30:19.61 spid53 Ошибка: 18002, серьезность: 20, состояние: 1.
2013-09-20 13:30:19.61 spid53 Exception happened when running extended stored procedure 'GetOfficePadeg' in the library 'xp_padeg.dll'. SQL Server is terminating process 53. Exception type: Win32 exception; Exception code: 0xc0000005.
Есть ли где-то обертка для х64 ?
|
|
01-09-2013 12:00сообщение от автора материала > Удалось ли кому-нибудь подключить библиотеку padeg.dll в firebird? или это невозможно?
К счастью возможно, только мне надо сделать новую сборку, обратитесь в личку seer.true@gmail.com. |
|
30-08-2013 06:43Удалось ли кому-нибудь подключить библиотеку padeg.dll в firebird? или это невозможно? |
|
19-07-2013 11:33сообщение от автора материала ... но исчез. :-) |
|
19-07-2013 11:31сообщение от автора материала > Есть ли эта чудесная библиотека для работы под Linux (Ubuntu)? Очень нужна!
Пока нет, но есть планах. Был один желающий портировать, но исче |
|
16-07-2013 07:56Есть ли эта чудесная библиотека для работы под Linux (Ubuntu)? Очень нужна!
Заранее спасибо! |
|
14-05-2013 02:27Добрый день!
Приношу извинения за сознательное сообщение о не существующей ошибке при склонении в предложном падеже, обратил внимание на древние даты библиотеки и решил проверить таким способом жив ли сайт.
И только после заметил активную жизнь в разделе "обсуждение материала"
С уважением,
Игорь |
|
12-05-2013 11:15сообщение от автора материала > получаю Access violation если попытаюсь склонять Ыва Ыва Ыва
Странно, я АV повторить не смог. Какую ф-цию используете? Ну и давайте пример кода. |
|
08-05-2013 06:31Проблема с PadegUC.dll дело в том, что получаю Access violation если попытаюсь склонять Ыва Ыва Ыва |
|
06-03-2013 03:24Не знаю почему .
Просто выдает без склонения.
Я просто менял Padeg.dll на PadegUC.dll (соответственно и ссылки)
В C# нет
Microsoft.VisualBasic.Strings.StrConv(cFIO, Microsoft.VisualBasic.VbStrConv.vbUnicode)
а строки всегда UNICODE
Поэтому я и удивлен что не юникод работает а юникод нет.
|
|
05-03-2013 21:23А можно просто скомпилить Padeg.dll 64-bit без Unicod'a как было , а то у меня на C# не склоняет (но работает)
Александр Филипов
А такое не работает в C# ? на данном языке не пишу, ну просто попробовать по аналогии стоит думаю...
преобразование к ансистринг.
Microsoft.VisualBasic.Strings.StrConv(cFIO, Microsoft.VisualBasic.VbStrConv.vbUnicode)
и обратное преобразование.
Microsoft.VisualBasic.Strings.StrConv(cFIO, Microsoft.VisualBasic.VbStrConv.vbFromUnicode)
Кстати макросы под ексель на 64-битном офисе проверил. все работает отлично. для универсальности можно сразу прописать объявление функций следующим образом:
#If VBA7 Then
Private Declare PtrSafe Function GetFIOPadegFSAS Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare PtrSafe Function GetNominativePadeg Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare PtrSafe Function GetAppointmentPadeg Lib "PadegUC.dll" _
(ByVal pAppointment As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
#Else
Private Declare Function GetFIOPadegFSAS Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare Function GetNominativePadeg Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
Private Declare Function GetAppointmentPadeg Lib "PadegUC.dll" _
(ByVal pAppointment As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
#End If
остается дело за малым положить нужную версию padegUC.dll в программу с офисом. |
|
05-03-2013 04:01А можно просто скомпилить Padeg.dll 64-bit без Unicod'a как было , а то у меня на C# не склоняет (но работает) |
|
28-02-2013 22:12Добрый день. в общем, сам мучался долго и поэтому выкладываю решение как подключить библиотечки PadegUC.dll к макросам в экселе или ворде.
первонаперво ложите padegUC.dll и Except.dic в папку куда установлен Офис у вас у меня к примеру:
C:\Program Files\Microsoft Office\Office14
далее не забудьте в объявлении фунции экспорта dll указать все таки padegUC.dll
Ну и последнее при отправке и получении переменной типа String не забудьте сделать преобразование через функцию StrConv. Приведу пример из функции преобразования фамилий
RetVal = GetFIOPadegFSAS(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen)
If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО"
MakePadeg = Mid(StrConv(tmpS, vbFromUnicode), 1, nLen)
Проверено на библиотечке под 32-битный офис.
Автору Огромное СПАСИБО за его труды!!!
|
|
20-02-2013 00:53Уважаемый автор программы!
Большое спасибо за ответ. Приятно пользоваться вашей программой.
Наверное, я отстал от жизни, но не знаю, как пользоваться dll без использования COM (в Word).
Регистрировал я её уже просто от того, что Word выдавал ошибку "File not found: 'PadegUC.dll'", думал, хоть через regsvr32 сможет найти. |
|
19-02-2013 12:55сообщение от автора материала > но с появлением Windows 7 x64 появились проблемы.
Господа, коллеги, други...
Читайте внимательно версия x64 тестовая без COM-сервера.
Зачем вы ее регистрируете и пытаетесь использовать как COM-сервер? |
|
19-02-2013 00:41Здравствуйте!
Подскажите, пожалуйста, как мне быть с 64-разрядной Windows и PadegUC.dll?
Несколько лет использую отличную библиотеку Padeg.dll, но с появлением Windows 7 x64 появились проблемы. На форуме здесь где-то едва нашёл библиотеку PadegUC.dll, долго с ней пытался "подружиться". Копировал в Windows\System32, Windows\SysWoW64, пытался регистрировать её через regsvr32 (тоже обеими версиями из обеих папок). Однако выдавались разные ошибки типа "Не найдена точка входа" и "Не удалось зарегистрировать".
В самом проекте в Word тоже не всё ладно. Попытки описать вызов функции через
Private Declare Function GetPadeg Lib "PadegUC.dll" Alias "GetFIOPadegFSAS" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
подсвечиваются в редакторе красным цветом.
Ставлю директиву #If Win64 Then, заменяю Long на LongLong, после Declare пишу слово PtrSafe, немного меняю код функции, захожу в Debug, пытаюсь поглядеть результат, вижу сообщение об ошибке типа:
Run-time error '48': File not found 'PadegUC.dll'.
Попытки зарегистрировать его способом, указанным выше, привели к другим ошибкам.
Подскажите, как быть. |
|
16-02-2013 06:19На 2008 надо делать CLR функцию , тем паче что 2000 64-bit нет. Но те кто могут молчат , а у меня не вышло |
|
14-02-2013 19:33А как обстоят дела с подключением новой версии х32 и х64 к MS SQL server 2008? попытался просто переименовать библиотеки и скормить - не получилось. и библиотека xp_padeg.dll не работает на 2008 сервере... |
|
01-02-2013 12:57
31-01-2013 03:53Все ссылки на 64битную версию битые, выложите, пожалуйста! |
|
14-01-2013 06:16Не знаю но PadegUC не хочет склонять на C#, хотя Padeg.dll в том же проекте работает (вообще то мне надо 64 - bit для MSSQL CLR) |
|
27-12-2012 06:46Здравствуйте !!!
Будет ли или где взять обёртку "xp_padeg" для MS SQL SERVER 64 разрядной?
|
|
22-12-2012 06:29Не могу исползовать PadegUC.dll в C#. Имя иDll import заменил но пишет "Can not load file PadegUC.dll" |
|
06-12-2012 02:45Уважаемые авторы!
В свое время я портировал библиотеку на java, и пользовался единолично результатами 5 лет. Наконец, решил опубликовать на хабре как подарок любимому ресурсу (http://habrahabr.ru/post/161335/).
Конечно, лучше было бы спросить заранее, но каково ваше отношение к данной истории (если отрицательное, готов удалить статью). Также интересует, могу ли я публиковать исходники как open-source проект? Портированная библиотека соответствует padeg.dll 3.3 |
|
05-12-2012 12:08
30-11-2012 21:19Seer, не могли бы наSeer, не могли бы на googledocs также добавить и 32 битную версию, пож-та googledocs также добавить и 32 битную версию, пож-та |
|
29-11-2012 04:48Будьте добры, пожалуйста, обновите ссылки! Очень нужна библиотека с поддержкой unicode. |
|
19-11-2012 11:05
19-11-2012 10:57
19-11-2012 02:06Пожалуйста, обновите ссылки для скачивания библиотек под SQL Server х64 |
|
24-10-2012 13:48сообщение от автора материала Есть вопрос. Куда развивать дальше?
На UniCode перешли, 64бита есть...
Просили Com-сервер для 64-х версии. Нужен ли?
Поигрался с dataSnap. Стоит ли?
Вот такие времена... |
|
09-10-2012 15:13Имеется или планируется сборка библиотеки под Linux. Интересует вариант использования в связке Linux+fpc+Lazarus |
|
07-10-2012 03:34сообщение от автора материала К сожалению в силу занятости не могу так часто отслеживать форум, но на e-mail отвечаю быстро.
Тут тестовая 64-разрядня версия
ftp://ftp.asphltd.ru/Upload/Padeg64/ |
|
07-09-2012 02:59
04-07-2012 01:21Просьбу можно.
Есть скрипт на MSSQ2000.
Сейчас уже на 2005 и 2008 сборки - Кто нибудь может переделать на сборки - я туплю в это
А то хранимка на 2000 резеультата не возвращает |
|
25-06-2012 06:58Есть проблема со склонением названия организации: "Православная церковь"
в родительном: "Православной церковя"
в творительном: "Православной церковем"
Может как-то можно обойти? |
|
13-06-2012 22:42
29-05-2012 00:23
24-04-2012 03:06
23-04-2012 07:06Скачал архив с http://www.delphikingdom.com/asp/viewitem.asp?catalogid=412. Устанавливал на 32-разрядную винду. По ссылкам на этой странице скачал обновленный архив, dll не регистрируются вообще, ни на 32 разрядной, ни на 64-разрядной винде. Ошибка - модуль ... загружен, но точка входа DLLRegisterServer не найдена. |
|
21-04-2012 00:23сообщение от автора материала > Скачал padeg.dll, весь набор. Использую для склонения должностей в зуп8.
Вы говорите о 64 битах? |
|
20-04-2012 09:03Скачал padeg.dll, весь набор. Использую для склонения должностей в зуп8. Есть словарь исключений. Подключил его по инструкции. В коде проверяю активный словарь - все правильно. Но, когда используются некоторые исключения например, заведующий аптекой, то слово аптекой склоняется. Т.е. словарь вообще никак не работает. |
|
12-04-2012 05:30
04-04-2012 05:19Добрый день,
у меня винда 7-ка. не срабатывает команда regsvr32.exe padeg.dll.
Выдает сообщение: Возможно, модуль "padeg.dll" не совместим с версией Windows,
работающей на данном компьютере. Проверьте совместим ли этот модуль с х86
(32-разрядной) или х64 (64-разрядной) версией regsvr32.exe.
Помогите, пожалуйста.
С уважением,
Даулет |
|
03-04-2012 11:12сообщение от автора материала 2 Саша: Конечно можно. Как? Можно, написать на VBA небольшую функцию, обращающуюся к функциями библиотеки и возвращающую результат. Если более конкретно, то пожалуйста в личку. |
|
03-04-2012 11:05сообщение от автора материала 2 Дмитрий: Даже не знаю что и сказать... Ваш код отработал у меня без проблем. Правда в D3.
А вас не смущает присвоение типа Label4.Caption:=pResult; Ведь TCaption = string; в то время как pResult имеет тип PChar;
Попробуйте так Label4.Caption := StrPas(pResult); |
|
03-04-2012 02:03
05-03-2012 06:18На WinXP SP3, Rad Studio XE после компиляции проекта, padeg.dll стала возвращать перекорёженные слова.
Например Пупкин Иван Ивановичь на выходе получается "упки= ва= вановиg" вместо "Пупкину Ивану Ивановичу"
Что я делаю не так? Или padeg.dll версии 3.3 просто выдаёт текст в какой-то своей кодировке?
Пример кода:
unit Unit2;
interface
uses
Windows, Forms, Controls, StdCtrls, Classes, SysUtils;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
public
end;
var
DllHandle : HMODULE;
GetFIOPadeg : function (pLastName, pFirstName, pMiddleName: PChar;
bSex: Boolean; nPadeg: LongInt; pResult: PChar;
var nLen: LongInt): Integer; stdcall;
Form2: TForm2;
Sex:boolean;
nLen:LongInt;
pResult:PChar;
pVar:integer;
FPadeg:Boolean;
Fio,nName,SName:string;
implementation
procedure TForm2.FormCreate(Sender: TObject);
begin
Fio:='Пупкин';
nName:='Иван';
SName:='Иванович';
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Label1.Caption:=Fio;
Label2.Caption:=nName;
Label3.Caption:=SName;
Sex:=True;
if Assigned(GetFIOPadeg) then
begin
nLen := Length(FIO)+10;
pResult:=StrAlloc(nLen);
try
pVar:=GetFIOPadeg(PChar(Fio),'','',Sex,3, pResult, nLen);
Label4.Caption:=pResult;
finally
StrDispose(pResult);
end;
nLen := Length(nName)+10;
pResult:=StrAlloc(nLen);
try
GetFIOPadeg('',PChar(nName),'',Sex,3, pResult, nLen);
Label5.Caption:=pResult;
finally
StrDispose(pResult);
end;
nLen := Length(sName)+10;
pResult:=StrAlloc(nLen);
try
GetFIOPadeg('','',PChar(SName),Sex,3, pResult, nLen);
Label6.Caption:=pResult;
finally
StrDispose(pResult);
end;
end;
if Sex then
Label7.Caption:='Муж.'
else
Label7.Caption:='Жен.';
end;
initialization
DllHandle := LoadLibrary('padeg.dll');
FPadeg:=True;
if DllHandle <> 0 then
Begin
@GetFIOPadeg := GetProcAddress(DllHandle, 'GetFIOPadeg');
end
else
FPadeg:=False;
finalization
FreeLibrary(DllHandle);
end.
end.
|
|
04-02-2012 07:27Эх. А x64 версии не появилось? А то замучился с IIS а морфер не нра.
Может чем помочь? |
|
21-11-2011 00:142Сергей. Интерфейс нативных библиотек опубликован 1С. Готовых примеров наверно не будет, поэтому писать нужно самому. Я пока не пробовал. |
|
19-11-2011 16:05Как можно прикрутить эту библиотеку к серверу PostgresSql 9.0? |
|
10-11-2011 05:57А как можно адаптировать библиотеку под запуск в 1С 8.2. в тонком клиенте. Там только нативные библиотеки могут запускаться. |
|
10-08-2011 00:34сообщение от автора материала 2 tarakan: GetAppointmentPadeg и добавьте в секцию словаря [NonAdjective] исполняющий |
|
09-08-2011 00:11Никак не могу просклонять "Исполняющий обязанности Начальника". Подскажите при помощи какой функции просклонять правильно эту должность? |
|
16-11-2010 05:33Никак не могу справиться с библиотекой Padeg.dll
В комплекте библиотеки присутствует пример для VBA Excel
в котором реализовано обращение к библиотеке для склонения ФИО
и указано, что "Обращение к другим функциям выполняется аналогично".
Никак не могу подобрать аналогию чтоб всё работало(((
Если не трудно помогите пожалуйста
Интересуют функции:
GetAppointmentPadeg
GetFullAppointmentPadeg
GetOfficePadeg |
|
17-09-2010 09:09Второй день бюсь над тем, что бы прикрутить библиотеку к MS Office 2007, ничего не выходит.
Кто то знает реально ли это или нет? |
|
18-06-2010 06:19Здравствуйте.
В связи с требованиями клиентов по склонению ФИО и должностей в отчетах и шаблонах нам необходимо приобрести библиотеку для автосклонения - padeg.dll и её исходные коды для интеграции в наш продукт GS-Ведомости
Разъясните по прайс листу:
- Лицензия для коммерческого использования Программы - 500 руб РФ
- Корпоративная лицензия для коммерческого использования Программы - 1000 руб РФ
- Исходные тексты *) - 1000 руб РФ
Нас интересует корпоративная лицензия и исходные тексты.
И если мы покупаем корпоративную лицензию и исходные тексты, то имеем ли мы право интегрировать всё это в наш коммерческий продукт. |
|
28-05-2010 12:37Здравствуйте,уважаемые создатели!
А у меня не получилось ёё установить.Сделал всё как написано.При обеспечении работы с сервером автоматизации пытался зарегистрировать dll, выполнив в командной строке: regsvr32.exe padeg. Выдаётся ошибка: "Модуль padeg.dll загружен, но точка входа DllRegisterServer не найдена. Проверьте,что файл padeg.dll является правильным файлом dll или ocx и повторите попытку".
Помогите,пожалуйста...Очень буду признателен
У меня такая же проблема, ОС Windows 7, Delphi 7.
Помогите пожалуйста. |
|
06-04-2010 08:37Скажите пожалуйста, на каких условиях можно использовать Вашу библиотеку в коммерческом продукте? |
|
10-03-2010 01:31сообщение от автора материала в таком случае подскажите, что прописать в файле исключений, чтобы получалось "старшЕй"
Да, есть проблема. Пока предложить ничего не могу, кроме как корректировать возвращаемый результат в вашем коде.
А существует ли версия этой библиотеки откомпилированная под Win64 ?
Нет. |
|
09-03-2010 05:39А существует ли версия этой библиотеки откомпилированная под Win64 ? |
|
15-01-2010 07:23в таком случае подскажите, что прописать в файле исключений, чтобы получалось "старшЕй". я пока добиться этого не смог. |
|
15-01-2010 06:45>> при склонении должности "старшая медстестра" в дательном падеже получается "старшой медсестре" (((
Молодой человек, учите русский. Дательный падеж предполагает вопрос "Кому? Чему?". Что тут кажется нелогичным? :) Разве только слово "старшой" должно быть "старшей". Но, тут наверное, словарь исключений надо задействовать. Я ни разу им пользовался ибо нужды не было. |
|
15-12-2009 01:05при склонении должности "старшая медстестра" в дательном падеже получается "старшой медсестре" ((( |
|
05-11-2009 07:15здравствуйте.
у меня возникла проблема при склонении слово "училище". в родительном падеже мне программа выдает "училище", если можете помогите плизз. |
|
06-10-2009 21:02Спасибо, Док, помогло. Почему-то заменить просто все сплошняком я как-то побоялся, хотя мысль такая была (: |
|
06-10-2009 15:08
06-10-2009 15:08
06-10-2009 01:33Док, у меня такая же проблема, но т.к. я не мастер Delphi, я не понял, где именно и что вы изменили в padegFIO.pas. Буду вам очень признателен, если покажете где или вышлете измененный файл.
Заранее вам благодарен. |
|
23-09-2009 03:39и запрос
select getfiopadeg ('Петров', 'Петр', 'Петрович','м', 2) from rdb$database
приводит к падению сервера :-)
емнип, четвертый аргумент должен быть boolean
|
|
22-09-2009 18:08Смотри-ка, поковырялся в коде padegFIO.pas (да простят мне авторы), сделал явное приведение типов:
1. String --> AnsiString
2. PChar --> PAnsiChar
3. StrAlloc --> AnsiStrAlloc
и все заработало ;)
|
|
22-09-2009 17:50А у меня библиотека некорректно работает при переходе на юникодную D2009. Например такой код:
Memo1.Lines.Add('The CodePage of "GetFIOPadeg" is: ' + IntToStr(StringCodePage(GetFIOPadeg('Иванов','Иван','Иванович',True,2))));
вернет
The CodePage of "GetFIOPadeg" is: 1200
А простая подстановка
Memo1.Lines.Add(GetFIOPadeg('Иванов','Иван','Иванович',True,2));
вообще возвращает пустую строку
ps. dll и pas-файл лежат рядом с экзешником, в uses'ах PadegFIO прописан |
|
09-09-2009 12:27Здравствуйте,уважаемые создатели!
А у меня не получилось ёё установить.Сделал всё как написано.При обеспечении работы с сервером автоматизации пытался зарегистрировать dll, выполнив в командной строке: regsvr32.exe padeg. Выдаётся ошибка: "Модуль padeg.dll загружен, но точка входа DllRegisterServer не найдена. Проверьте,что файл padeg.dll является правильным файлом dll или ocx и повторите попытку".
Помогите,пожалуйста...Очень буду признателен |
|
20-08-2009 04:05замечательная штука!!!!спасибо огромное...вот только множественное число склонять бы надо... |
|
06-08-2009 08:56сообщение от автора материала Попробовал сабж в экселе - склоняет только Иванов Иван Иванович в Иванову Ивану Ивановичу.
Например, Иванов И.И. не склоняет. То есть не работает с инициалами.
Жаль, не показали, как пробовали в Excel. Какую функцию использовали?
Может кто подскажет как модифицировать функцию чтобы она работала с инициалами.
Попробуйте функцию GetFIOPadegFS, если "Иванов И.И." это одна строка. Правда, ей требуется явное указание рода. |
|
05-08-2009 15:12Попробовал сабж в экселе - склоняет только Иванов Иван Иванович в Иванову Ивану Ивановичу.
Например, Иванов И.И. не склоняет. То есть не работает с инициалами.
Может кто подскажет как модифицировать функцию чтобы она работала с инициалами. |
|
04-08-2009 04:26Добрый день
нашел библиотеку функций, очень понравилась
скачал примеры, но... как мне подключить в Firebird в виде UDF?
подскажите ссылку на документы
вариант
DECLARE EXTERNAL FUNCTION GETFIOPADEG
CSTRING(25), CSTRING(25), CSTRING(25), CSTRING(1), SMALLINT
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'GetFIOPadeg' MODULE_NAME 'Padeg.dll'
и запрос
select getfiopadeg ('Петров', 'Петр', 'Петрович','м', 2) from rdb$database
приводит к падению сервера :-) |
|
27-07-2009 06:15Сколько будет стоить полная версия padeg_ua.dll под Delphi и как ее можно приобрести??? Спасибо |
|
23-07-2009 04:17Спасибо за проделанную работу! Очень полезная библиотека! Очень благодарен!!!!!! |
|
09-06-2009 00:59сообщение от автора материала При работе с должностями - "Уборщик служебных помещений" - всё правильно склоняется, а "Вожатый служебных собак" - не получается ("Вожатому служебныху собак" и т.п.)
Добавьте "вожатый" (без кавычек) в секцию [NonAdjective] файла Except.dic |
|
08-06-2009 22:42Написать библиотеку, которая импортирует нужные вам функции из существующей библиотеки, а сама экспортирует точно такие же функции, но с моделью вызова cdecl. А реализация этих функцию проста - они просто будут вызывать одноимённую импортируемую функцию, передавая им в качеств параметров то, что сами получили на вход. Очень просто, разве что немного муторно, если функций много.
Спасибо за идею! |
|
08-06-2009 11:03При работе с должностями - "Уборщик служебных помещений" - всё правильно склоняется, а "Вожатый служебных собак" - не получается ("Вожатому служебныху собак" и т.п.) |
|
08-06-2009 11:02Вы мне предлагаете самому написать библиотеку, включить в нее импортируемые функции из padeg и их же экспортировать как cdecl?
Написать библиотеку, которая импортирует нужные вам функции из существующей библиотеки, а сама экспортирует точно такие же функции, но с моделью вызова cdecl. А реализация этих функцию проста - они просто будут вызывать одноимённую импортируемую функцию, передавая им в качеств параметров то, что сами получили на вход. Очень просто, разве что немного муторно, если функций много. |
|
08-06-2009 05:01А самостоятельно написать обёртку с нужной моделью вызова не судьба?
Вы мне предлагаете самому написать библиотеку, включить в нее импортируемые функции из padeg и их же экспортировать как cdecl? |
|
07-06-2009 07:15Возможно ли перекомпилировать библиотеку под вызов cdecl вместо stdcall? Дело в том, что я подключаю ее в Oracle, а ему только cdecl подавай.
А самостоятельно написать обёртку с нужной моделью вызова не судьба? |
|
07-06-2009 06:53Подключил библиотеку ФИО склоняет, но не могу работать со склонениями должностей. CreateObject("Padeg.Declension") не работает. В чём может быть дело? |
|
03-06-2009 00:38Возможно ли перекомпилировать библиотеку под вызов cdecl вместо stdcall? Дело в том, что я подключаю ее в Oracle, а ему только cdecl подавай. Заранее спасибо! |
|
27-05-2009 08:25При переносе padeg.dll в "Program Files x86" и регистрации оттуда все прошло нормально. |
|
27-05-2009 07:56При попытке зарегистрировать padeg.dll с помощью regsvr32 в WinXP Prof x64 SP2 выдает сообщение "Padeg.dll is not an executable file and no registration helper is registered for this file type". В 32-х битной windows никаких проблем не было. Что делать? |
|
23-04-2009 05:32сообщение от автора материала Если есть должность "Зам. директора", то при склонении, например, в творительном падеже выдает "Зам. директорой", а если "Зам директора" - "Замом директора" (Заместитель -> заместителем) Т.е. проблема в точке?
Запишите в секцию [PointAbbreviation] строку
зам.
Кстати, а вы используете файл исключений? В поставляемом она уже есть.
|
|
22-04-2009 06:37Если есть должность "Зам. директора", то при склонении, например, в творительном падеже выдает "Зам. директорой", а если "Зам директора" - "Замом директора" (Заместитель -> заместителем) Т.е. проблема в точке? |
|
23-03-2009 06:46при использовании библиотеки в приложении
когда выходишь из ПО выдает ошибку invalid pointer operation
в чем может быть дело |
|
13-03-2009 04:36Большое спасибо!!!Но, как уже говорил, вместо этого можно просто выделить нужное слово из строки ФИО. Применять ее имеет смысл в случаях, когда имеется признак рода (оглы, кызы), который может записываться как через дефис, так и через пробел.
|
|
13-03-2009 02:39сообщение от автора материала опять не понял
мне надо сначала каждому занчению
nLastName, nFirstName, nMiddleName : LongInt; задать размер памяти
а далее как вызвать
implementation
type
PPartsFIO = ^TPartsFIO;
TPartsFIO = record
pLastName, pFirstName, pMiddleName : PChar;
nLastName, nFirstName, nMiddleName : LongInt;
end;
function GetFIOParts(pFIO:PChar; Parts: PPartsFIO): Integer; stdcall;
external 'padeg.dll' Name 'GetFIOParts';
procedure TForm1.Button1Click(Sender: TObject);
var
Parts : TPartsFIO;
CallResult : Integer;
begin
with Parts do begin
try
nLastName := 50;
nFirstName := 50;
nMiddleName := 50;
pLastName := StrAlloc(nLastName);
pFirstName := StrAlloc(nFirstName);
pMiddleName := StrAlloc(nMiddleName);
CallResult := GetFIOParts(PChar(Edit1.Text), @Parts);
if CallResult = 0 then begin
Label1.Caption := StrPas(pLastName);
Label2.Caption := StrPas(pFirstName);
Label3.Caption := StrPas(pMiddleName);
end
else Label1.Caption := IntToStr(CallResult);
finally
StrDispose(pLastName);
StrDispose(pFirstName);
StrDispose(pMiddleName);
end;
end;
end;
Но, как уже говорил, вместо этого можно просто выделить нужное слово из строки ФИО. Применять ее имеет смысл в случаях, когда имеется признак рода (оглы, кызы), который может записываться как через дефис, так и через пробел. |
|
12-03-2009 09:38не могу разобраться с function GetFIOParts
как ее использовать
Эта функция выделяет из ФИО составляющие и возвращает их в следующей структуре
type
PPartsFIO = ^TPartsFIO;
TPartsFIO = record
pLastName, pFirstName, pMiddleName : PChar;
nLastName, nFirstName, nMiddleName : LongInt;
end;
Объявление функции следующее
function GetFIOParts(pFIO: PChar; Parts: PPartsFIO): Integer; stdcall; export;
Перед вызовом функции и передачей ей параметром указателя на структуру, нужно выделить небходимую память под возвращаемые значения и записать размеры в соответствующие поля.
В принципе, можно просто воспользоваться функцией ExtractWord() из модуля StrUtils.
опять не понял
мне надо сначала каждому занчению
nLastName, nFirstName, nMiddleName : LongInt; задать размер памяти
а далее как вызвать
|
|
12-03-2009 09:09Перекомпилировать надо все. У меня пока нет x-64 компилятора с Delphi (даже поставить не где). Подождите до марта, будет машина.
На дворе март, не появилась возможность скомпилировать 64-разрядную библиотеку с оберткой? |
|
12-03-2009 07:34сообщение от автора материала не могу разобраться с function GetFIOParts
как ее использовать
Эта функция выделяет из ФИО составляющие и возвращает их в следующей структуре
type
PPartsFIO = ^TPartsFIO;
TPartsFIO = record
pLastName, pFirstName, pMiddleName : PChar;
nLastName, nFirstName, nMiddleName : LongInt;
end;
Объявление функции следующее
function GetFIOParts(pFIO: PChar; Parts: PPartsFIO): Integer; stdcall; export;
Перед вызовом функции и передачей ей параметром указателя на структуру, нужно выделить небходимую память под возвращаемые значения и записать размеры в соответствующие поля.
В принципе, можно просто воспользоваться функцией ExtractWord() из модуля StrUtils.
|
|
12-03-2009 07:33
Можно ли сделать как-то, чтобы библиотека не изменяла строчные буквы на прописные.
Скармливаю ей ИВАНОВ Иван Иванович (так требует начальство в написании), а она возвращает
Иванову Ивану Ивановичу.
Можно ли это как-то обойти?
К сожадению, порадовать вас не могу - средствами библиотеки в ее нынешнем виде не получится. Первое, что приходит на ум это сделать примерно так (результат в строке S)
Это вариант понятен, просто усложняет создание документов.
А планируется ли в новой версии как-нить это учесть? Если да, то когда можно ждать новую версию.
Спасибо в любом случае!! |
|
12-03-2009 07:14сообщение от автора материала Можно ли сделать как-то, чтобы библиотека не изменяла строчные буквы на прописные.
Скармливаю ей ИВАНОВ Иван Иванович (так требует начальство в написании), а она возвращает
Иванову Ивану Ивановичу.
Можно ли это как-то обойти?
К сожадению, порадовать вас не могу - средствами библиотеки в ее нынешнем виде не получится. Первое, что приходит на ум это сделать примерно так (результат в строке S)
S := AnsiUpperCase(Copy(S, 1, Pos(' ', S)-1)) + Copy(S, Pos(' ', S), Length(S)); |
|
12-03-2009 06:50не могу разобраться с function GetFIOParts
как ее использовать
постаянно выдает ошибку |
|
11-03-2009 16:26Добрый день!
Классная библиотека! Спасибо за такую вещицу!
Есть вопрос.
Можно ли сделать как-то, чтобы библиотека не изменяла строчные буквы на прописные.
Скармливаю ей ИВАНОВ Иван Иванович (так требует начальство в написании), а она возвращает
Иванову Ивану Ивановичу.
Можно ли это как-то обойти?
Еще раз спасибо |
|
27-01-2009 14:37
12-01-2009 15:48
12-01-2009 03:35сообщение от автора материала >>>Потому что они предназначены для РАЗНЫХ целей.
Какой был бал! Накал движенья, звука, нервов!
Сердца стучали на три счета вместо двух.
Это про логику, двоичную и троичную. :-)
...
Через отчаянье, молчанье, тишину
Спешила женщина прийти на помощь к нам,-
Их бальный зал - величиной во всю страну.
В. Высоцкий
Чесслово, спорить не о чем . Пусть будет пост Елены эпилогом.
|
|
12-01-2009 03:12>>> Возьмем другую фамилию — Козел <...>
Для разрядки "международной" напряженности физтеховская байка с этой фамилией (физтеховская -- МФТИ).
Был у нас прподаватель по Физике по фамилии Козел (достаточно известный, кстати; автор задачника по физике). И вот однажды в сессию, студент после сдачи экзамена заходит в туалет. Там его встречает приятель и спрашивает:
-- Ну как? Сдал?
-- Да ну его... Задолбал этот козёл!
А из закрытой кабинки вдруг раздается голос
-- Во-первых, не козёл, а Козел. А во-вторых, Козел -- это я. |
|
12-01-2009 03:02сообщение от автора материала >>>Сергей, еще раз хотелось бы спросить.
Перекомпилировать надо все. У меня пока нет x-64 компилятора с Delphi (даже поставить не где). Подождите до марта, будет машина. |
|
12-01-2009 03:02Я не совсем понимаю, о чем идет спор. Больше похоже на разборку, честное слово.
Что-то такое всплыло из детства: "кто сильнее, слон или кит?" Ответ, как всегда, зависит от обстоятельств, то есть от условий применения.
"Склонятель", безусловно склоняет все подряд. Замечательно.
Padeg склоняет только ФИО и небольшой ряд имен нарицательных (должности и подразделения).
Что из них универсальнее? Наверное "Склонятель", если бы не одно "но".
Для имен нарицательных и фамилий правила склонения в русском языке РАЗНЫЕ. И если мне нужно в программе документооборота склонять фамилии, то зачем мне универсальность? Мне нужно совсем немного — ПРАВИЛЬНОЕ склонение только ФАМИЛИЙ.
С фамилией Заяц все еще не так явно. Возьмем другую фамилию — Козел (ударение на первый слог). Фамилия не такая уж и редкая, у нее польские корни, древний источник фамилии — животное козёл.
В России такая фамилия транспонировалась в Козлова, на Украине в Козлюка, в Белоруссии в Козленка, в Польше в Козела. "Склонятель" эту фамилию склоняет так же, как и название животного "козёл". И я бы не стала его использовать в программе документооборота.
Неправильно сравнивать эти два продукта. Нельзя сказать, что один лучше, чем другой. Потому что они предназначены для РАЗНЫХ целей.
|
|
12-01-2009 02:37Сергей, еще раз хотелось бы спросить.
Чтобы использовать padeg.dll под MS SQL x64 , достаточно перекомпилировать под эту платформу лишь обёртку "xp_padeg" или сама библиотека padeg.dll тоже должна быть 64 разрядной? |
|
12-01-2009 01:13сообщение от автора материала >>> Спасибо, что признали это.
Делайте правильные выводы. Еще раз: "Универсальное склонении слов для Фамилий не есть правильно".
>>> А я ставлю перед собой такую цель. В этом разница между мной и Вами.
Вот и плучаете Айгуль среднего рода.
>>> Я имел в виду дискуссию на ЖЖ. Не льстите себе, Сергей ;)
Рад за вас. Про дискуссии ниже.
>>> Вы настаиваете на том, что склонение фамилии Заяц как Заяца – единственно правильный вариант. Именно в этом я с Вами не согласен. Мнение аспирантов из «справочной службы» для меня не более веско, чем мнение профессоров из следующей подборки мнений о склонении фамилии Заяц:
Я, ваша подборка http://www.des.kubannet.ru/index.php/des/content/view/full/2722/
"Однако, если фамилия созвучна с названием животного или предмета неодушевлённого, нередко в этих случаях сохраняют фамилию в начальной форме (Заяц, Гусь, Ремень, Жук Сергею Петровичу; Волга Екатерине Романовне и т. п.) или вносят изменения с беглым гласным при склонении Гребень – Гребеню (а не Гребню) – Гребеню Леониду Кирилловичу."
и Словарь ударений для работников радио и телевидения, Москва, изд. "Русский язык", 1984 г.
>>> Суммируя эту подборку, получаем следующий набор мнений:
Это прекрасно. Ваши выводы перлы для баша. Два мнения "правильных", одно предпочтительное (надо полагать оно правильнее правильного) и последнее для сомневающихся.
Ну и что после этого ваш "ожидаемый результат" и проценты?
>>> Есть, кстати, ещё и пятое мнение, которого, по моему опыту, придерживается 99.9% населения России. Это мнение: «а какая разница? Как ни напиши, заяц он и будет заяц».
99,9(9)% населения всё равно ВСЁ!
"Зеленый фургон":
- Цепи же ни чьи.
- Это общественные цепи!
- Вот я и говорю: ни чьи.
Совета спрашивают для того что бы было кого винить после неудачи или для того что бы поступить наоборот. Жалко, не мои слова.
Приоткрою вам правду. Существует еще мнение (и не одно) - носитель фамилии. Мнение это отметет мнения профессоров и аспирантов.
>>> Так что любой «борец за истину» оказывается в меньшинстве.
Рад, что вы это узнали, только истина от этого не меняется.
>>> Как видим, логика тут совсем не бинарная.
Знаю еще троичную логику, но и там результат операций "истина" или "ложь". Все остальное умозаключения.
>>> Поэтому я ... не считаю справедливым начислять баллы...
Мы уже поняли - предпочитаете начислять проценты!
P.S. Еще раз: для поисковых систем возьму вашу склонялку, для склонения ФИО свою, хотя бы для того, чтобы не обидеть Айгуль Александровну средним родом. |
|
11-01-2009 23:36>> "Склонятель" универсальнее "Padeg.dll", такое возможно
Спасибо, что признали это.
>> потому как мы не ставили себе цели склонять все подряд.
А я ставлю перед собой такую цель. В этом разница между мной и Вами.
>>> >>> Тем не менее, дискуссия получилась весьма продуктивной – удалось прояснить ...
>>> Я рад, что наши скромные знания помогли расширить Ваш кругозор. :-)
Я имел в виду дискуссию на ЖЖ. Не льстите себе, Сергей ;)
Про заек.
Вы настаиваете на том, что склонение фамилии Заяц как Заяца – единственно правильный вариант. Именно в этом я с Вами не согласен. Мнение аспирантов из «справочной службы» для меня не более веско, чем мнение профессоров из следующей подборки мнений о склонении фамилии Заяц:
http://morpher.ru/Zayats.aspx
Суммируя эту подборку, получаем следующий набор мнений:
1. Правильно – Зайцу.
2. Правильно – Заяцу.
3. Предпочтительнее Заяцу, чем Зайцу.
4. Фамилия не склоняется.
Есть, кстати, ещё и пятое мнение, которого, по моему опыту, придерживается 99.9% населения России. Это мнение: «а какая разница? Как ни напиши, заяц он и будет заяц». Так что любой «борец за истину» оказывается в меньшинстве.
Как видим, логика тут совсем не бинарная. Поэтому я как разработчик методики тестирования алгоритмов склонения не считаю справедливым начислять баллы тому или иному алгоритму за приверженность к одному из вариантов. Вот если бы в случае, когда на предприятии работают два Зайца и один предпочитает склонять как Заяцу, а другой предпочитает не склонять, алгоритм позволял бы указать, как именно склонять фамилию каждого из этих сотрудников, тогда я бы с чистым сердцем поставил бы этому алгоритму +15 баллов (3 варианта склонения * число косвенных падежей). А так эти баллы не достаются никому. Я сказал. Как разработчик методики. Если у Вас есть желание оспорить – разработайте собственную методику, напишите программу тестирования, составьте тесты, проведите тестирование и опубликуйте результаты. Вот тогда и поспорим.
С уважением.
|
|
11-01-2009 15:49Небольшая ремарка в тему.
Словарь ударений для работников радио и телевидения, Москва, изд. "Русский язык", 1984 г.
Раздел "Имена собственные", стр. 586, второй столбец, 17-я строка снизу:
"Заяц Анатолий, Заяца Анатолия" |
|
11-01-2009 04:24сообщение от автора материала >>> Продолжаем разговор…
Хорошо, продолжим...
>>> «предназначен для склонения всего» = универсальнее, не так ли?
>>> «более "остро заточен"» = менее универсален, не так ли?
НЕТАК! Вы опять сделали не верные выводы.
Где там слово "алгоритм"?
Заметьте "Склонятель" и "Padeg.dll", т.е. конкретные реализации каких-то алгоритмов.
"Склонятель" универсальнее "Padeg.dll", такое возможно, потому как мы не ставили себе цели склонять все подряд.
>>> Я отлично понимаю, что некоторые носители фамилии Заяц считают обидным ...
Отлично, что понимаете...
>>> В итоге эту фамилию склоняют и так, и так. Говорить о «правильности» того или иного варианта можно до хрипоты,
В итоге фамилия не теряет гласную.
>>> но чтобы не ломать на пустом месте копья, я исключил эту фамилию (вместе с Киричек) из базы тестов.
Почему же на пустом, вот ответ "справочной службы русского языка" (http://www.gramota.ru):
При склонении мужских фамилий с беглой гласной принято оставлять беглую гласную: _Иван Заяц — с Иваном Заяцем, об Иване Заяце_.
ЗАНАВЕС!
Нами рассматривались такие приоритеты вариантов склонения: с начала правило со ссылкой на источник, а уж затем мнение носителя фамилии.
>>> Вы поддерживаете моё решение исключить эти фамилии из базы тестов?
Нет, не поддерживаю.
По двум причинам.
1. Для меня это не спорные варианты.
2. Надо улучшать продукты, а не подгонять методику под них.
Мое предложение сделать правильным "ожидаемый результат".
>>> Что я ещё могу для Вас сделать в отношении фамилии Заяц?
Для меня ни чего, мне истина дороже.
>>> Ай, как нехорошо! Выкидывать два предложения из середины абзаца и представлять склейку в виде цитаты.
Да неужели?! Стремление избегать оверквотинга теперь так трактуется?
Не "выкидывать", а заменять многоточием.
Я, что удалил Ваш предыдущий пост? Там каждый желающий может всё видеть во всей красе.
>>> Тем не менее, дискуссия получилась весьма продуктивной – удалось прояснить ...
Я рад, что наши скромные знания помогли расширить Ваш кругозор. :-)
>>> А что за анекдот? :)
:-) Ну там еще советами за(пи-и-и).. мучают.
>>> У обеих программ заявлена функция «склонение ФИО, представленного одной строкой, с автоматическим определением рода».
>>> Именно эта функция и тестировалась. То, что у каждой из программ есть функциональность, которой нет у другой программы, для данного тестирования не имеет значения.
Вот только полностью наш функционал у вас задействовать не получилось.
>>> В нашем случае всё проще – жизнь покажет, чья утка лучше летает.
Спросим у "жизни"? Спасибо, я два раза на одни грабли не наступаю. Лучше так: "Господи, дай знак чья лучше".
P.S. Все это мне напоминает настоящий спор за газ между Украиной и Россией и старую гусарскую привычку меряться не самыми длинными частями тела. |
|
06-01-2009 21:43Сергей,
Продолжаем разговор…
>>>>>>мой алгоритм склонения универсальнее Вашего
>>> Я такого не говорил. Цитата: "Методика основана на универсальном склонении слов".
Цитата (Ваша):
>>> "Склонятель" предназначен для склонения всего в этом его сила и в этом же его слабость.
>>> Padeg.dll более "остро заточен".
«предназначен для склонения всего» = универсальнее, не так ли?
«более "остро заточен"» = менее универсален, не так ли?
>>> Я это о том, что ваша методика не различает двух зайцев (зверя и человека).
Методика здесь совершенно ни при чём. «Склонятель» не различает нарицательное заяц и фамилию Заяц только потому, что мне (и не только мне) так удобнее склонять эту фамилию. В остальном нарицательные от собственных «Склонятель» вполне различает – попробуйте, например, Любовь и любовь, Майя и майя (народ). http://morpher.ru
Я отлично понимаю, что некоторые носители фамилии Заяц считают обидным склонение её как нарицательного, полагая, что это уподобляет их животному. В итоге эту фамилию склоняют и так, и так. Говорить о «правильности» того или иного варианта можно до хрипоты, но чтобы не ломать на пустом месте копья, я исключил эту фамилию (вместе с Киричек) из базы тестов.
Результаты тестов обновлены: http://morpher.ru/Competition
Вы поддерживаете моё решение исключить эти фамилии из базы тестов? Если нет, предложите своё. Что я ещё могу для Вас сделать в отношении фамилии Заяц?
>>> Так Вы и придумывали: "База составлялась мной вручную, ... что мне не совсем удалось"
Ай, как нехорошо! Выкидывать два предложения из середины абзаца и представлять склейку в виде цитаты. Старый, низкий трюк! Я был о Вас лучшего мнения, Сергей ;)
>>> P.S. Меня умилило ваше стремление спросить совета у народа. Сразу вспомнился анекдот про бабу на площади. :-)
Тем не менее, дискуссия получилась весьма продуктивной – удалось прояснить ударение в некоторых фамилиях (Журавель, Шишкатенок и др.) и сформулировать общий принцип, по которому та или иная из возможных косвенных форм оказывается более частотной – «принцип выводимости именительного падежа».
А что за анекдот? :)
>>>Я пытаю донести до вас мысль, что у программ все-таки несколько различные направления: склонение ФИО и склонение вообще.
У обеих программ заявлена функция «склонение ФИО, представленного одной строкой, с автоматическим определением рода». Именно эта функция и тестировалась. То, что у каждой из программ есть функциональность, которой нет у другой программы, для данного тестирования не имеет значения.
Универсальность или специализированность – тема для философской дискуссии. В нашем случае всё проще – жизнь покажет, чья утка лучше летает. :)
С уважением,
Сергей
|
|
06-01-2009 13:53сообщение от автора материала Здравствуйте, Сергей!
>>>мой алгоритм склонения универсальнее Вашего
Я такого не говорил. Цитата: "Методика основана на универсальном склонении слов".
Я это о том, что ваша методика не различает двух зайцев (зверя и человека). Padeg.dll зверей не пытается склонять.
Вы же не знакомы с нашим алгоритмом.
>>>Тестовая база известна и выложена на той не странице, вместе с исходным кодом программы тестирования. Проверяйте на здоровье.
>>>Я тоже мог бы придумать тысячу отговорок,
Так Вы и придумывали: "База составлялась мной вручную, ... что мне не совсем удалось". Только боюсь, что мы так ни до чего не договоримся.
Проблема ударения реально существующая, просто Вы об этом наверно не знали.
>>> Всем тестируемым сервисам давалось одинаковое количество информации. Указание пола для одного сервиса и неуказание для другого поставило бы один из сервисов в более выгодное положение.
А еще говорите, методика не зависит от алгоритма. Методика это в т.ч. и набор входных данных, а входные данные представлены как удобно Вашей склонялке.
>>> 2. "Заяц Владимир Владимирович"
>>> Да, фамилия неоднозначная, и именно таких я старался избегать при составлении базы тестов.
По прямой ездить все мастера.
>>> у меня лично не поворачивается язык сказать «Заяца».
Склоняем все-таки людей, а не зверей. Ниже у вас про тоже.
>>> 23 против 16 «Склонятеля».
Да, на асфальте Феррари быстрее.
>>> С каких пор универсальность стала слабостью? Слабость или силу алгоритма может показать только объективное тестирование.
Думаю, со дня сотворения мира. Утка - универсальная штука, плавает, летает и даже ходит, но все это делает "не хорошо" оттого и утка.
Я пытаю донести до вас мысль, что у программ все-таки несколько различные направления: склонение ФИО и склонение вообще.
Совет: относитесь к склонению фамилий как к живому общению. У некоторых носителей склонение их фамилий особо мягкое место.
Отсюда у нас не решенная проблема с ударением и файл исключений.
P.S. Меня умилило ваше стремление спросить совета у народа. Сразу вспомнился анекдот про бабу на площади. :-)
Удачи.
|
|
06-01-2009 11:38
Добрый день, Сергей!
Спасибо за подробный ответ. Позволю себе в прокомментировать Ваши ответы.
>>> Методика тестирования основана на универсальном склонении слов, что для Фамилий не есть правильно.
Да, мой алгоритм склонения универсальнее Вашего - и что? Методика тестирования никак не зависела от алгоритмов, реализуемых сервисами склонения, она лишь сравнивала выходной результат с правильным.
>>> А откуда брался "Ожидаемый результат"?
Из базы тестов. База составлялась мной вручную, поэтому возможны некоторые неточности. Явных ошибок в базе я пока не вижу, см. мои комментарии далее. Я также старался избегать неоднозначно склоняемых фамилий, что мне не совсем удалось.
>>> Поскольку неизвестна тестовая база ФИО то и проценты вызывают сильное сомнение.
Тестовая база известна и выложена на той не странице, вместе с исходным кодом программы тестирования. Проверяйте на здоровье.
>>> В основном все ошибки нашей padeg.dll состоят в "е" или "о" после "ч". Как уже неоднократно говорилось связано это с ударением.
Я тоже мог бы придумать тысячу отговорок, почему в алгоритме склонения есть ошибки – фаза луны не та и вообще финансовый кризис. Если Вам лень составлять словарь исключений – это проблемы Ваших пользователей.
>>> "Кассу Ахмад-Рамез Маджед" склоняется правильно (!) если использовать функции с явным указанем рода
Всем тестируемым сервисам давалось одинаковое количество информации. Указание пола для одного сервиса и неуказание для другого поставило бы один из сервисов в более выгодное положение.
>>> 2. "Заяц Владимир Владимирович"
Да, фамилия неоднозначная, и именно таких я старался избегать при составлении базы тестов. Извините, проглядел. Однако, у меня лично не поворачивается язык сказать «Заяца». Обсуждение таких фамилий было здесь: http://community.livejournal.com/pishu_pravilno/3472961.html
Хорошо, этот пример исключаем из базы как неоднозначный. Минус 5 ошибок.
>>> 3. "Киричек Александр Васильевич"
Тоже вызывает сомнения, исключаем. Минус ещё 5 ошибок.
>>> 4. "Раудмец Иван Иванович"
Вы сами-то можете произнести «Раудмца»? Подсказка: если перед -ЕЦ более одной согласной, то Е не выпадает: Беглец, Игрец, Жнец. Обусловлено фонетическими законами. Верно как для собственных, так и для нарицательных.
Итого -10 ошибок, всего 23 против 16 «Склонятеля».
>>> Позволю себе подвести итог "Склонятель" предназначен для склонения всего в этом его сила и в этом же его слабость.
Неужели? ;) С каких пор универсальность стала слабостью? Слабость или силу алгоритма может показать только объективное тестирование.
Мой вывод из проведённого тестирования таков: качество склонения алгоритмов «Склонятель» и Padeg.dll сравнимо на предложенном наборе тестов (ФИО).
Скоро опубликую результаты сравнения для профессий... подсказка: исправьте «Водителя трамвую» ;)
Всего хорошего.
Сергей Слепов
|
|
06-01-2009 03:49To PGL (На Ваш ответ от 25-11-2008 01:06.
Я протестировал использование функции NominFromShort([S1, S2]) для определения именительного падежа встречающихся в тексте фамилий с сокращенными именем и отчеством. В принципе, функция работает, но не на всех фамилиях.
Есть следующие замечания:
1. "Петрову петрова". Если одна из фамилий начинается с прописной буквы, то функция возвращает пустую строку. Впрочем, возможно, так и было задумано.
2. Не у всех фамилии правильно определяется именительный падеж. Например, сочетание "Дмитрюка С.В., Дмитрюком С.В.". Результат не определяется. При разборе определилось, что в 1-ом случае получалось:
Дмитрюк = NominAsMale (Дмитрюка С.В.)
Дмитрюка = NominAsFemale (Дмитрюка С.В.)
во втором случае:
Дмитрюкий = NominAsMale (Дмитрюком С.В.)
Дмитрюком = NominAsFemale (Дмитрюком С.В.)
Как видно, во втором случае при преобразовании в им. падеж функцией NominAsMale произошла ошибка. Поэтому и ошибочный выходной результат.
Подобная ошибка, по-видимому, получается и при преобразовании фамилии Винник.
|
|
06-01-2009 02:32сообщение от автора материала Интересное сравнение и отличный маркетенговый ход, но не более того...
Почему:
Методика тестирования основана на универсальном склонении слов, что для Фамилий не есть правильно.
А откуда брался "Ожидаемый результат"?
Поскольку неизвестна тестовая база ФИО то и проценты вызывают сильное сомнение.
В основном все ошибки нашей padeg.dll состоят в "е" или "о" после "ч". Как уже неоднократно говорилось связано это с ударением.
Что нельзя считать за ошибки:
1. "Кассу Ахмад-Рамез Маджед" склоняется правильно (!) если использовать функции с явным указанем рода, напр. GetFioPadeg. Функция автоматического определения рода в данном случае сообщает о неспособности определить род, что и правильно для фамилий (ну нет человеческих существ в среднем роде :-) ). В таких случаях при обработки результата вызова ф-ции автоопределения рода можно принудительно указать мужской.
"Склонятель" в этом случае ведь тоже ошибается:
Кассу Рамез Маджед Оглы
Род, число: средний род (и это для фамилий-то!!!), единственное число
кто, что? Кассу Рамез Маджед Оглы
кого, чего? Кассу Рамез Маджед Оглы
кому, чему? Кассу Рамез Маджед Оглы
кого, что? Кассу Рамез Маджед Оглы
кем, чем? Кассу Рамез Маджед Оглы
о ком, о чём? о Кассу Рамез Маджед Оглы
И что самое интересное:
Кассу Айгуль Маджед Кызы
Род, число: мужской род, единственное число
кто, что? Кассу Айгуль Маджед Кызы
кого, чего? Кассу Айгуля Маджеда Кызы
кому, чему? Кассу Айгулю Маджеду Кызы
кого, что? Кассу Айгуля Маджеда Кызы
кем, чем? Кассу Айгулем Маджедом Кызы
о ком, о чём? о Кассу Айгуле Маджеде Кызы
И на "Семенович Айгуль Александровна" "Склонятель" тоже спотыкается (на имени). Padeg.dll в этом случае точен.
Могу предположить что на "восточных" женских ФИО "Склонятель" просто завалется.
2. "Заяц Владимир Владимирович" в Padeg.dll по правилам склонения фамилий (!) склоняется правильно как и Камень, как и Кремень. С точки зрения склонения слов это конечно ошибка.
3. "Киричек Александр Васильевич" в Padeg.dll по правилам склонения фамилий (!) склоняется правильно.
4. "Раудмец Иван Иванович", в Padeg.dll по правилам склонения фамилий (!) склоняется правильно как и Радунец, как и Данилец.
Всего осталось 15 явных ошиибок из 33. Вдвое.
Позволю себе подвести итог "Склонятель" предназначен для склонения всего в этом его сила и в этом же его слабость.
Padeg.dll более "остро заточен".
С другой стороны в моей практике ну ни разу не приходилось склонять в программных пролуктах что-то неодущевленное кроме
должностей и подразделений, в этом чаще требовалось склонение числительных, но оно полностью устраивало в "сумме прописью".
С третьей стороны развитие полнотекстовых поисковых систем требует склонения всего и вся.
Вот для поисковой системе я бы взял "Склонятель".
|
|
05-01-2009 21:30Добрый день!
Думаю, пользователям и авторам данной библиотеки будет интересно её сравнение с другими подобными разработками:
http://morpher.ru/Competition/
Библиотека показала себя очень хорошо.
|
|
22-12-2008 06:56А кто-нибудь пробовал к Python-у библиотечку прикрутить? Что-то никак не осилю, функции GetSex, GetPadegID работают нормально, остальные никак... Access violation... Если кто делал, поделитесь примером, будьте добры! |
|
16-12-2008 07:21Присоединяюсь к пожеланию Андрея от 09-12-2008 04:50... Очень нужно обертку для SQL в х64. Будем надеяться, что это возможно. В любом случае, огромное спасибо за работу. Смог оценить библиотеку на SQL2000 - потрясающе. |
|
09-12-2008 04:50Добрый день! Вопрос к разработчикам.
А нельзя выложить скомпилированную библиотеку для её использования в MS SQL 2005 x64 ? В 32-х разрядном варианте она подключается, но к сожалению не работает. |
|
07-12-2008 14:20На самом деле очень жаль что столь сильная и полезная утилита не поддерживает украинский язык. Ведь основная работа проделана, осталось просто взять украиский учебник и за пару часов подредактировать правила, ведь все очень похоже. Лично я, даже готов заплатить :) Сообщение не подписано |
|
25-11-2008 01:06сообщение от автора материала 2 tar4
То, что "Документы небольшие по объему (на несколько страниц)", боюсь, мало что даст, а вот что "Фамилии по тексту, могут встречаются несколько раз и в различных склонениях." уже интересно.
Попробуйте проверить такой код.
function NominAsMale(F: String): String;
const
IOMale : array[1..6] of String = (
'Иван Иванович', 'Ивана Ивановича', 'Ивану Ивановичу',
'Ивана Ивановича', 'Иваном Ивановичем', 'Иване Ивановиче');
var
S1, S2, S3, S4 : String;
i, j : Integer;
begin
Result := '';
for i:=1 to 6 do begin
S1 := F + ' ' + IOMale[i];
S2 := GetNominative(S1);
for j:=1 to 6 do begin
S3 := GetFIOFromStr(S2,'м',j);
if (S1 = S3) then begin
S4 := ExtractWord(1, S2, [' ']);
if Pos(S4 + ' ', Result) = 0 then Result := S4 + ' ' + Result;
end;
end;
end;
Result := ExtractWord(1, Result, [' ']);
end;
function NominAsFemale(F: String): String;
const
IOFemale : array[1..6] of String = (
'Ивана Ивановна', 'Иваны Ивановны', 'Иване Ивановне',
'Ивану Ивановну', 'Иваной Ивановной', 'Иване Ивановне');
var
S1, S2, S3, S4 : String;
i, j : Integer;
begin
Result := '';
for i:=1 to 6 do begin
S1 := F + ' ' + IOFemale[i];
S2 := GetNominative(S1);
for j:=1 to 6 do begin
S3 := GetFIOFromStr(S2,'ж',j);
if (S1 = S3) then begin
S4 := ExtractWord(1, S2, [' ']);
if Pos(S4 + ' ', Result) = 0 then Result := S4 + ' ' + Result;
end;
end;
end;
Result := ExtractWord(1, Result, [' ']);
end;
function NominFromShort(F: array of String): String;
var
i : Integer;
Match : Boolean;
begin
Result := '';
Match := True;
for i:=0 to High(F)-1 do
if NominAsMale(F[i]) <> NominAsMale(F[i+1]) then Match := False;
if Match then begin
Result := NominAsMale(F[0]);
Exit;
end;
Match := True;
for i:=0 to High(F)-1 do
if NominAsFemale(F[i]) <> NominAsFemale(F[i+1]) then Match := False;
if Match then Result := NominAsFemale(F[0])
else Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
var S1, S2 : String;
begin
S1 := ExtractWord(1, Edit1.Text, [' ']);
S2 := ExtractWord(2, Edit1.Text, [' ']);
Edit2.Text := NominFromShort([S1, S2]);
end;
Сильно не тестировал, но если в Edit1 имеются две фамилии в разных падежах, то, вроде, восстанавливает. Подчеркиваю, именно фамилии, инициалы надо обрезать. Возможно здесь потребуется доработка, но в качестве "блованки", думаю, подойдет. Буду признателен, если сообщите результат. |
|
20-11-2008 23:48Обсуждение функции GetNominativePadeg при использовании "короткого имени" (фамилия и сокращенные имя и отчество, типа Сидоров С.А.).
Функция корректно работает на полном имени (фамилия, имя, отчество), но в случае использования "короткого имени", именительный падеж фамилии не восстанавливает. Впрочем, это и понятно. Отчества нет и определить род фамилии не представляется возможным. Пробовал восстановить именительный падеж через функцию GetFIOPadeg; при этом указывал и род фамилии и падеж, но без результата.
В в задаче, которую я решаю в данный момент, в неструктурированном тексте выделение фамилий и восстановление именительного падежа. Вот только ФИО, в основном, представлены в "коротком варианте". Но есть и отличительные моменты:
1. Документы небольшие по объему (на несколько страниц)
2. Фамилии по тексту, могут встречаются несколько раз и в различных склонениях.
Можно ли как-то использовать эти обстоятельства, чтобы все же использовать функции библиотеки для корректного восстановления именительного падежа "короткого имени"?
Например, анализ склонения нескольких вариантов написания одной и той же фамилии?
Или выделение "зависимого" от фамилии слова (или слов) и определение рода с последующим восстановлением именительного падежа "короткого имени"? |
|
20-11-2008 00:54Это было первое что я сделал. Даже StrAlloc заменил на AnsiStrAlloc.
все равно кракозябры
var
DllHandle : HMODULE;
GetPadeg : function(pFIO: PAnsiChar; nPadeg: LongInt; pResult: PAnsiChar;
var nLen: LongInt): Integer; stdcall;
procedure TfTRBase.PrintForDir;
var
pResult : PAnsiChar;
nLen, i : Integer;
begin
nLen := Length(form1.BreakFilial) + 10;
pResult := AnsiStrAlloc(nLen);
i := GetPadeg(PAnsiChar(form1.BreakFilial),4,pResult, nLen);
if form1.BreakFilType ='Ф' then
filstr:= 'Директор ' + StrPas(pResult) +' филиала '
выдает
"Директор @ > = = 8 f : 8 9 филиала " |
|
19-11-2008 10:53Народ, не подскажете как использовать функцию в Delphi 2009??
Вместо PChar везде писать PAnsiChar, вместо string - AnsiString. |
|
19-11-2008 10:50Народ, не подскажете как использовать функцию в Delphi 2009??
var
pResult : PChar;
nLen, i : Integer;
begin
nLen := Length(form1.BreakFilial) + 10;
pResult := StrAlloc(nLen);
i := GetPadeg(PChar(form1.BreakFilial),4,pResult, nLen);
filstr:= 'Руководитель ' + StrPas(pResult);
раньше работала на ура.а теперь с их опддержкой юникода выдает кракозябры (((.. |
|
02-09-2008 05:35var
pAppointment: PChar;
nLen: LongInt;
Appointment, Office : string;
begin
nLen := 250;
GetMem(pAppointment, nLen);
Appointment := 'редактор литературный';
Office := 'редакция фотоинформации';
GetFullAppointmentPadeg(PChar(Appointment),PChar(Office),2,pAppointment,nLen);
MessageDlg(pAppointment,mtInformation, [mbOk], 0);
end;
На выходе получаем 'редактора литературный редакции фотоинформации'
P.S. Спасибо что Вы есть. Чудесная библиотека. |
|
02-09-2008 03:41сообщение от автора материала 2 Алексей.
Да, как оказалось, есть такая проблема. Ее причина, в принципе, понятна. Попробуем решить.
Кстати в GetFullAppointmentPadeg даже склонение "редактор литературный" происходит неверно.
А вот здесь поподробнее, плз. Пример вызова со значениями параметров, если не затруднит. |
|
02-09-2008 02:19При склонении должности "редактор литературный" всё нормально, но при склонении "редактор литературный 2 категории" склонение происходит не верно(получается, к примеру, "редактору литературный 2 категории"). Это как-то лечится? Кстати в GetFullAppointmentPadeg даже склонение "редактор литературный" происходит неверно. |
|
28-08-2008 13:51Порт для java есть, был сделан примерно год назад. Правда, не все функции, а только склонение ФИО и должностей - остальное не нужно было |
|
14-08-2008 02:53Отличная библиотека! Спасибо авторам.
Есть ли планы по портированию на другие языки? Очень интересует реализация на Java, чтобы можно было использовать ее в сервеном приложении, как на Windows так и на UNIX серверах. Готов обсудить оплату за Java -версию. |
|
28-07-2008 06:02Прежде чем заявлять претензии разработчикам Да я, собственно, претензий не предъявлял, да и с чего бы это? Тем более, что задачу решил сам.
Не помню никого с ником while Я его недавно зарегистрировал.
А запрос я направлял на ящик, вот только кому, Вам или Вашему коллеге - не помню, если не обоим (письмо не сохранилось, к сожалению). Было это в марте-апреле сего года. Отправитель Петренко Андрей (while@inbox.ru или totals@inbox.ru) с предложением локализировать библиотеку... Но ответа... Кстати, предложение остается в силе.
|
|
27-07-2008 22:43сообщение от автора материала Насчет украинского - как-то отправлял письмо разработчикам с готовность локализировать, но ответа не получил... Там какой-то случай с претензией к украинскому "коллеге" были, может поэтому?
Прежде чем заявлять претензии разработчикам вероятно вежливам было бы представиться. Не помню никого с ником while. На счет "какого-то случая" может быть Вы про это:
К сожалению, знающего украинский среди нас не было, но кто-то (не помню)собирался взяться, но воз и ныне там.
См. мой пост от 07-04-2003 12:31. |
|
26-07-2008 04:02Вариант склонения по падежам ФИО и названий профессий для украинского языка - http://totals.co.ua/samples/case.rar. Основные варианты склонений присутствуют. Для "складних випадків відмінювань" можно дописать правила. |
|
25-07-2008 16:02Насчет украинского - как-то отправлял письмо разработчикам с готовность локализировать, но ответа не получил... Там какой-то случай с претензией к украинскому "коллеге" были, может поэтому? |
|
13-06-2008 13:51а через какую прогу это все открывать? |
|
03-06-2008 02:28Добрый день.
Библиотечка крайне любопытная, но есть один неприятный момент. А именно хранение некоторых настроек в реестре. Все бы ничего, однако реестр частенько бывает закрыт. Вот бы подумать, как иначе получать настройки. Может из ini (xml) файла, который должен лежать там же откуда запускается exe файл, который использует библиотеку, или возможно добавить специальные функции настройки, после вызова которых, библиотека больше не будет обращаться к реестру.
Как вы на это смотрите?
Большое спасибо. |
|
20-02-2008 08:21сообщение от автора материала Спасибо, Kiros, за ваше сообщение. Обертку нам прислал один пользователь библиотеки, а поскольку с шарпом, по-крайней мере мне, не доводилось работать, то она и не проверялась. Если вы пришлете мне исправленный файл, то я постораюсь в ближайшее время обновить архив на сайте.
Еще раз спасибо. |
|
19-02-2008 10:28В дополнение к предыдущему посту - стало:
[StructLayout(LayoutKind.Sequential)]
private struct FIOParts
public void Free()
} |
|
19-02-2008 10:19В обертке для шарпа неправильно описана структура.
Было:
[StructLayout(LayoutKind.Sequential)]
private struct FIOParts
public void Free()
}
Стало:
[StructLayout(LayoutKind.Sequential)]
private struct FIOParts
public void Free()
} |
|
27-12-2007 10:30В процессе работы (все сводилось к вызову GetOfficeDeclension) с оберткой на С-шарпе были обнаружены проблема выделения памяти.
Выяснилось это очень не сразу, и приводило к чудесным багам, вроде эксепшена деления на 0, аж в сторонней программе построения отчетов.
непременно напишу когда выясню больше подробностей об этой проблеме.
--------
Сообщение = Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Стек :
at FSLib.Declension.Declension1251.decGetOfficePadeg(IntPtr office, Int32 padeg, IntPtr result, Int32& resultLength)
at FSLib.Declension.Declension1251.GetOfficeDeclension(String office, DeclensionCase declensionCase) in Declension1251.cs:line 348
|
|
24-12-2007 08:33Здраствуйте,
есть вопросы по лицензии, проясните ситуацию пожалуйста.
1. если я, разработчик, использую библиотеку в коммерческой программе, должен ли я покупать "Лицензию для коммерческого использования Программы" для каждого пользователя моей системы? Или только одну - для себя?
1.1. Для каких пользователей предназначена Корпоративная лицензия в контексте компании-разработчика программ?
2. если я покупаю исходные тексты, могу ли я свободно их менять и распространять изменения? Если нет - каких правил я должен придерживаться?
3. планируется ли внедрять другие виды лицензий и/или защиту от копирования? |
|
24-12-2007 02:31сообщение от автора материала 2 SergeyKNP.
Не буду критиковать ваш способ помучить пользователя обновлениями, хотя очень хочется... :-)
Как конструктив могу предложить решение запихнуть DLL и исключения в ресурсы EXEшника (как - др. вопрос) и выдирать их оттуда при запуске.
|
|
22-12-2007 05:35дело в том, что EXE-шник лежит в сетевой папке...пользователь запускает его в связке с другой прогой Launcher Мой_exe
Прога Launcher переписывает (если его ещё не на локале или он изменился) Мой_exe к пользователю на локал и запускает его...в результате Мой_exe в сетевой папке освобождается для перезаписи и не нужно выгонять пользователей из запущенного Мой_exe, а так-как Мой_exe запускается из локальной папки пользователя, то и положенную DLL-ку в сетевой папке не увидит...переписывать вместе с Мой_exe ещё и padej.dll не хотелось бы... |
|
22-12-2007 05:29...да, буду перекомпилировать объект...пользователи и не заметят |
|
22-12-2007 05:22сообщение от автора материала 2 SergeyKNP:
А смысл? При необходимости добавления исключения будете перекомпилировать файл? Пользователи не поймут... Аналогично и с библиотекой. |
|
22-12-2007 04:53Просьба не пинать за ламерский вопрос...
а можно ли как-нибудь поместить DLL-ку(и "Иключения") в тело исполняемого файла ? чтобы не таскать с EXE-шником Padeg.dll... |
|
20-12-2007 07:29Выложен новый архив pd_Sample.zip |
|
20-12-2007 05:20в pd_Sample.zip отсутсвует обертка для С-шарпа. Плз почините |
|
23-10-2007 05:52Вау! Использую из С# и ловлю кайф. Большие спасибки за полезный функционал! |
|
12-09-2007 03:22как насчет поддержки украинского языка?
можно ли доработать?
или хотябы выложить исходники? |
|
08-09-2007 10:19Большое спасибо за библиотеку
заюзал на SQL 2005м серваке, фурычит
спасли мне как минимум день |
|
28-08-2007 01:55Огромное спасибо разработчикам, за столь ценный труд. |
|
27-07-2007 02:44Отчества, содержащие "оглы" и "кызы", из маленьких букв делает большие, во многих документах это принципиально важно!
Заранее спасибо. |
|
23-04-2007 05:51Не могу никак подключить библиотеку Padeg.dll из Java. Использую для этого Jawin. По библиотеке с COM-объектом Jawin генерирует скелет вызова из Java, но при инициализации COM-объекта Java закрывается:
declension = new IDeclension("Padeg.Declension");
<terminated, exit value: -1073741819>C:\Program Files\Java\jdk1.5.0_08\bin\javaw.exe (23.04.2007 15:42:32)
Тоже самое происходит при простейшем вызове:
System.loadLibrary("Padeg");
По библиотеке без COM-объекта Jawin не может сгенерировать скелет, потому что она не содержит описание структуры библиотеки (Typelib). Нельзя ли в этой версии библиотеки сделать вариант скомпилированный вместе с Typelib?
|
|
16-03-2007 07:27сообщение от автора материала 2HOBu4OK:
Дело в том, что слова с двумя и более символами в верхнем регистре считаются аббревиатурами, которые не склоняются (ОТиЗ). А вот как разрешить?.. Первое, что приходит на ум, сделать UpperCase результату, но, подозреваю, что это не даст эффекта, т.к. входные данные уже в этом самом Case'е. А предварительное LowerCase уничтожит аббревиатуры. Весьма сожалею... |
|
16-03-2007 03:32Отличная библиотека. С ФИО все замечательно работает.
Есть другая проблема. название огранизации в UpperCase не склоняет никак =( например "ОТКРЫТОЕ АКЦИАНЕРНОЕ ОБЩЕСТВО "РОГА И КОПЫТА", хотя склоняет "Открытое Акционерное Общество "РОГА И КОПЫТА"... можно ли разрешить эту проблему? |
|
26-02-2007 03:49Отличная библиотека! В некоторых программах давненько видел подобную штуку. Помню, радовался и удивлялся, как это программа так хитро делает? :)
А вот теперь, с помощью этой библиотеки, сам могу подобные вещи делать. :)
Авторам большое уважение за такой труд. Сам я плохо представляю, как же это было сделано?
Это, конечно, не обязательно, но, если можно, могу я увидеть исходный код (или, хотя бы его часть)? |
|
13-12-2006 01:01Вопрос к авторам:
А существует ли ваша библиотека в реализации для Oracle? Дело в том, что у нас Oracle установлен на UNIX и воспользоваться Dll нет возможности. Нет ли у вас пакета или набора функций для Oracle? Возможно, в зашифрованном виде, чтобы мы не смогли прочитать исходные тексты?
Если не существует, то за какую сумму вы могли бы разработать такой пакет или продать нам исходники, чтобы мы сами разработали этот пакет? |
|
17-11-2006 08:16сообщение от автора материала Уф... Хоть и с большим опозданием, но обещание про должности и подразделения таки выполнео. Поверьте, не все здесь зависело от нас. |
|
31-08-2006 02:46У меня вопрос. В Excel этот макрос действует только на 1 выделенную ячейку. Что нужно сделать, чтобы он работал на множество ячеек, например, на весь столбец? |
|
17-08-2006 04:46
17-08-2006 02:35Попробовал скачать длл по ссылке ссылка мертвая.. Вышлите ее кто-нить на мыло... Уж очень нада..
Заранее спасиба.. |
|
17-08-2005 07:24Как бы еще из библиотеки экспортировать функцию, которая бы возвращала пол:
пол("Иванов Иван Иванович")=м
пол("Ольгина Ольга Олеговна")=ж
Ведь, наверное, внутри эта процедура есть?
Тогда документы выглядели бы намного красивее - можно было бы избавиться от двойных окончаний в документах ("имеющий(ая) двоих детей") |
|
29-05-2005 05:55все хвалят, а у меня запустить не получается :( в ворде подставляет вместо выделенного текста квадратики, а в экселе стирает выделенную ячейку, ошибки нигде никакие не выдает... в чем может быть причина? |
|
29-03-2005 05:46в 90-мохнатом году пытался написать подобную вещь во время проекта по автоматизации ЗАГС.
тоже сначала изучал русский язык, смотрел всякие сторонние разработки и т.п.
в итоге в какой-то момент забил и сделал элементарнейшую самообучающуюся систему, которую можно даже в сиквел загнать в виде функции.
составной ключ для поиска = окончание слова, словоформа (ФИО, существительное, дата), склонение/падеж и род.
чем длиннее совпадение окончания, тем выше приоритет (напр. "ова" забивает "ва").
в итоге эта система прекрасно склоняет кроме ФИО еще и всевозможные числительные ("отбывает наказание сроком два года шесть месяцев", "второй ребенок в тройне") и всякие существительные/прилагательные типа национальности или гражданства (тут народ про должности все спрашивает).
статистика была набрана всего за 2 недели (точнее 14 человеконедель), после чего модуль практически перестал дообучаться и допускать ошибки.
говорят, что система все еще работает :) |
|
12-03-2005 08:57Люди, так как же эту штуку подключить к программе?
Пробую так:
hDll:=LoadLibrary(PAnsiChar(ExtractFilePath(Application.ExeName)+'Padeg.dll'));
@GetFIOPadegFSAS:=GetProcAddress(hDll, 'GetFIOPadegFSAS');
На первой строке сразу вылетает ошибка:
Filed to get data for 'DeclMode'
Может я чего не так делаю? |
|
11-01-2005 07:02Спасибо за библиотеку :) ща пойду пробовать...
Замечание: а нельзя ли добавить инициализирующую функу, дабы не связываться с реестром?
Есть ли в планах поставлять библиотеку с сорцами?
Всего наилучшего. |
|
06-08-2004 07:44У меня при использовании вашей библиотеки 1С выдает ошибку
Ошибка при создании объекта из компоненты Путь\Padeg.dll (отсутствует CLSID) |
|
27-04-2004 18:15возможно ли использование этого dll в Builder 6,0 ?и как? |
|
27-04-2004 16:12Скажите пожалуйста ,а для Builder 6.0 эту dll можно использовать?и как? |
|
26-04-2004 21:30А возможно ли использовать данную библиотеку в Builder 6.0.Если да,то как?(очень надо ,с нетепением жду ответа) |
|
19-02-2004 10:44Привет создателям этой библиотеки, а также всем участникам форума!
Есть такое предложение:
- дописать склонение должностей (от 1-го до 10-ти слов);
- склонение названий объектов (от 1 до 10 слов);
- возвращать определенный автоматически род для ФИО.
Это комерческое предложение. Чем быстрее будет готово, тем больше я в этом буду заинтересован.
Свой ответ писать мне на ящик: aleksey80@rambler.ru
PS: обязательно совместимо с VB, VBA |
|
13-02-2004 13:29А ну и еще. Есть ли возможность добавить функцию которая бы выдавала номер падежа по строке а так же символ пола по строке. Было бы очень полезно... |
|
13-02-2004 13:27Здравствуйте разработчики библиотеки Padeg.DLL.
Я программирую на Visual VoxPRO и у меня есть несколько предложений/пожеланий
1) Я сделал модуль (назовем так) для использования этой библиотеки в VFP. Могу выслать и Вы если захотите включите его в проект
2) При тестировании возникли вопросы - Использование функций возвращающих ShortString обрабатывается не верно - автоматически не определяется падеж.
3) Использование функции GetNominative вызывает ошибку процесса - которая приводит к "Умиранию" вызвавшего процесса...
Если откликнитесь пишите пожалуйста на мыло. Я здесь не часто появляюсь... |
|
06-10-2003 15:02А можно ли эту библиотеку прилепить как внешнюю процедуру к MS SQL 2000? очень надо, я пол дня ковырялся разбирался как и что но ничего не получилось
Уважаемые разработчике если знаете помогите...
Буду очень признателен...
|
|
04-06-2003 10:51Спасибо. Классная библиотека. Правда не проверял еще. |
|
07-04-2003 12:31> Разработку украинизированного программного обеспечения
> пускай оплачивают наши украинские националисты, понятно?
Не стоит обижаться. Ворфоломей еще из детских штанишек не вырос? Или наоборот настолько отрос...
К сожалению, знающего украинский среди нас не было, но кто-то (не помню)собирался взяться, но воз и ныне там. |
|
05-04-2003 17:25Разработку украинизированного программного обеспечения пускай оплачивают наши украинские националисты, понятно? А то нахаляву навязывать всем язык они молодцы, а как оплатить - так денег нету? |
|
10-12-2002 15:31Большое спасибо разработчикам !!!
Получилась очень замечательная вещь.
Только хотелось бы дождаться еще появление возможностей склонения должностей и подразделений. |
|
25-11-2002 15:30Нужная библиотека, только вот еще если бы добавили поддержку украинского языка (т.е. укр. правил) или исходники выложили :))) |
|
04-10-2002 00:09сообщение от автора материала Скоро будет. И не только должностей, но и подразделений. |
|
03-10-2002 07:09А действительно неплохо было бы сделать склонение должностей...
Может кто поделится идеями на этот счет??? |
|
15-09-2002 15:46Спасибо авторам! Очень пригодилось!
Проверял на 865-ти ФИО, ошибки только 2, но однотипные, так что можно считать за одну.
А именно:
такое имя как Альфия (с ударением на последний слог) склоняется примерно так же, как слово Мафия (где ударение на первый).
Но, я думаю, Альфия за это не обидится.
Еще раз спасибо! |
|
27-08-2002 22:49я экспортировал одну функцию, основную как я понял. после того как выполняется склонение в падеж, он пишет его как надо, а потом выскакивает ошибка. странно... |
|
11-04-2002 15:22о как бы это реализовать в Delphi 6? |
|
07-02-2002 16:49ребята просто молодцы! Я 2 недели что то подобное искал и тлько сейчас нашел.
|
|
19-10-2001 16:29Ну одни хвалебные оды. Приятно конечно.
Но...
Хотелось бы услышать и деловые предложения.
Например:
1) Как быть со склонением должностей? Это кому-нибудь нужно?
2) Добавить ли функцию сокрашения полного ФИО до фамилии с инициалами?
3) А как с востановлением именительного падежа, с которым Гена столько копий сломал?
4) Удобно ли пользоваться функциями?
5) И прочее...
Мне отвечайте лучше в мыло. |
|
16-10-2001 13:35сообщение от автора материала >Мне кажется (хотя может быть я и не прав), что должно быть >Американцем.
Прав, но... Из описания: '...это касается творительного падежа, где окончание некоторых фамилий зависит от положения ударения, определить которое алгоритмически не представляется возможным.' Фамилии на -ец, к сожалению, относятся к 'некоторым'. ПавловЕц - ПавловцОм, но ПАвловец (ПавлОвец) - ПАвловцем (ПавлОвцем). Заглавная гласная - ударная. |
|
05-10-2001 10:20Отличная программа! Однако у меня есть один вопрос. Допустим, что у нас есть персона с именем Паша и фамилией Американец. Используя обсуждаемую программу получаем, что в творительном падеже будет
Пашей Американцом. Мне кажется (хотя может быть я и не прав), что должно быть Американцем.Сообщение не подписано |
|
01-10-2001 15:29> Sana.
> Есть люди, которые утверждают, что для мужчин такие фамилии, как
> Черных, Омутных и т.п. склоняются а для женщин нет...
И эти люди неправы, а эти фамилии не склоняются ни у мужчин, ни у женщин.
> А вот фамилия Чабан не склоняется, а библиотека её склоняет.
Если склоняет у мужчин, то правильно делает. Фамилия Чабан не склоняется только у женщин.
> Одним словом: надо подкрепить проект соответсвующей теорией.
Похоже, что он уже ею подкреплен. |
|
28-09-2001 06:51Классноая вещь, мне очень понравилась. НО:
У татар иногда не бывает 'Отчества'. Т.е. полное имя состоит из двух слов. Как быть в этом случае? |
|
27-09-2001 16:41Мне нравится.
А простые слова она склонять не может ?Сообщение не подписано |
|
11-09-2001 09:50Однако... Есть люди, котрые утверждают, что для мужчин такие фамилии, как Черных, Омутных и т.п. склоняются а для женщин нет...
А вот фамилия Чабан не склоняется, а библиотека её склоняет. Одним словом: надо подкрепить проект соответсвующей теорией. |
|
07-07-2001 12:47Замечательно! Теперь будем тестировать на реальной базе, токо наше приложение на Delphi 1.0 :-). Давно хотелось такую штуку, но все не было и не было, а теперь ЕСТЬ, УРА! СПАСИБО!
|
|
04-07-2001 22:29Нужная вещь! Очень мне пригодится. Большое Вам спасибо! :-) |
|
04-06-2001 16:27Замечательная библиотека. Давно сам собирался что-то в этом роде написать, только руки не доходили.
В стиль изложения не вникал, некогда, но, на всякий случай, поставил самую высокую оценку :) |
|
22-05-2001 17:38Кому надо, могу послать в текстах модуль с подобными же функциями.
Всего хорошего. |
|
|
|