Если кого-нибудь интересует программный генератор слов (по набору правил) для какого-нибудь языка, то, пожалуйста, напишите. Тогда я выложу программу и справку. Если не интересует, тогда лучше пусть модераторы удалят эту тему, чтобы не мешала, потому что вряд ли прямое отношение к лингвистике имеет. Если всё же интересует, то любые пожелания принимаются с попыткой воплотить в жизнь
Интересует. Для русского языка на политические темы... ;D
Цитата: Nekto от июля 27, 2008, 22:59
Интересует. Для русского языка на политические темы... ;D
гы :up:
Цитата: arseniiv от июля 27, 2008, 20:47
Если кого-нибудь интересует программный генератор слов (по набору правил) для какого-нибудь языка, то, пожалуйста, напишите. Тогда я выложу программу и справку. Если не интересует, тогда лучше пусть модераторы удалят эту тему, чтобы не мешала, потому что вряд ли прямое отношение к лингвистике имеет. Если всё же интересует, то любые пожелания принимаются с попыткой воплотить в жизнь
Хм.
Не знаю, сопряжено ли это с тем, что предлагаете вы, но меня очень давно и плотно интересует следующая штука: задаёшь, скажем, 6 определённых языков, и программа на каждое заданное слово выдаёт некий средний между ними вариант (или несколько вариантов, после чего вручную можно выбрать тот либо же тот).
Это имеет отношение к вашей программе? Если да, то интересует даже очень.
Цитата: Artemon от июля 28, 2008, 14:32
Хм.
Не знаю, сопряжено ли это с тем, что предлагаете вы, но меня очень давно и плотно интересует следующая штука: задаёшь, скажем, 6 определённых языков, и программа на каждое заданное слово выдаёт некий средний между ними вариант (или несколько вариантов, после чего вручную можно выбрать тот либо же тот).
Это имеет отношение к вашей программе? Если да, то интересует даже очень.
Вы меня заинтересовали, хотя сейчас у меня не такая программа, а просто делающая слова из набора букв и правил, какие куда можно ставить. Я бы попробовал, как вы хотите, но просто со словами (вводишь просто слова, без указания, какие языки). Только вы приведите пример пожалуйста, каким способом (ну, может например, каким-нибудь усреднением согласных-гласных или просто выбором) из каких-либо слов сделать несколько средних (хотя бы 1 пример). Хотя, боюсь, даже с примером не получится...
Ну, как минимум общие буквы, идущие в той же последовательности, можно выделять. То есть создавать некий такой трафарет будущего слова. Конечно же, тут есть такая маленькая хитрость, что писаться может по-одному, а читаться по-другому, но тут уже, естессно, медицина бессильна. :)
А вообще очень интересно, как работает аналогичная программа для логлана. Там же тоже вот что-то такое имело место.
Цитата: Artemon от июля 28, 2008, 20:49
Ну, как минимум общие буквы, идущие в той же последовательности, можно выделять. То есть создавать некий такой трафарет будущего слова.
Да, стоит попробовать, но это всё же кажется, работа для человеческого ума, а не для перебора с возвратами...
Цитировать
Конечно же, тут есть такая маленькая хитрость, что писаться может по-одному, а читаться по-другому, но тут уже, естессно, медицина бессильна. :)
А можно писать, как слышится ;)
Цитировать
А вообще очень интересно, как работает аналогичная программа для логлана. Там же тоже вот что-то такое имело место.
Ой, об этом к сожалению не знаю. Это для названия предикатов, да?
Цитата: Artemon от июля 28, 2008, 14:32
Цитата: arseniiv от июля 27, 2008, 20:47
Если кого-нибудь интересует программный генератор слов (по набору правил) для какого-нибудь языка, то, пожалуйста, напишите. Тогда я выложу программу и справку. Если не интересует, тогда лучше пусть модераторы удалят эту тему, чтобы не мешала, потому что вряд ли прямое отношение к лингвистике имеет. Если всё же интересует, то любые пожелания принимаются с попыткой воплотить в жизнь
Хм.
Не знаю, сопряжено ли это с тем, что предлагаете вы, но меня очень давно и плотно интересует следующая штука: задаёшь, скажем, 6 определённых языков, и программа на каждое заданное слово выдаёт некий средний между ними вариант (или несколько вариантов, после чего вручную можно выбрать тот либо же тот).
Это имеет отношение к вашей программе? Если да, то интересует даже очень.
Так уже есть логлан, хотите нью-логлан? И старый-то никто не учит.
ВРучную, батенька, лучше всего действовать, вручную.
Ну как вам сказать, "никто"... Эсперанто тоже почти никто не учит... ;)
Но эдак можно и вовсе прийти к вопросу о смысле жизни. :)
Вообще я за то чтобы чего-нибудь новое делать, а не только "жить законом, данным Адамом и Евой". Но вот идея смешения корней лично для меня сомнительна. Я так понимаю, это чтобы каждый нашёл в слове что-то своё, так? Ну, возьмём мы птица+чирийя+бёд, получим чирбёдица или чиртибёд. Но ведь слова-то такого реально не будет ни у кого, оно ничьё.
про птичек ушло сюда: http://lingvoforum.net/index.php/topic,10927.0.html
Так выкладывать программу?
Она конечно же, про�та� (в �мы�ле получаемого результата), наверно, кто-нибудь видел лучше. �о, по крайней мере, можно избежать чего-нибудь вроде jkdtjklvm или oiaaiou.
Можно и�пользовать как буквы любые �имволы ASCII (� Unicode проблемы, е�ли кто-нибудь хотел бы и�пользовать �имволы МФ�) и по�ледовательно�ти из не�кольких �имволов (bh, dj, нъь, ai напр.), реги�тр �облюдает��. Опции программы, конечно, не в �амом удобном виде получили�ь.
Простите, это со мной проблемы, или с отображением? Первая часть этого сообщения видимо, как-то заюникодилась или что-то ещё, но отображается совсем ненормально.
Надеюсь, это моя личная проблема. Извините за оффтоп
Интересно, хоть кто-нибудь счёл это нужным или полезным, то что я тут навыкладывал? Вижу, были загрузки
А чом би й ні? Сейчас работаю над конлангом.
Программу вашу скачал, посмотрел. Вроде всё работает, спасибо.
Просто пока до словаря не добрался. :)
По-моему, здорово. Просто, интересно и удобно. Большое спасибо.
Проблема со слогами VC: вместо них выводится 0 (ноль). :-\
Я писал аналогичные програмки, причём на javascript, генерили слова прямо в броузере :)
Использовал для правил ССV и т.п ( где сдвоенные согласные и гласные) фрактальную функцию. Можно использовать любую функцию, хоть даже мандельброда, главное, чтобы на выходе было два числа ( обычно в графике это координаты пикселя ). А дальше всё просто, привязываешь эти числа к масиву с буквами, в соответствии конечно с другими правилами. Вообще использование фракталов более продуктивно, чем просто случайные числа. Можно сразу сгенерировать и скинуть в файл целый лексикон, например 50 или 100 тысяч слов.
Изменяя параметры фрактальной функции, можно получить множество лексиконов.
И самое главное эти лексиконы будут более удобные для восприятия и заучивания.
в добавление... лучше такую програмку написать как макрос в Word или в Exel на VBA.
Цитата: "ternonzang" от
лучше такую програмку написать как макрос в Word или в Exel на VBA.
В Excel'е уже убрали ограничение на количество строк в таблице?
Лучше бы генератор морфологии, фонологии сделать. Лексика - это уже дело десятое, можно и стибрить из каких-нибудь языков, благо копирайтов нету. :umnik:
Цитата: myst от марта 28, 2009, 16:11
Цитата: "ternonzang" от
лучше такую програмку написать как макрос в Word или в Exel на VBA.
В Excel'е уже убрали ограничение на количество строк в таблице?
Надо глянуть на ограничения , вообще это не критично, так как кроме строк ещё и столбцы есть , клеток на всех хватит:)))
У меня парочку телефонных справочников было в виде таблиц.
Цитата: Невский чукчо от марта 28, 2009, 16:15
Лучше бы генератор морфологии, фонологии сделать. Лексика - это уже дело десятое, можно и стибрить из каких-нибудь языков, благо копирайтов нету. :umnik:
Морфология =это и есть правила формирования слова. Это можно сделать достаточно гибко. А фонология ... ну можно определить в правилах колличество звуков, с точки зрения програмирования, это всего лишь размер массива . .
Цитата: "ternonzang" от
Надо глянуть на ограничения , вообще это не критично, так как кроме строк ещё и столбцы есть , клеток на всех хватит:)))
В том, который в Office 2003, 65535, если мне память не изменяет.
Цитата: "myst" от
В том, который в Office 2003, 65535, если мне память не изменяет.
Этого в принципе хватит доже в один столбик. )
Можно прогу сделать, чтобы она отдельно генерила корни слов и флексию,
по разным правилам, это бы время экономило и упростилась бы работа с морфологией.
Цитата: Невский чукчо от марта 28, 2009, 16:15
Лучше бы генератор морфологии, фонологии сделать. Лексика - это уже дело десятое, можно и стибрить из каких-нибудь языков, благо копирайтов нету.
Генератор фонетики
http://www.zompist.com/sounds.htm
Гостю, забыл, как зовут. Вместо VC - 0? Хм, точно не знаю, вы для них буквы подобрали в файле настроек, ведь если просто включить эти слоги, то там будет как раз 0, потому что по умолчанию поставлен.
ternonzang, ваш фрактальный алгоритм, как я понимаю, позволяет делать слова, как-то похожие по написанию (и по звучанию соответственно, несмотря на то, как озвучивать)? То есть, как будто взятые из определённого сложившегося языка. Тогда это просто замечательный алгоритм!
В разделе Syl пишу:
Allow_CV=0
Allow_CVC=0
Allow_VC=1
Allow_V=0
CV_MaxCons=1
CVC_MaxFirstCons=1
CVC_MaxLastCons=1
VC_MaxCons=1
В разделе Letters пишу:
OpenCs=b d f g h j k l m n p r s t v w z
OpenVs=a e i o u
ClosedFCs=b d f g h j k l m n p r s t v w z
ClosedLCs=f h j l m n r s v z
ClosedVs=a e i o u
SClosedCs=0
SClosedVs=0
VowelVs=a e i o u
На выходе получаю строки типа 000, 0000 и т.п.
SClosedCs и SClosedVs (SClosed = semi-closed, полузакрытый, мой "термин" для VC) заполните. Как раз эти строки влияют на генерацию при Allow_VC=1 :)
Большое спасибо, теперь все работает! :=
Сотрудничество - полезная вещь
Цитата: Artemon от августа 28, 2008, 22:21
А чом би й ні? Сейчас работаю над конлангом.
Программу вашу скачал, посмотрел. Вроде всё работает, спасибо.
Просто пока до словаря не добрался. :)
Лучше вот это зацените. А доработать до генератора лексики - 5 минут.
Просто вместо слов читать буквы.
[size=1]
;;;; -*- Mode: Lisp; Syntax: Common Lisp -*-
;;;; Addewyd, Mon Aug 11 1999
;;;; bred, v.0.2
(defvar *word-1* nil)
(defvar *word-2* nil)
(defvar *tree* (list nil nil nil))
(defun get-words (stream)
(if *word-1*
(setf *word-1* *word-2* *word-2* (read-word stream))
(setf *word-1* (read-word stream) *word-2* (read-word stream))))
(defun alpha-char-p-v (c)
#+CLISP (or
(char= c (int-char 215))
(char= c (int-char 247))
(char= c #,)
(char= c #!)
(char= c #.)
(char= c #?)
(alpha-char-p c))
#-CLISP (alpha-char-p c)
)
(defun read-word (stream)
(let (c (str "") (d (skip-not-alpha stream)))
(when d (setq str (string-append str d)))
(if (find d ".!,?") (string d)
(loop
(setq c (read-char stream nil nil))
(cond
((null c) (return str))
((find c ".!?,") (unread-char c stream) (return str) )
( (and (alpha-char-p-v c) (not (find c ".!,?")) )
(setq str (string-append str c)))
(t (return str)))))
(string-downcase str)))
(defun skip-not-alpha (stream)
(let (c)
(loop
(setq c (read-char stream nil nil))
(cond
((null c) (return nil))
((alpha-char-p-v c)
(return c))
(t t)))))
(defun tree-add (word nextword tree)
(cond
((string= word "") nil)
((null (car tree))
(setf (car tree)
(list word 1 (list (list nextword 1)))))
((string= word (caar tree))
(incf (second (first tree)))
(add-next nextword (third (car tree))))
((string< word (caar tree))
(unless (second tree)
(setf (second tree) (list ()()())))
(tree-add word nextword (second tree)))
(t (unless (third tree)
(setf (third tree) (list ()()())))
(tree-add word nextword (third tree)))))
(defun add-next (word lst)
(let ((el (member word lst
:test #'(lambda (i l) (string= (car l) i)))))
(if el
(incf (second (first el)))
(nconc lst (list (list word 1))))))
(defun find-word (tree word)
(cond
((null tree) nil)
((string= (caar tree) word) (car tree))
((string< word (caar tree))
(find-word (second tree) word))
(t (find-word (third tree) word))))
(defun choose-word (lst)
(if lst
(let* ((n (apply #'+ (mapcar #'cadr lst)))
(r (random n))
(l (length lst))
(m 0))
(loop
(decf l)
(when (or (< (decf r (cadr (nth m lst))) 0) (< l 1))
(return (car (nth m lst))))
(incf m)))
nil))
(defun string-append (str chr)
(string-concat str (make-string 1 :initial-element chr)))
(defun generate-tree (fname)
(with-open-file (stream fname)
(loop
(get-words stream)
(tree-add *word-1* *word-2* *tree*)
(when (string= *word-2* "") (return *tree*)))))
(defun write-text (tree)
(let ((wrd (first tree)) (n 0) w-next)
(loop
(unless (and wrd (setf w-next (choose-word (third wrd))))
(return))
(format t "~A " (first wrd))
(when (> (incf n) 7) (setq n 0) (terpri))
(setf wrd (find-word tree w-next)))))
#-CLISP
(defvar *arguments* '("test.txt"))
#+CLISP
(defvar *arguments* *args*)
(defun main ()
(setf *random-state* (make-random-state t))
(if (car *arguments*)
(let ((tree (generate-tree (car *arguments*))))
;; (print tree)
(write-text tree))
(princ "Usage: bred <filename>")))
(main)
[/size]
А что оно делает? :???
Цитата: "addewyd" от
(char= c #,)
(char= c #!)
(char= c #.)
(char= c #?)
Здесь после решёток обратные слэши должны быть.
Да, они и были. ушли, несмотря на <code>
a 215 b 247 -- workaround для CLISP 1999 года. Устарело немного...
% echo "what does the program do?" | ./bred.cl
what does the program do ?
:???
Цитата: "addewyd" от
Да, они и были. ушли, несмотря на <code>
Так эта... программа-то чово делает? :what:
Цитата: "arseniiv" от
Программный генератор лексики, если лень
А программный генератор языков будет? Я может тоже хочу свой язык, но мне лень :)
Это уже давно есть. lex, yacc
:)
Цитата: RawonaM от апреля 21, 2009, 18:01
А программный генератор языков будет? Я может тоже хочу свой язык, но мне лень :)
Это спросите у Когони Буть, он такое вроде разрабатывал ;-)
Цитата: arseniiv от июля 27, 2008, 20:47
Если кого-нибудь интересует программный генератор слов (по набору правил) для какого-нибудь языка, то, пожалуйста, напишите. Тогда я выложу программу и справку. Если не интересует, тогда лучше пусть модераторы удалят эту тему, чтобы не мешала, потому что вряд ли прямое отношение к лингвистике имеет. Если всё же интересует, то любые пожелания принимаются с попыткой воплотить в жизнь
Уважаемый Арсений! Ваше предложение еще в силе - на тему "попытки воплотить в жизнь"?
Меня эта тема очень заинтересовала, хотелось бы обсудить.
Спасибо за прогу, скачал, сейчас постараюсь разобраться.
я бы тоже поучаствовал
как бы програмист. кажется... или нет...
Цитата: myst от апреля 21, 2009, 17:54
Так эта... программа-то чово делает?
сочиняет нечто вроде бреда
Цитата: addewyd от мая 6, 2009, 16:22
сочиняет нечто вроде бреда
Я скормил ей одно предложение, так она только пробел перед знаком вопроса вставила и всё. :donno:
Этого мало.
Ещё сотню предложений разом.
Цитата: addewyd от мая 6, 2009, 18:05
Ещё сотню предложений разом.
Она их рекомбинирует что ли?
марковская цепь
Скачайте Langmaker и пройдите обучение. По-моему, выполняет похожие задачи.