Форум » KooBAudio 2.0 » 0.1 KooBAudio - числительные » Ответить

0.1 KooBAudio - числительные

MoppoH: скачав новую версию заметил что числительные стали заменятся не правильно, либо правило совсем отсутствует: до 2 лет. до 2 января. с 3 января. с 5 по 7. от 2 до 3. с 2 до 3. 1998 - 2000 год. с 1999 по 2000 год. с 2000 года. в 20 лет исправил сам, вроде правильно: // до x лет #(?<=\b(до|после|моложе|старше|из\-за)\b.?)\d+(?=.?(лет|часов)\b)=#($&,2,0) // c x января #(?i)(?<=\b(до|с|со).?)\d+(?=.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря))=#($&,2,3) //с 1999 по 2000 год #(?i)\bс.?(?<X>\d+( \d\d\d)*).?по.?(?<Y>\d+).?(?<M>век|год|месяц)=с #(${X},2,1) по #(${Y},1,1) ${M} //1999 - 2000 год #(?i)\d+(?=.?-.?\d+.?(год))=#($&,1,1) // от X до Y #(?i)\b(от|с).?(?<X>\d+( \d\d\d)*).?до.?(?<Y>\d+( \d\d\d)*)=$1 #(${X},2,0) до #(${Y},2,0) // с X числа (по Y число) #(?i)\bс.?(?<X>\d+( \d\d\d)*).?по.?(?<Y>\d+( \d\d\d)*)=с #(${X},2,1) по #(${Y},4,3) // с X по Y января... #(?i)\bс.?(?<X>\d+).? по.?(?<Y>\d+).?(?<M>января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)=с #(${X},2,3) по #(${Y},1,3) ${M} в группах X Y стоят цифры, поэтому не правильно заменяет // с такого-то года //#(?i)(?<=\bс.?)\d+(.?[\-—]?го)?(?=.?(года|века|месяца|столетия|г|по)\b)=#($&,2,2) заменяет не правильно, но его полностью дублирует выражение // такого-то числа #(?i)\d+(?=(.?[\-—]?го)?.?(числа|года|десятилетия|века|столетия|месяца|г|по)\b)=#($&,2,1) //#(?<=\bв |\bв \d+ и |\bв \d+[\-—])\d+=#($&,6,1) заменяет в 20 лет не правильно, при отключение заменяет нормально

Ответов - 25, стр: 1 2 All

Cminant: до 2 лет. до 2 января. с 3 января. с 5 по 7. от 2 до 3. с 2 до 3. 1998 - 2000 год. с 1999 по 2000 год. с 2000 года. в 20 лет прошелся по указанным примерам. вроде все исправил, кроме "с 5 по 7." - может употребляться в любом роде... v1.1 [pre]// Словарь склонения числительных KooBAudio v 1.1 // Синтаксис: // // комментарий // // шаблон - регулярное выражение, целиком указывающее на целое число, // либо содержавщее группы обратной связи, указывающие на отдельные числа // поддерживаются целые числа, отрицательные и положительные, пробелы игнорируются: // 21 = "двадцать один" // -40 = "минус сорок" // 1 234 567 = "один миллион двести тридцать четыре тысячи пятьсот шестьдесят семь" // // произношение: функции вида "#($x,п,ф)" в сочетании с произвольным текстом // $x - ссылка на группу с преобразуемым числом. Поддерживаемые виды ссылок: // $1, $2, $3 - нумерованные группы в круглых скобках типа (\d+) или (\-?\d+) для отрицательных чисел // ${abc} ${x} ${y} - именованные группы: (?<abc>\d+) (?<x>\d+) (?<y>\d+) // $& или $0 - для соответствия результату всего ругулярного выражения, а не отдельной группе // // п - падеж от 1 до 6 // ф - форма числительного от 0 до 4 // // Падежи: // 1 именительный // 2 Родительный // 3 Дательный // 4 винительный // 5 творительный // 6 предложный // 0 исключение: преобразование для данных совпадений не производится // // Форма: // 0 Простое числительное ("один" "два"...) // 1 Порядковое числительное мужского рода ("первый, "второй"...) // 2 Порядковое числительное женского рода ("первая, "вторая"...) // 3 Порядковое числительное среднего рода ("первое, "второе"...) // 4 Порядковое числительное во множественном числе ("первых, "вторых"...) // // 1 И 2 Р 3 Д 4 В 5 Т 6 П // есть нет дать винить доволен думаю о // // 0 (ч) один одного одному одного одним одном // 1 (м) первый первого первому первого первым первом // 2 (ж) первая первой первой первую первой первой // 3 (с) первое первого первому первое первым первом // 4 (мн) первые первых первым первых первыми первых //Исключение: Тэги ELAN #(?i)\\[a-z]+?\{\-?\d+?\}=$& #~ *(?=\d)=приблизительно // xx-градусный #(?i)\d+(?= *\-?градусн[ыо])=#($&,2,0) // с/от X до Y #(?i)\b(от|с).?(?<X>\d+( \d\d\d)*).?до.?(?<Y>\d+( \d\d\d)*)=$1 #(${X},2,0) до #(${Y},2,0) // с X по Y января... #(?i)\bс.?(?<X23>\d+).? по.?(?<Y13>\d+).?(?<M>января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)=с #(${X},2,3) по #(${X},1,3) ${M} // до x лет #(?<=\b(до|после|моложе|старше|из\-за)\s?)\d+(?=.?(лет|часов)\b)=#($&,2,0) // x лет #\d+(?=.?лет\b)=#($&,1,0) #(?i)\d+(?=.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря).?\d+.?года)=#($&,2,3) // (zz января) xxxx года #(?i)(?<=(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря).?)\d+=#($&,2,1) // от x января #(?i)(?<=\bот.?)\d+(?=.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря))=#($&,2,3) // c x января #(?i)(?<=\b(?:с|до|по|от).?)\d+(?=.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря))=#($&,2,3) // x января #(?i)\d+(?=.?(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря))=#($&,1,3) // к такому-то году #(?i)(?<=\bк.?)\d+(.?[\-—]?му)?(?=.?(году|веку|месяцу|столетию))=#($&,3,1) // к стольки-то годам #(?i)(?<=\bк.?)\d+(?=.?(годам))=#($&,3,0) // в таком-то году #(?i)(?<=\bв.?)\d+(?=(.?[\-—]?м)?.?(году|веке|столетии|месяце)\b)=#($&,6,1) // с такого-то года #(?i)(?<=\bс.?)\d+(.?[\-—]?го)?(?=.?(года|века|месяца|столетия|г|по)\b)=#($&,2,1) // в таких-то годах #(?i)(?<=\bв.?(?:\d+ и )?)(\d+)(.?[\-—]?ы?х)?(?=.?(годах|числах|неделях|месяцах|веках|столетиях|гг|г[\-—]г))=#($1,6,4) // к такой-то эпохе #(?i)(?<=\bк.?)\d+(?=(.?[\-—]?о?й)?.?(эпохе|половине|декаде))=#($&,3,2) //в такой-то эпохе #(?i)(?<=\bв.?)\d+(?=(.?[\-—]?о?й)?.?(эпохе|половине|декаде))=#($&,6,2) // такого-то числа #(?i)\d+(?=(.?[\-—]?го)?.?(числа|года|десятилетия|века|столетия)\b)=#($&,2,1) // такой-то эпохи #(?i)\d+(?=(.?[\-—]?о?й)?.?(эпохи|половины|декады)\b)=#($&,2,2) #(?<=\bпо )\d+=#($&,1,1) // о стольки-то ... #(?<=\bо.?)\d+=#($&,6,0) // таких-то годах #\d+(?=.?годах\b)=#($&,6,0) // xxxx-yyyy год #(\d+)\s?[\-—]\s?(\d+)\s?(век|год|г)\b=#($1,1,1) - #($2,1,1) $3 // такой-то год #\d+(?=.?(век|год|г)\b)=#($&,1,1) #(?<=год )\d+=#($&,1,1) // таком-то году #\d+(?=.?(году|г)\b)=#($&,6,1) // #(?<=\bв |\bв \d+ и |\bв \d+[\-—])\d+=#($&,6,1) #(\d+)[\-—]?у?ю\b=#($1,4,2) #(\d+)[\-—]?го\b=#($1,4,1) #(\d+)[\-—]?а?я\b=#($1,1,2) #(\d+)[\-—]?ый\b=#($1,1,1) #(\d+)[\-—]?о?й\b=#($1,2,2) #(\d+)[\-—]?е?м\b=#($1,6,1) #(?<=(Глава|ГЛАВА|Часть|ЧАСТЬ|Книга|КНИГА).?)\d+=#($&,1,2) #(?i)\d+(?=.?от (рожд|р\.))=#($&,1,1) // // // #(\d+) ?к ?(\d+)=#($1,1,0) к #($2,3,0) // Все остальные: #\d+=#($&,1,0)[/pre] P.s. Да, важное замечание. При установке обновления или полного дистрибутива поверх предыдущей версии стандартные словари не обновляются автоматически (если не выбран portable режим профиля) Новые версии словарей лежат в папке установки программы\Dic, но не используются, их нужно скопировать вручную в папку профиля программы: c:\ProgramData\KooBAudio\Dic\ или c:\Users\%userame%\AppData\Roaming\KooBAudio\Dic\

odinokiyklaus: Допиливаю и систематизирую словарь числительных и нашел некоторую неточность (позже планирую выложить его, вдруг кому-то понадобится). В списках форм для числительных отсутсвует форма для числительного женского рода, то есть: // Формы: // 0 Простое числительное ("один" "два"...) - Данная форма соответствует только мужскому и среднему роду, для женского рода она не подойдет. То есть должно быть так: Два года (м.р.), Две недели (ж.р.) Два столетия (ср.р.) Поэтому рег. выражение #(?i)(?<=\b(в|через|спустя)\b.?)(\d+)(.?\b(эпо|мину|секу|полови|тре|че|ча|неде|середи))(хи|ты|нды|ны|ти|тверти|сти|ли)\b=#($2,1,0)$3<$5 выдает после обработки выражения через 2 недели вырадения вида через два неде<ли. Это можно исправить?

MoppoH: я только так придумал сделать #(?i)(?<=\b(в|через|спустя)\b.?)(2)(.?\b(эпо|мину|секу|полови|тре|че|ча|неде|середи))(хи|ты|нды|ны|ти|тверти|сти|ли)\b=две$3<$5 только не понял зачем такие сокращения, только для того чтобы проставило ударение? вот простой вариант #(?i)\b2\b(?=[^\.,!?-]{0,15}\b(эпохи|минуты|секуды|половины|трети|четверти|части|недели|середины)\b)=две


odinokiyklaus: Разделение слов на части я использую как шаблон для других правил, потому что иногда слова, определяющие склонение числительного, меняют место постановки ударения, к примеру как в данном варианте (см. слово месяца), а деление позволяет точно знать куда будет поставлено ударение #(?i)(?<=\b(без|до|из|из-за|от|у|для|ради|близ|вместо|вне|кроме|после|с|со)\b.?)(\d+)(.?\b(го|ве|ме|ча|эпизо))(да|ка|сяца|са)\b=#($2,2,1)$3<$5 Решение для чисел начиная с 5 и выше ч нашел таким образом #(?i)(?<=\b(в|через|спустя)\b.?)([5-9]|\d{2,6})(.?\b(веко|ме|часо|дне|эпизо))(в|сяцев|й|дов)\b=#($2,1,0)$3<$5 для чисел 2,3,4 видимо придется создавать отдельные правила.. Просто хочется эти числа прихлопнуть одним правилом. Пока есть только итакой вариант "спустя два недели" #(?i)(?<=\b(в|через|спустя)\b.?)([234])(.?\b(эпо|мину|секу|полови|тре|че|ча|неде|середи))(хи|ты|нды|ны|ти|тверти|сти|ли)\b=#($2,1,0)$3<$5

odinokiyklaus: Сможите мне объяснить, почему, если подключить только один словарь с выражением #(?i)\b2\b(?=[^\.,!?-]{0,15}\b(эпохи|минуты|секуды|половины|трети|четверти|части|недели|середины)\b)=две то ударение ставится правильно и в выражении 2 чЕтверти и в вырадении 2 секУнды?

MoppoH: odinokiyklaus пишет: иногда слова, определяющие склонение числительного, меняют место постановки ударения можно пример, а то не понятно как в слове мЕсяца, минУты, может быть другое ударение ссылка на словарь odinokiyklaus пишет: Решение для чисел начиная с 5 и выше ч нашел таким образом #(?i)(?<=\b(в|через|спустя)\b.?)([5-9]|\d{2,6})(.?\b(веко|ме|часо|дне|эпизо))(в|сяцев|й|дов)\b=#($2,1,0)$3<$5 а это зачем правило нужно, здесь всегда будет порядковое числительное, спустя пять месяцев, через шесть веков, в девять часов odinokiyklaus пишет: то ударение ставится правильно и в выражении 2 чЕтверти и в вырадении 2 секУнды? а ставилось как то по другому ударение если подключить остальные словари?

odinokiyklaus: Я писал так иногда слова, определяющие склонение числительного, меняют место постановки ударения Можно и пример. Опред. слово - число. В словосочетании пяти чИсел и пятого числА ударение поменяло своё место. MoppoH пишет: то ударение ставится правильно и в выражении 2 чЕтверти и в вырадении 2 секУнды? я имел ввиду, что в обоих выражениях ударение ставится "туда куда надо". То есть к примеру, если бы ударение ставилось бы строго на предпоследний звук - тогда бы получилось: 2 четвЕрти 2 секУнды Мне не понятно, как производится расстановка ударений. если к программме не подключен ни один словарь. Сможите ответить?

MoppoH: по моим наблюдениям Николай может одно и тоже слово прочитать с разными ударениями, в тексте он читает его ставя ударение не правильно, но когда я добавляю его в словарь он произносит его правильно, от чего это зависит не знаю

odinokiyklaus: MoppoH пишет: #(?i)\b2\b(?=[^\.,!?-]{0,15}\b(эпохи|минуты|секуды|половины|трети|четверти|части|недели|середины)\b)=две использование "простых правил" лично я не приветствую, так как без предлогов в начале числительного возникают казусы типа: (примеры правил специально сократил для удобочитаемости) --после второй секунды--- #(?i)(?<=\b(без|до|из|из-за|от|у|для|ради|близ|вместо|вне|кроме|после|с|со)\b.?)(\d+)(.?\b(секу))(нды)\b=#($2,2,2)$3<$5 --спустя две секунды--- #(?i)(?<=\b(в|через|спустя)\b.?)(2)(.?\b(секу))(нды)\b=две$3<$5

MoppoH: придется добавлять много слов тогда, ведь может быть, прошло 2 секунды, минуло 2 секунды, кончились 2 секунды и т.д.

odinokiyklaus: Здрасьте всем! А почему если в словаре числительных задать правило #(?<A>\d*).?[\-—].?(?<C>\d*)=#(${A},1,1) - #(${C},1,1), а в отладке словарей забить 1618-2748 то выводится результат такого вида одна тысяча шестьсот восемнадцатый - семьсот сорок восьмой ?? число две тысячи куда-то потерялось. Это можно поправить?

odinokiyklaus: для выражений вида 11618-17182 нашел решение #(?<X>\d*).?[\-—].?(?<Y>\d(\d\d\d\d))=#(${X},1,1)-#(${Y},1,1), а для выражений вида 1618-1782 соответственно #(?<X>\d*).?[\-—].?(?<Y>\d(\d\d\d))=#(${X},1,1)-#(${Y},1,1)

MoppoH: odinokiyklaus пишет: забить 1618-2748 зачем придумывать такие сложные рег выражения на простые числа?

odinokiyklaus: Это то как раз просто объясняется. Вот к примеру отрывок из книги Олдос Хаксли "О дивный новый мир" (она у меня находится в формате в в формате fb2 и в KoobAudio открывается именно так, как представлено ниже): Невообразимые ужасы Тридцатилетней войны[9]<note> 9 Тридцатилетняя война – война (1618-1648) между габсбургским блоком (испанские и австрийские Габсбурги, католические князья Германии, которых поддерживали папство и Речь Посполитая) и антигабсбургской коалицией (германские протестантские князья, Франция, Швеция, Дания, за которыми стояли Англия, Голландия и Россия). Окончилась крахом планов Габсбургов создать «мировую империю»; политическим гегемоном стала Франция. Вестфальский мир закрепил это положение </note> преподали тогда людям урок, и затем .... Для правильного произношения (1618-1648) использовал выражение #(?<X>\d*).?[\-—].?(?<Y>\d(\d\d\d))=#(${X},1,1)-#(${Y},1,1) которое и выдает результат в нужном наклонении одна тысяча шестьсот восемнадцатый-одна тысяча шестьсот сорок восьмой

MoppoH: тогда почему не так #(?<X>\d*).?[\-—].?(?<Y>\d(\d\d\d))=с #(${X},2,1)-по #(${Y},1,1) Тридцатиле<тняя война – война (с тысяча шестьсот восемнадцатого-по тысяча шестьсот сорок восьмой) между габсбургским

odinokiyklaus: Можно и так конечно. Моррон, заметил, что в словаре регулярных выражений, который у вас выложен, наблюдается сортировка по искомому слову в алфавитном порядке - от а до я. Вы какой-то специальной программой пользуетесь для сортировки выражений?

MoppoH: сразу как начал делать этот словарь, ставил в алфавитном порядке

odinokiyklaus: Приветствую всех. Что-то я ничего не понимаю. Все словари предварительной обработки отключены (папка 1). Все словари конечной обработки отключены (папка 2) Использую практически полностью идентичные правила #(?i)(?<=\b(на|в|во)\b.?)(\d+)(.?\b(г\.)\b)=#($2,6,1) году< #(?i)(?<=\b(на|в|во)\b.?)(\d+)(.?\b(году)\b)=#($2,6,1) году< фото Но в в первом случае - "г." не обрабатывается вообще, а во втором случае слово "году" обрабатывается сразу. В чем может быть проблема?

MoppoH: odinokiyklaus пишет: а во втором случае слово "году" обрабатывается сразу так у тебя же стоит ударение в году< в рег выражение, вот он и обрабатывает его сразу odinokiyklaus пишет: "г." не обрабатывается вообще убери точку и ограничь г с переди #(?i)(?<=\b(на|в|во)\b.?)(\d+)(.?(\bг|году)\b)=#($2,6,1) году<

odinokiyklaus: Э, хитрите, однако.. - убери точку. Вопрос то был именно в точке. Почему он точку не обрабатывает, хотя она и экранируется.. Но это всё лирика... На сайте http_mytts.forum2x2.ru/t409-topic (ссылка на словарь ссыль) скачал словарь числительных, где все регулярные выражения уже забиты и отшлифованы и самое главное они там разноборазны. В принципе. осталось этот словарь только адаптировать к koobaudio и всё будет тип-топ. Попробовав Demagog и balabolka еще один раз убедился, что koobaudio лучшая на данный момент читалка и записывалка аудиокниг. (лично мне нравится наличие эквалайзера, возможность расстановок пауз в тексте при воспроизведении, стили и т.д. - это круто!!) Но. как всегда просто так ничего не дается. Попробовал его адаптировать, но он не адаптируется. Прилагаю ссылку для скачивания.[url=https://mega.nz/#!sQJUWRBA!lILfBCnnVTFQT6xPqYl3pyWJXx7H1_dO5QmaCV16i0U]ссылка на отредактированный словарь[/url] В данном словаре, обработка числительных сводится к определению промежуточных тегов для XML-языка и через эти тэги уже склонение числительных. Поскольку я личность ленивая. то не хочется корпеть над тем, что уже придумано до нас. В общем, расставив управляющие выражения типа #(?i) я так и не смог добиться чтобы программа создавала и тэги типа <mln> и обрабатывала их в дальнейшем. Может есть какие-либо соображения? Как можно адаптировать данный словарь, чтобы не корячится и не писать новый?



полная версия страницы