version 1.1, 2001/10/31 03:00:10
|
version 1.2, 2001/10/31 03:07:29
|
Line 1
|
Line 1
|
|
|
|
|
▌║И╗╔ А╚╝╒═
|
Общие слова |
~~~~~~~~~~~
|
~~~~~~~~~~~ |
|
|
▒╚╝╒╝Д╝Ю╛╝╘ АГ╗Б═╔БАО ╕═╓╜═О ╞╝А╚╔╓╝╒═Б╔╚Л╜╝АБЛ ЮЦАА╙╗Е ║Ц╙╒, ╚═Б╗╜А╙╗Е ║Ц╙╒
|
Словоформой считается жадная последовательность русских букв, латинских букв |
╗ Ф╗ДЮ. █═╞Ю╗╛╔Ю, "┘╙═Б╔Ю╗╜═", "England", "1974", "H2O".
|
и цифр. Например, "Екатерина", "England", "1974", "H2O". |
"H_2O", "┌╚═╓╗╒╝АБ╝╙-2000" -- МБ╝ ╞═ЮК А╚╝╒╝Ю╛.
|
"H_2O", "Владивосток-2000" -- это пары словорм. |
|
|
█═Г═╚Л╜═О Д╝Ю╛═ А╚╝╒╝Д╝Ю╛К, ╜╔ А╝АБ╝ОИ╔╘ Ф╔╚╗╙╝╛ ╗╖
|
Начальная форма словоформы, не состоящей целиком из |
ЮЦАА╙╗Е ║Ц╙╒ -- МБ╝ А═╛═ А╚╝╒╝Д╝Ю╛═.
|
русских букв -- это сама словоформа. |
|
|
░╔ё╗АБЮ ║Ц╙╒ ╞Ю╗ ╞╝╗А╙╔ ╜╔ ЦГ╗БК╒═╔БАО.
|
Регистр букв при поиске не учитывается. |
|
|
▐╝╗А╙ ╞╝ Г═АБ╗ А╚╝╒═ ╜╔ ╞╝╓╓╔Ю╕╗╒═╔БАО. █╔ ╞╝╓╓╔Ю╕╗╒═НБАО ╗
|
Поиск по части слова не поддерживается. Не поддерживаются и |
Ю╔ёЦ╚ОЮ╜К╔ ╒КЮ═╕╔╜╗О.
|
регулярные выражения. |
|
|
▒╞╗А╝╙ ╜╝╒КЕ Д═╘╚╝╒, ╙╝Б╝ЮК╔ ╞╚═╜╗ЮЦ╔БАО ╞╝АБ═╒╗БЛ ╞╝╓ CVS.
|
Список новых файлов, которые планируется поставить под CVS. |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
▒╚╝╒═Ю╗:
|
Словари: |
|
|
dict.koi ▒╚╝╒═ЮЛ ─╚╔╙А═╜╓Ю═ ▀╔║╔╓╔╒═ ╓╚О ispell.
|
dict.koi Словарь Александра Лебедева для ispell. |
▌║Ю═╖╝╒═╜ А╚╗О╜╗╔╛ ╒А╔Е А╚╝╒═Ю╔╘,
|
Образован слиянием всех словарей, |
╙╝Б╝ЮК╔ О А╛╝ё ╜═╘Б╗.
|
которые я смог найти. |
|
|
mydict.koi ▒═╛╝╞═╚Л╜╝╔ ╓╝╞╝╚╜╔╜╗╔ А╚╝╒═ЮО. └╝╞ЦА╙═НБАО ╜╔╙╝Б╝ЮК╔
|
mydict.koi Самопальное дополнение словаря. Допускаются некоторые |
╒╝╚Л╜╝АБ╗. █═╞Ю╗╛╔Ю, ╒ ▀╔║╔╓╔╒А╙╝╛ А╚╝╒═Ю╔
|
вольности. Например, в Лебедевском словаре |
АЦИ╔АБ╒╗Б╔╚Л╜К╔ ╒Б╝Ю╝ё╝ А╙╚╝╜╔╜╗О, ╙═╙ ╞Ю═╒╗╚╝,
|
существительные второго склонения, как правило, |
╞╝╛╔Г╔╜К ╙╚НГ╔╛ "K" ╗╚╗, ╔А╚╗ ╝╜╗ ╜╔ ╗╛╔НБ Д╝Ю╛К
|
помечены ключем "K" или, если они не имеют формы |
╛╜╝╕╔АБ╒╔╜╜╝ё╝ Г╗А╚═ - ╙╚НГЯ╛ "J". ┌ mydict.koi
|
множественного числа - ключём "J". В mydict.koi |
╒А╔ Б═╙╗╔ АЦИ╔АБ╒╗Б╔╚Л╜К╔ ╞╝╞═╓═НБ А ╙╚НГЯ╛ "K".
|
все такие существительные попадают с ключём "K". |
|
|
|
|
ndict.koi ─╒Б╝╛═Б╗Г╔А╙╗ Аё╔╜╔Ю╗Ю╝╒═╜╜К╘ ╓╝╞╝╚╜╗Б╔╚Л╜К╘ А╚╝╒═ЮЛ.
|
ndict.koi Автоматически сгенерированный дополнительный словарь. |
▐Ю╗╛╔Ю: ╒ dict.koi ╜╔Б А╚╝╒═ "²╘╓╔╚Л╛═╜",
|
Пример: в dict.koi нет слова "Эйдельман", |
═ ╒ ║═╖╔ ╒АБЮ╔Г═НБАО А╚╝╒╝Д╝Ю╛К "²╘╓╔╚Л╛═╜"
|
а в базе встречаются словоформы "Эйдельман" |
╗ "²╘╓╔╚Л╛═╜═". ▒╙Ю╗╞Б, ╝║╜═ЮЦ╕╗╒ МБ╝,
|
и "Эйдельмана". Скрипт, обнаружив это, |
╞╝╜О╚, ГБ╝ МБ╝ ╛╝ёЦБ ║КБЛ Д╝Ю╛К АЦИ╔АБ╒╗Б╔╚Л╜╝ё╝
|
понял, что это могут быть формы существительного |
╕╔╜А╙╝ё╝ Ю╝╓═ "²╘╓╔╚Л╛═╜═" ("²╘╓╔╚Л╛═╜" -- Д╝Ю╛═
|
женского рода "Эйдельмана" ("Эйдельман" -- форма |
Ю╝╓╗Б╔╚Л╜╝ё╝ ╞═╓╔╕═ ╛╜╝╕╔АБ╒╔╜╜╝ё╝ Г╗А╚═), ╗ ╓╝╞╝╚╜╗╚
|
родительного падежа множественного числа), и дополнил |
╔Н А╚╝╒═ЮЛ.
|
ею словарь. |
|
|
|
|
raff.koi ▓═║╚╗Ф═ ═ДД╗╙А╝╒ ╙ А╚╝╒═ЮН ▀╔║╔╓╔╒═.
|
raff.koi Таблица аффиксов к словарю Лебедева. |
|
|
▒╙Ю╗╞БК:
|
Скрипты: |
|
|
makecheck.pl ▐╝ Б═║╚╗Ф╔ ═ДД╗╙А╝╒ ё╔╜╔Ю╗ЮЦ╔Б Б╔╙АБ ДЦ╜╙Ф╗╗,
|
makecheck.pl По таблице аффиксов генерирует текст функции, |
╗ИЦИ╔╘ ╜═Г═╚Л╜ЦН Д╝Ю╛Ц А╚╝╒╝Д╝Ю╛К.
|
ищущей начальную форму словоформы. |
|
|
mkRS.pl ▐╔Ю╔А╝╖╓═ЯБ ╞╝╗А╙╝╒К╔ Б═║╚╗ФК ╗ ╝║╜Ц╚О╔Б ╞╝╚╔
|
mkRS.pl Пересоздаёт поисковые таблицы и обнуляет поле |
ProcessedBySeacrh Ц ╒А╔Е ╒╝╞Ю╝А╝╒.
|
ProcessedBySeacrh у всех вопросов. |
|
|
updateRS.pl ┬И╔Б ╒╝╞Ю╝АК А ╜Ц╚╔╒К╛ ProcessedBySearch
|
updateRS.pl Ищет вопросы с нулевым ProcessedBySearch |
╗ ╓╝║═╒╚О╔Б ╗╜Д╝Ю╛═Ф╗Н ╝ ╜╗Е ╒ Б═║╚╗ФК.
|
и добавляет информацию о них в таблицы. |
░═║╝Б═╔Б ╝Г╔╜Л ╛╔╓╚╔╜╜╝ (╝╙╝╚╝ А╔╙Ц╜╓К ╜═ ╒╝╞Ю╝А ╜═
|
Работает очень медленно (около секунды на вопрос на |
AMD-400), ╜═Г╗╜═╔Б ╝║Ю═║═БК╒═БЛ А╚╔╓ЦНИ╗╘ ╗╘ ╒╝╞Ю╝А
|
AMD-400), начинает обрабатывать следующий ий вопрос |
Б╝╚Л╙╝ ╞╝А╚╔ Б╝ё╝, ╙═╙ ╒ ║═╖╔ ╞╝О╒╗╚═АЛ ╗╜Д╝Ю╛═Ф╗О ╝
|
только после того, как в базе появилась информация о |
╞Ю╔╓К╓ЦИ╔╛. ┌ Ю╔╖Ц╚ЛБ═Б╔ ╛╝╕╔Б ║КБЛ ╒ ╚Н║╝╘ ╛╝╛╔╜Б ╞Ю╔Ю╒═╜
|
предыдущем. В результате может быть в любой момент прерван |
║╔╖ ЦИ╔Ю║═ ╓╚О Б═║╚╗Ф.
|
без ущерба для таблиц. |
|
|
updateRS1.pl └╔╚═╔Б Б╝╕╔ А═╛╝╔, ГБ╝ updateRS.pl, ╜╝ ╝║Ю═║═БК╒═╔Б ╒╝╞Ю╝АК
|
updateRS1.pl Делает тоже самое, что updateRS.pl, но обрабатывает вопросы |
╞╝ЮФ╗О╛╗, ╖═╞╗АК╒═О ╗╜Д╝Ю╛═Ф╗Н ╒ ╞═╛ОБЛ, А╙╗╓К╒═О
|
порциями, записывая информацию в память, скидывая |
╗╜Д╝Ю╛═Ф╗Н ╒ ║═╖Ц Б╝╚Л╙╝ ╞╝А╚╔ Б╝ё╝, ╙═╙ ╞╝ЮФ╗О
|
информацию в базу только после того, как порция |
║Ц╓╔Б ╞╝╚╜╝АБЛН ╝║Ю═║╝Б═╜═. ▌╞Б╗╛═╚Л╜К╘ Ю═╖╛╔Ю ╞╝ЮФ╗╗
|
будет полностью обработана. Оптимальный размер порции |
╖═╒╗А╗Б ╝Б ╛╝И╜╝АБ╗ ╛═Х╗╜К.
|
зависит от мощности машины. |
|
|
dumpRS.pl ▒╙╗╓К╒═╔Б ╒ Д═╘╚ ╓═╛╞ Б═║╚╗ФК word2question.
|
dumpRS.pl Скидывает в файл дамп таблицы word2question. |
|
|
dumpin2out.pl ▒╙╗╓К╒═╔Б ╒ Д═╘╚ Б═║╚╗ФЦ А╝╝Б╒╔БАБ╒╗╘
|
dumpin2out.pl Скидывает в файл таблицу соответствий |
╗╓╔╜Б╗Д╗╙═Б╝Ю ╒╝╞Ю╝А═ ╒ ║═╖╔ -> ╒╜╔Х╜╔╔ ╗╛О
|
идентификатор вопроса в базе -> внешнее имя |
(▓ЦЮ╜╗Ю.▓ЦЮ.█╝╛╔Ю).
|
(Турнир.Тур.Номер). |
|
|
dump2dump.pl ▐Ю╔╝║Ю═╖Ц╔Б ╓═╛╞ Б═║╚╗ФК word2question
|
dump2dump.pl Преобразует дамп таблицы word2question |
╞╝╓ ╓ЮЦёЦН ╖═╚╗╒╙Ц ║═╖К, ╗А╞╝╚Л╖ЦО Б═║╚╗ФК
|
под другую заливку базы, используя таблицы |
А╝╝Б╒╔БАБ╒╗╘ ╓╒ЦЕ ╖═╚╗╒╝╙. ▒ЦБЛ ╒ Б╝╛, ГБ╝
|
соответствий двух заливок. Суть в том, что |
╞Ю╗ ╞╔Ю╔╖═╚╗╒╙╔ ║═╖К ╗╖╛╔╜ОНБАО ╗╓╔╜Б╗Д╗╙═Б╝ЮК
|
при перезаливке базы изменяются идентификаторы |
╒╝╞Ю╝А╝╒. ┬А╞╝╚Л╖╝╒═╜╗╔ МБ╝ё╝ А╙Ю╗╞Б═ ╞╝╖╒╝╚О╔Б ╗╖║╔╕═БЛ
|
вопросов. Использование этого скрипта позволяет избежать |
╖═╞ЦА╙═ "╓╝╚ё╗Е" А╙Ю╗╞Б╝╒ updateRS.pl ╗ updateRS1.pl
|
запуска "долгих" скриптов updateRS.pl и updateRS1.pl |
┼Ю╝╛╔ Б╝ё╝, А╙Ю╗╞Б ╛╝╕╔Б ╗А╞╝╚Л╖╝╒═БЛАО ╞Ю╗ ╞╔Ю╔╜╝А╔ Б═║╚╗Ф,
|
Кроме того, скрипт может использоваться при переносе таблиц, |
╜═╞Ю╗╛╔Ю, А ║╗╚Л║╝ ╜═ ╙Ц╚╗Г╙╗.
|
например, с бильбо на кулички. |
|
|
delRS ⌠╓═╚О╔Б ╗╖ ╓═╛╞═ Б═║╚╗ФК word2question ╗╜Д╝Ю╛═Ф╗Н ╝
|
delRS Удаляет из дампа таблицы word2question информацию о |
╒╝╞Ю╝А═Е, А╝╝Б╒╔БАБ╒ЦНИ╗Е Ц╙═╖═╜╜К╛ Д═╘╚═╛.
|
вопросах, соответствующих указанным файлам. |
|
|
checkPBS.pl ▐Ю╝АБ═╒╚О╔Б ╞╝╚╔ ProcessedBySearch ╜═ ╝А╜╝╒═╜╗╗
|
checkPBS.pl Проставляет поле ProcessedBySearch на основании |
╗╜Д╝Ю╛═Ф╗╗ ╗╖ Б═║╚╗ФК word2question
|
информации из таблицы word2question |
|
|
|
|
┌А╞╝╛╝ё═Б╔╚Л╜К╔ Д═╘╚К:
|
Вспомогательные файлы: |
|
|
chgk.cnf ┼╝╜Д╗ёЦЮ═Ф╗╝╜╜К╘ Д═╘╚.
|
chgk.cnf Конфигурационный файл. |
|
|
chgkfiles.pm ▄╝╓Ц╚Л ╓╚О Ю═║╝БК c Д═╘╚═╛╗
|
chgkfiles.pm Модуль для работы c файлами |
|
|
dbchgk ▄╝╓Ц╚Л ╓╚О Ю═║╝БК А ║═╖╝╘
|
dbchgk Модуль для работы с базой |
|
|
|
|
|
|
|
|
▒Б═╜╓═ЮБ╜К╔ ╞Ю╝Ф╔╓ЦЮК
|
Стандартные процедуры |
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~ |
|
|
▐╝╚╜═О ╖═╚╗╒╙═
|
Полная заливка |
|
|
┤═╞ЦАБ╗БЛ mkRS.pl, ╖═Б╔╛ updateRS.pl ╗ ╞╝╓╝╕╓═БЛ АЦБ╙╗ ╗╚╗ ║╝╚ЛХ╔.
|
Запустить mkRS.pl, затем updateRS.pl и подождать сутки или больше. |
┌╛╔АБ╝ updateRS.pl ╛╝╕╜╝ ╗А╞╝╚Л╖╝╒═БЛ updateRS1.pl, Б╝ё╓═ ║Ц╓╔Б ╞╝║КАБЮ╔╔,
|
Вместо updateRS.pl можно использовать updateRS1.pl, тогда будет побыстрее, |
╜╝ ╒АЯ Ю═╒╜╝ ╓╝╒╝╚Л╜╝ ╓╝╚ё╝.
|
но всё равно довольно долго. |
|
|
|
|
▐╔Ю╔╜╝А Б═║╚╗Ф ╜═ ╓ЮЦёЦН ╛═Х╗╜Ц
|
Перенос таблиц на другую машину |
|
|
█═ ╞╔Ю╒╝╘ ╛═Х╗╜╔:
|
На первой машине: |
dumpRS.pl dump1
|
dumpRS.pl dump1 |
dumpin2out.pl first
|
dumpin2out.pl first |
|
|
┤═Б╔╛ ╖═╚╗БЛ dump1 ╗ first ╜═ ╒Б╝ЮЦН ╛═Х╗╜Ц ╗ Ц╕╔ Б═╛:
|
Затем залить dump1 и first на вторую машину и уже там: |
dumpin2out.pl second
|
dumpin2out.pl second |
dump2dump.pl dump1 dump2 first second
|
dump2dump.pl dump1 dump2 first second |
loaddump second
|
loaddump second |
|
|
┌А╔ А╝╖╓═╜╜К╔ Д═╘╚К ╛╝╕╜╝ Ц╓═╚╗БЛ.
|
Все созданные файлы можно удалить. |
|
|
└╝║═╒╚╔╜╗╔ ╒ ║═╖Ц ╜╝╒КЕ Д═╘╚╝╒
|
Добавление в базу новых файлов |
|
|
└╝║═╒╗БЛ Д═╘╚К А╙Ю╗╞Б╝╛ updatedb.pl ╗ ╖═╞ЦАБ╗БЛ updateRS.pl.
|
Добавить файлы скриптом updatedb.pl и запустить updateRS.pl. |
²Б╝Б А╙Ю╗╞Б ё╔╜╔Ю╗ЮЦ╔Б А╞╗А╝╙ ╜╔Ю═А╞╝╖╜═╜╜КЕ А╚╝╒.
|
Этот скрипт генерирует список нераспознанных слов. |
┬Е ╜═Г═╚Л╜К╔ Д╝Ю╛К ╛╝╕╜╝ ╓╝║═╒╗БЛ ╒ А╚╝╒═ЮЛ mydict.koi.
|
Их начальные формы можно добавить в словарь mydict.koi. |
|
|
┌ ╞Ю╗╜Ф╗╞╔, МБЦ ╞Ю╝Ф╔╓ЦЮЦ Е╝Ю╝Х╝ ║К ╓╔╚═БЛ ╞╔Ю╔╓ ╖═╚╗╒╙╝╘ (╞Ю╝╒╔Ю╗╒
|
В принципе, эту процедуру хорошо бы делать перед заливкой (проверив |
Б╔╙АБ╝╒К╔ Д═╘╚К), ╜╝ ╒╝-╞╔Ю╒КЕ А╙Ю╗╞Б═ ╓╚О ╞Ю╝╒╔Ю╙╗ Д═╘╚╝╒ ╞╝╙═ ╜╔Б
|
текстовые файлы), но во-первых скрипта для проверки файлов пока нет |
(╞╝Б╝╛Ц ╙═╙ О Б╝╚Л╙╝ А╔╘Г═А ╔ё╝ ╞Ю╗╓Ц╛═╚), ═ ╒╝-╒Б╝ЮКЕ ЦБО╕╔╚╗Б
|
(потому как я только сейчас его придумал), а во-вторых утяжелит |
╞Ю╝Ф╔АА ═╞╓╔╘Б═. ▀ЦГХ╔ ╗╚╗ ╗╜╝ё╓═ (Ю═╖ ╒ ╜╔А╙╝╚Л╙╝ ╛╔АОФ╔╒) ╓╔╚═БЛ ╞╝╚╜ЦН
|
процесс апдейта. Лучше или иногда (раз в несколько месяцев) делать полную |
╞╔Ю╔╗╜╓╔╙А═Ф╗Н, ╗╚╗ А╝ЕЮ═╜╗╒ А╞╗А╝╙ ╜╝╒КЕ Д═╘╚╝╒, Ю═╖ ╒ Б╔ ╕╔ А═╛К╔
|
переиндексацию, или сохранив список новых файлов, раз в те же самые |
╜╔А╙╝╚Л╙╝ ╛╔АОФ╔╒ ╞Ю╝╓╔╚К╒═БЛ ╞Ю╝Ф╔╓ЦЮЦ Ц╓═╚╗БЛ-╓╝║═╒╗БЛ.
|
несколько месяцев проделывать процедуру удалить-добавить. |
|
|
|
|
|
|
┬А╞Ю═╒╚╔╜╗╔ АЦИ╔АБ╒ЦНИ╗Е Д═╘╚╝╒
|
Исправление существующих файлов |
|
|
▐╔Ю╔╓ Ц╓═╚╔╜╗╔╛ АБ═Ю╝╘ ║═╖К:
|
Перед удалением старой базы: |
dumpRS.pl temp
|
dumpRS.pl temp |
delRS temp А╞╗А╝╙ Ц╓═╚Я╜╜КЕ ╗╚╗ ╗А╞Ю═╒╚╔╜╜КЕ Д═╘╚╝╒
|
delRS temp список удалённых или исправленных файлов |
|
|
▐╝А╚╔ ╖═╚╗╒╙╗ Б═║╚╗Ф Questions ╗ Tournaments:
|
После заливки таблиц Questions и Tournaments: |
loaddump.pl temp
|
loaddump.pl temp |
rm temp
|
rm temp |
updateRS.pl
|
updateRS.pl |
|
|
|
|
┐╔╜╔Ю═Ф╗О ╓╝╞╝╚╜╗Б╔╚Л╜╝ё╝ А╚╝╒═ЮО
|
Генерация дополнительного словаря |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
─╒Б╝╛═Б╗Г╔А╙╗ Аё╔╜╔Ю╗Ю╝╒═╜╜К╘ ═╒Б╝╛═Б╗Г╔А╙╗╘ А╚╝╒═ЮЛ
|
Автоматически сгенерированный автоматический словарь |
╜Ц╕╔╜ ╓╚О ╝║Ю═║╝Б╙╗ А╚╝╒, ╙╝Б╝ЮКЕ ╜╔Б ╒ АБ═╜╓═ЮБ╜╝╛ А╚╝╒═Ю╔,
|
нужен для обработки слов, которых нет в стандартном словаре, |
╜╝ ╙╝Б╝ЮК╔ ╒АБЮ╔Г═НБАО ╒ ║═╖╔, ╞Ю╗ГЯ╛ ╒ Ю═╖╜КЕ Д╝Ю╛═Е.
|
но которые встречаются в базе, причём в разных формах. |
┌ ╝А╜╝╒╜╝╛, МБ╝ ╗╛╔╜═ А╝║АБ╒╔╜╜К╔. ░═║╝Б═ МБ╝ ╝╓╜╝Ю═╖╝╒═О,
|
В основном, это имена собственные. Работа это одноразовая, |
╝╜═ ╞Ю╝╓╔╚═╜═, ╞╝Б╝╛Ц А╙Ю╗╞БК ╜╔ ╒К╙╚═╓К╒═Н.
|
она проделана, потому скрипты не выкладываю. |
|
|
1. ▒╓╔╚═╚╗ ╞╝╚╜К╘ А╞╗А╝╙ ЮЦАА╙╗Е А╚╝╒╝Д╝Ю╛, ╒АБЮ╔Г═НИ╗ЕАО ╒ ║═╖╔.
|
1. Сделали полный список русских словоформ, встречающихся в базе. |
|
|
2. ▐Ю╝╒╔Ю╗╚╗ ╙═╕╓ЦН А╚╝╒╝Д╝Ю╛Ц, ╗А╞╝╚Л╖ЦО ╝А╜╝╒╜К╔ А╚╝╒═Ю╗,
|
2. Проверили каждую словоформу, используя основные словари, |
╞╝╚ЦГ╗╚╗ А╞╗А╝╙ ╜╔╝╞╝╖╜═╜╜КЕ А╚╝╒╝Д╝Ю╛
|
получили список неопознанных словоформ |
|
|
3. ▐╝АБЮ╝╗╚╗ ёЮ═Д, ╒╔ЮХ╗╜К ╙╝Б╝Ю╝ё╝ -- ╜╔╝╞╝╖╜═╜╜К╔ А╚╝╒╝Д╝Ю╛К (╝╙╝╚╝ 70000),
|
3. Построили граф, вершины которого -- неопознанные словоформы (около 70000), |
═ ЮЯ║Ю╝ ╔АБЛ ╒ Б╝╛ ╗ Б╝╚Л╙╝ Б╝╛ А╚ЦГ═╔, ╙╝ё╓═ ╝╓╜═ А╚╝╒╝Д╝Ю╛═
|
а рёбро есть в том и только том случае, когда одна словоформа |
╛╝╕╔Б О╒╚ОБЛАО ╜═╚Л╜╝╘ Д╝Ю╛╝╘ ╓ЮЦё╝╘.
|
может являться нальной формой другой. |
|
|
4. ░═╖║╗╚╗ ёЮ═Д ╜═ ╙╝╛╞╝╜╔╜БК А╒О╖╜╝АБ╗, ╒ ╙═╕╓╝╘ ╞╝╞КБ╒╚╗АЛ
|
4. Разбили граф на компоненты связности, в каждой попытвлись |
╜═╘Б╗ А╚╝╒╝Д╝Ю╛Ц, ╙╝Б╝Ю═О ╛╝╕╔Б ║КБЛ ╜═Г═╚Л╜╝╘ Д╝Ю╛╝╘ ╒А╔Е ╝АБ═╚Л╜КЕ.
|
найти словоформу, которая может быть начальной формой всех остальных. |
┘А╚╗ Б═╙═О ╜═Х╚═АЛ -- ╓╝║═╒╗╚╗ ╔Я ╒ ╓╝╞╝╚╜╗Б╔╚Л╜К╘ А╚╝╒═ЮЛ.
|
Если такая нашлась -- добавили её в дополнительный словарь. |
|
|
┌ Ю╔╖Ц╚ЛБ═Б╔ Ю═║╝БК МБ╝ё╝ ═╚ё╝Ю╗Б╛═ ╝║Ю═╖╝╒═╚╗АЛ ╓╝╞А╚╝╒═ЮЛ (╝╙╝╚╝ 7000
|
В результате работы этого алгоритма образовались допсловарь (около 7000 |
╜═Г═╚Л╜КЕ Д╝Ю╛) ╗ А╞╗А╝╙ Б═╙ ╗ ╜╔╝╞╝╖╜═╜╜КЕ А╚╝╒╝Д╝Ю╛ (╗Е ╝АБ═╚╝АЛ
|
начальных форм) и список так и неопознанных словоформ (их осталось |
╝╙╝╚╝ 40000). │╝╚ЛХ═О Г═АБЛ МБ╗Е А╚╝╒ -- ╝ЮД╝ёЮ═Д╗Г╔А╙╗╔ ╝Х╗║╙╗. ▌Г╔╜Л
|
около 40000). Большая часть этих слов -- орфографические ошибки. Очень |
╛╜╝ё╝ ╗╖ ╜╗Е ╞╝╚ЦГ╗╚╗АЛ ╗╖-╖═ Б╝ё╝, ГБ╝ ╒ ╜╔╙╝Б╝ЮКЕ Д═╘╚═Е ╒ ЮЦАА╙╗Е
|
много из них получились из-за того, что в некоторых файлах в русских |
А╚╝╒═Е ╒АБЮ╔Г═НБАО ╚═Б╗╜А╙╗╔ ║Ц╙╒К, А╝╒╞═╓═НИ╗╔ ╞╝ ╜═Г╔ЮБ═╜╗Н А ЮЦАА╙╗╛╗.
|
словах встречаются латинские буквы, совпадающие по начертанию с русскими. |
|
|
└╚О ╒А╔╝║И╔╘ ё═Ю╛╝╜╗╗ ╜╔╝║Е╝╓╗╛╝ А╓╔╚═БЛ А╚╔╓ЦНИ╔╔:
|
Для всеобщей гармонии необходимо сделать следующее: |
|
|
1. ┬А╞Ю═╒╗БЛ ╝ЮД╝ёЮ═Д╗Г╔А╙╗╔ ╝Х╗║╙╗
|
1. Исправить орфографические ошибки |
2. ▐Ю╝╒╔Ю╗БЛ ╗ ╗А╞Ю═╒╗БЛ ═╒Б╝╛═Б╗Г╔А╙╗ Аё╔╜╔Ю╗Ю╝╒═╜╜К╔ ╜═Г═╚Л╜К╔ Д╝Ю╛К.
|
2. Проверить и исправить автоматически сгенерированные начальные формы. |
3. └╝║═╒╗БЛ ╒ А╚╝╒═ЮЛ ╞╝ГЯ╛ ╖ЮО ╜╔ ╝╞╝╖╜═╜╜К╔ А╚╝╒╝Д╝Ю╛К.
|
3. Добавить в словарь почём зря не опознанные словоформы. |
|
|
┌Б╝ЮК╛ ╗ БЮ╔БЛ╗╛ ╞Ц╜╙Б═╛╗ О ╗╜╝ё╓═ ╛╔╓╚╔╜╜╝ ╗ ╞╔Г═╚Л╜╝ ╖═╜╗╛═НАЛ.
|
Вторым и третьим пунктами я иногда медленно и печально занимаюсь. |
|
|
|
|
▒БЮЦ╙БЦЮ═ Б═║╚╗Ф ╓╚О ЮЦАА╙╝ё╝ ╞╝╗А╙═
|
Структура таблиц для русского поиска |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
▓═║╚╗Ф═ nf. ┌ МБ╝╘ Б═║╚╗Ф╔ ╕╗╒ЦБ А╞╗А╝╙ ╜═Г═╚Л╜К╔ Д╝Ю╛К.
|
Таблица nf. В этой таблице живут список начальные формы. |
|
|
▐╝╚О:
|
Поля: |
|
|
id INT UNSIGNED - ╗╓╔╜Б╗Д╗╙═Б╝Ю ╜═Г═╚Л╜╝╘ Д╝Ю╛К
|
id INT UNSIGNED - идентификатор начальной формы |
word CHAR(30) - А═╛═ ╜═Г═╚Л╜═О Д╝Ю╛═, ╖═╞╗А═╜╜═О
|
word CHAR(30) - сама начальная форма, записанная |
╖═ё╚═╒╜К╛╗ ЮЦАА╙╗╛╗ ║Ц╙╒═╛╗.
|
заглавными русскими буквами. |
flag CHAR(5) - А╞╗А╝╙ Д╚═ё╝╒ Б═║╚╗ФК ═ДД╗╙А╝╒
|
flag CHAR(5) - список флагов таблицы аффиксов |
number - ╙╝╚╗Г╔АБ╒╝ ╒Е╝╕╓╔╜╗╘ Д╝Ю╛ ╓═╜╜╝╘ ╜═Г═╚Л╜╝╘
|
number - количество вхождений форм данной начальной |
Д╝Ю╛К ╒ ╒╝╞Ю╝АК
|
формы в вопросы |
|
|
▓═║╚╗Ф═ nests. ┌ МБ╝╘ Б═║╚╗Ф╔ ╕╗╒ЦБ ╞═ЮК А╝╝Б╒╔БАБ╒╗╘ А╚╝╒╝Д╝Ю╛═ -
|
Таблица nests. В этой таблице живут пары соответствий словоформа - |
╜═Г═╚Л╜═О Д╝Ю╛═. ▌╓╜╝╘ А╚╝╒╝Д╝Ю╛╔ ╛╝ёЦБ А╝╝Б╒╔БАБ╒╝╒═БЛ ╜╔А╙╝╚Л╙╝
|
начальная форма. Одной словоформе могут соответствовать несколько |
╜═Г═╚Л╜КЕ Д╝Ю╛.
|
начальных форм. |
|
|
▐╝╚О:
|
Поля: |
|
|
id INT UNSIGNED - ╗╓╔╜Б╗Д╗╙═Б╝Ю ╖═╞╗А╗
|
id INT UNSIGNED - идентификатор записи |
w1 CHAR(30) - А╚╝╒╝Д╝Ю╛═, ╖═╞╗А═╜╜═О ╖═ё╚═╒╜К╛╗ ║Ц╙╒═╛╗
|
w1 CHAR(30) - словоформа, записанная заглавными буквами |
w2 INT UNSIGNED - ╗╓╔╜Б╗Д╗╙═Б╝Ю ╜═Г═╚Л╜╝╘ Д╝Ю╛К.
|
w2 INT UNSIGNED - идентификатор начальной формы. |
|
|
|
|
▓═║╚╗Ф═ word2question. ▓═║╚╗Ф═ А╝╝Б╒╔БАБ╒╗╘ ╜═Г═╚Л╜═О Д╝Ю╛═ -
|
Таблица word2question. Таблица соответствий начальная форма - |
А╞╗А╝╙ ╒Е╝╕╓╔╜╗╘ ╒ ╒╝╞Ю╝АК. █═╒╔Ю╜╝╔, МБЦ Б═║╚╗ФЦ ╛╝╕╜╝
|
список вхождений в вопросы. Наверное, эту таблицу можно |
║К╚╝ ╝║Й╔╓╗╜╗БЛ А Б═║╚╗Ф╔╘ nf.
|
было объединить с таблицей nf. |
|
|
▐╝╚О:
|
Поля: |
|
|
word INT UNSIGNED - ╗╓╔╜Б╗Д╗╙═Б╝Ю ╜═Г═╚Л╜╝╘ Д╝Ю╛К
|
word INT UNSIGNED - идентификатор начальной формы |
questions MEDIUMBLOB - А╞╗А╝╙ ╒Е╝╕╓╔╜╗╘. ┼═╕╓╝╛Ц ╒Е╝╕╓╔╜╗Н А╝╝Б╒╔БАБ╒Ц╔Б
|
questions MEDIUMBLOB - список вхождений. Каждому вхождению соответствует |
4 ║═╘Б═: ╝╓╗╜ ╜═ ╜╝╛╔Ю ╞╝╚О, ╓╒═ ╜═ ╜╝╛╔Ю ╒╝╞Ю╝А═,
|
4 байта: один на номер поля, два на номер вопроса, |
╝╓╗╜ ╜═ ╞╝╖╗Ф╗Н ╒ ╒╝╞Ю╝А╔. ▒ Ц╕═А╝╛ ╕╓Ц, ╙╝ё╓═
|
один на позицию в вопросе. С ужасом жду, когда |
▌╚╔ё ╓╝║═╒╗Б ╒╝╞Ю╝А ╜╝╛╔Ю 65536 ╗ ╞Ю╗╓ЯБАО
|
Олег добавит вопрос номер 65536 и придётся |
Ц╒╔╚╗Г╗╒═БЛ Г╗А╚╝ ║═╘Б, ╝Б╒╔╓╔╜╜КЕ ╜═ ╒Е╝╕╓╔╜╗╔
|
увеличивать число байт, отведенных на вхождение |
╗╚╗ ╒╝╖╗БЛАО А ║╗Б═╛╗ :) ∙Ю═╜╗БАО Б╝╚Л╙╝ ╜╗╕╜╗╘ ║═╘Б
|
или возиться с битами :) Хранится только нижний байт |
╜╝╛╔Ю═ ╒Е╝╕╓╔╜╗О ╒ ╞╝╚╔. ▐╝ёЮ╔Х╜╝АБЛ, А╒О╖═╜╜ЦН
|
номера вхождения в поле. Погрешность, связанную |
А МБ╗╛, АГ╗Б═Н ╞Ю╔╜╔║Ю╔╕╗╛╝ ╛═╚╝╘.
|
с этим, считаю пренебрежимо малой. |
|
|
|
|
▐╝╗А╙
|
Поиск |
~~~~~
|
~~~~~ |
░ЦАА╙╗╘ ╞╝╗А╙ ╞Ю╝╗╖╒╝╓╗БАО А╙Ю╗╞Б╝╛ db.cgi ╞Ю╗ Ц╙═╖═╜╗╗ ╝╞Ф╗╗
|
Русский поиск производится скриптом db.cgi при указании опции |
"metod=rus". ┌╝Б ═╚ё╝Ю╗Б╛:
|
"metod=rus". Вот алгоритм: |
|
|
|
|
1. ┌К╓╔╚О╔╛ ╗╖ ╞╝╗А╙╝╒К╘ АБЮ╝╙╗ ╛═╙А╗╛═╚Л╜К╔ ╞╝А╚╔╓╝╒═Б╔╚Л╜╝АБ╗
|
1. Выделяем из поисковый строки максимальные последовательности |
ЮЦАА╙╗Е, ╚═Б╗╜А╙╗Е ║Ц╙╒ ╗ Ф╗ДЮ.
|
русских, латинских букв и цифр. |
|
|
2. ┬И╔╛ ╜═Г═╚Л╜К╔ Д╝Ю╛К ╞╝╚ЦГ╔╜╜КЕ А╚╝╒╝Д╝Ю╛ ╞╝ Б═║╚╗Ф╔ nests. ■╝Ю╛К,
|
2. Ищем начальные формы полученных словоформ по таблице nests. Формы, |
╙╝Б╝ЮКЕ Б═╛ ╜╔Б, ╞Ю╝╒╔ЮО╔╛ ╞╝ А╚╝╒═ЮН ╗ Б═║╚╗Ф╔ ═ДД╗╙А╝╒. ■╝Ю╛К, ╙╝Б╝ЮК╔
|
которых там нет, проверяем по словарю и таблице аффиксов. Формы, которые |
╒АЯ ╔ИЯ ╜╔╝╞╝╖╜═╜К, АГ╗Б═╔╛ ╜╔╜═╘╓╔╜╜К╛╗.
|
всё ещё неопознаны, считаем ненайденными. |
|
|
3. ▐╝ Б═║╚╗Ф╔ word2questions ╗И╔╛ А╞╗А╙╗ ╒Е╝╕╓╔╜╗╘ А╚╝╒ ╒
|
3. По таблице word2questions ищем списки вхождений слов в |
╖═БЮ╔║╝╒═╜╜К╔ ╞╝╚О, ╒К╓╔╚О╔╛ А╞╗А╙╗ ╒╝╞╝А╝╒, ╒ ╙╝Б╝ЮК╔ ╒Е╝╓ОБ А╚╝╒═,
|
затребованные поля, выделяем списки вопосов, в которые входят слова, |
╒ ╖═╒╗А╗╛╝АБ╗ ╝Б ╖╜═Г╔╜╗О ╝╞Ф╗╗ all ║╔ЮЯ╛ ╗Е ╝║Й╔╓╗╜╔╜╗╔ ╗╚╗ ╞╔Ю╔А╔Г╔╜╗╔ -
|
в зависимости от значения опции all берём их объединение или пересечение - |
МБ╝ А╞╗А╝╙ ╜═╘╓╔╜╜КЕ ╒╝╞Ю╝А╝╒. ▒╝ЕЮ═╜О╔╛ ╓╚О ╙═╕╓╝ё╝ ╒╝╞Ю╝А═ А╞╗А╙╗ ╒Е╝╕╓╔╜╗╘.
|
это список найденных вопросов. Сохраняем для каждого вопроса списки вхождений. |
|
|
4. ▒Г╗Б═╔╛ ╓╚О ╙═╕╓╝ё╝ ╜═╘╓╔╜╜╝ё╝ ╒╝╞Ю╝А═ Ю╔╚╔╒═╜Б╜╝АБЛ ╞╝╗А╙╝╒╝╘ ДЮ═╖К ╗
|
4. Считаем для каждого найденного вопроса релевантность поисковой фразы и |
А╝ЮБ╗ЮЦ╔╛ ╞╝ ╜╔╘.
|
сортируем по ней. |
|
|
5. ▐Ю╗ ╒К╒╝╓╔ ╒К╓╔╚О╔╛ ╕╗Ю╜К╛ ХЮ╗ДБ╝╛ ╒Е╝╕╓╔╜╗О ╗А╙╝╛КЕ А╚╝╒.
|
5. При выводе выделяем жирным шрифтом вхождения искомых слов. |
≤═║╚╝╜, ╞╝ ╙╝Б╝Ю╝╛Ц ╒К╓╔╚ОНБАО А╚╝╒═, Д╝Ю╛╗ЮЦ╔БАО ╞╝ Б═║╚╗Ф╔
|
Шаблон, по которому выделяются слова, формируется по таблице |
nests.
|
nests. |
|
|
|
|
┌ db.cgi ╓╝║═╒╚╔╜═ Б═╙╕╔ ╝╞Ф╗О debug, ╞Ю╗ ЦАБ═╜╝╒╙╔ ╙╝Б╝Ю╝╘
|
В db.cgi добавлена также опция debug, при установке которой |
╒К╒╝╓╗БАО ╝Б╚═╓╝Г╜═О ╗╜Д╝Ю╛═Ф╗О.
|
выводится отладочная информация. |
|
|
┌ db.cgi ╞╝╓╓╔Ю╕╗╒═НБАО Б═╙╕╔ ╞╝╗А╙ ╞╝ Simple Query ╗ Advanced
|
В db.cgi поддерживаются также поиск по Simple Query и Advanced |
Query (╙═╙ ╗Е ╞╝╜╗╛═╔Б altavista), ╜╝ ╝╙═╖═╚╝АЛ, ГБ╝
|
Query (как их понимает altavista), но оказалось, что |
╞╝╗А╙ ╞╝ Ю╔ёЦ╚ОЮ╜╝╛Ц ╒КЮ═╕╔╜╗Н ╜═ ╞ОБ╗╓╔АОБ╗ БКАОГ═Е ╒╝╞Ю╝А╝╒ Ю═║╝Б═╔Б
|
поиск по регулярному выражению на пятидесяти тысячах вопросов работает |
Г╔Ю╔АГЦЮ ╓╝╚ё╝, ╞╝Б╝╛Ц МБ╗ ╒╝╖╛╝╕╜╝АБ╗ ╜╔ ╗А╞╝╚Л╖ЦНБАО.
|
чересчур долго, потому эти возможности не используются. |
█╝, ╒╝╝║И╔-Б╝, ╓╚О ╜╗Е ╔АБЛ ╝╞Ф╗╗ "metod=simple" ╗ "metod=advancde".
|
Но, вообще-то, для них есть опции "metod=simple" и "metod=advancde". |
|
|
■╝Ю╛Ц╚═ Ю╔╚╔╒═╜Б╜╝АБ╗
|
Формула релевантности |
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~ |
≈╔АБ╜╝ ё╝╒╝ЮО, О ╒╖О╚ ╞╔Ю╒ЦН ╞Ю╗Х╔╓ХЦН ╜═ Ц╛ Д╝Ю╛Ц╚Ц, ╒Ю╝╓╔ ЕЦ╓╝-║╔╓╜╝
|
Честно говоря, я взял первую пришедшую на ум формулу, вроде худо-бедно |
Ю═║╝Б═╔Б.
|
работает. |
|
|
▐ЦАБЛ ╞╝╗А╙╝╒═О ДЮ═╖═ А╝АБ╝╗Б ╗╖ А╚╝╒ s1,s2,...sn.
|
Пусть поисковая фраза состоит из слов s1,s2,...sn. |
┼═╕╓╝╔ ╜═╘╓╔╜╜╝╔ А╚╝╒╝ ╓╝║═╒╚О╔Б ╙ Ю╔╚╔╒═╜Б╜╝АБ╗ А╚╔╓ЦНИ╔╔ ╖╜═Г╔╜╗╔:
|
Каждое найденное слово добавляет к релевантности следующее значение: |
╙╝╚╗Г╔АБ╒╝_╒Е╝╕╓╔╜╗╘_╒_╒╝╞Ю╝А+1000+1000/╙╝╚╗Г╔АБ╒╝_╒Е╝╕╓╔╜╗╘_╒_║═╖Ц.
|
количество_вхождений_в_вопрос+1000+1000/количество_вхождений_в_базу. |
|
|
┼═╕╓═О ╞═Ю═ (si, sj) ╓╝║═╒╚О╔Б ╙ Ю╔╚╔╒═╜Б╜╝АБ╗ А╚╔╓ЦНИ╔╔ ╖╜═Г╔╜╗╔:
|
Каждая пара (si, sj) добавляет к релевантности следующее значение: |
10 * (10- (min ( distance(i,j) , 10)).
|
10 * (10- (min ( distance(i,j) , 10)). |
|
|
distance(i,j)=min(|i-j-pi+pj|)
|
distance(i,j)=min(|i-j-pi+pj|) |
(pi ╗ pj -- ╞╝╖╗Ф╗╗ А╚╝╒ i ╗ j ╒ ╒╝╞Ю╝А╔, ╛╗╜╗╛Ц╛
|
(pi и pj -- позиции слов i и j в вопросе, минимум |
АГ╗Б═╔БАО ╞╝ ╒А╔╛ pi ╗ pj)
|
считается по всем pi и pj) |
|
|
|
|
|
|
▒ЦБЛ ╒ Б╝╛, ГБ╝ ╛═╙А╗╛═╚Л╜═О Ю╔╚╔╒═╜Б╜╝АБЛ ║Ц╓╔Б Ц ╒╝╞Ю╝А╝╒, ╒ ╙╝Б╝ЮКЕ
|
Суть в том, что максимальная релевантность будет у вопросов, в которых |
╒АБЮ╔Г═╔БАО ╛═╙А╗╛═╚Л╜╝╔ ╙╝╚╗Г╔АБ╒╝ ╗А╙╝╛КЕ А╚╝╒ (МБ╝ ╗╛╔╔Б ╖╜═Г╔╜╗╔,
|
встречается максимальное количество искомых слов (это имеет значение, |
╔А╚╗ all=no), ╖═Б╔╛ ЦГ╗БК╒═╔БАО Ю═А╞Ю╝АБЮ═╜Я╜╜╝АБЛ ╙═╕╓╝ё╝ А╚╝╒═ ╗
|
если all=no), затем учитывается распространённость каждого слова и |
║╚╗╖╝АБЛ ╗Е ╒ ╒╝╞Ю╝А╔ ╓ЮЦё ╙ ╓ЮЦёЦ. ▄═╙А╗╛═╚Л╜═О Ю╔╚╔╒═╜Б╜╝АБЛ,
|
близость их в вопросе друг к другу. Максимальная релевантность, |
╙═╙ ╞Ю═╒╗╚╝, ║Ц╓╔Б Ц ╒╝╞Ю╝А╝╒, ╒ ╙╝Б╝ЮКЕ ╞╝╗А╙╝╒К╔ А╚╝╒═ ╒АБЮ╔Г═НБАО ╞╝╓ЮО╓,
|
как правило, будет у вопросов, в которых поисковые слова встречаются подряд, |
╒ Б╝╛ ╕╔ ╞╝ЮО╓╙╔, ГБ╝ ╗ ╒ ╖═╞Ю╝А╔.
|
в том же порядке, что и в запросе. |
|
|
|
|
|
|
┼═╙╗╔ Д╝Ю╛К ╞Ю╗╖╜═НБАО ╝╓╗╜═╙╝╒К╛╗
|
Какие формы признаются одинаковыми |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
▓╔, ╙╝Б╝ЮК╔ ╞╝╞═╓═НБ ╒ ╝╓╜╝ ё╜╔╖╓╝, А╝ё╚═А╜╝ Б═║╚╗Ф╔ ═ДД╗╙А╝╒ А╚╝╒═ЮО ▀╔║╔╓╔╒═
|
Те, которые попадают в одно гнездо, согласно таблице аффиксов словаря Лебедева |
╓╚О ispell.
|
для ispell. |
|
|
▌╞╗АК╒═БЛ, ╙═╙╗╔ А╚╝╒╝╗╖╛╔╜╔╜╗О ЦГ╗БК╒═НБАО, ═ ╙═╙╗╔ -- ╜╔Б,
|
Описывать, какие словоизменения учитываются, а какие -- нет, |
╜╔╞Ю╝АБ╝. ▐╝А╙╝╚Л╙Ц А╚╝╒═ЮЛ А╝╖╓═╜ ╜╔ ╓╚О ╝╞Ю╔╓╔╚╔╜╗О ╜═Г═╚Л╜╝╘ Д╝Ю╛К,
|
непросто. Поскольку словарь создан не для определения начальной формы, |
═ ╓╚О ╞Ю╝╒╔Ю╙╗ ╝ЮД╝ёЮ═Д╗╗, ╝Г╔╜Л ╛╜╝ё╝ А╚╝╒╝╗╖╛╔╜╔╜╗╘ ╝╜ ╜╔ ЦГ╗БК╒═╔Б.
|
а для проверки орфографии, очень много словоизменений он не учитывает. |
█═╞Ю╗╛╔Ю, ╒ А╚╝╒═Ю╔ ╛╝╕╜╝ ╒АБЮ╔Б╗БЛ ╗ А╚╝╒╝ ═ё╜╔Ф, ╗ А╚╝╒╝ ═ё╜Ф╔╒ --
|
Например, в словаре можно встретить и слово агнец, и слово агнцев -- |
╓╝║═╒╗БЛ Д╝Ю╛К ╒ А╚╝╒═ЮЛ, ╒╗╓╗╛╝, ╝╙═╖═╚╝АЛ ╞Ю╝И╔, Г╔╛ ╞Ю═╒╗БЛ
|
добавить формы в словарь, видимо, оказалось проще, чем править |
Б═║╚╗ФЦ ═ДД╗╙А╝╒. ▐╝-Е╝Ю╝Х╔╛Ц ╜═╓ Б═║╚╗Ф╔╘ ═ДД╗╙А╝╒ ╗ А╚╝╒═ЮЯ╛ ╜═╓╝ ╝Г╔╜Л
|
таблицу аффиксов. По-хорошему над таблицей аффиксов и словарём надо очень |
А╔ЮЛЯ╖╜╝ Ю═║╝Б═БЛ. ┌ ╗╓╔═╚╔, ╜═╓╝ ╗А╞╝╚Л╖╝╒═БЛ ╜╔ А╚╝╒═ЮЛ ▀╔║╔╓╔╒═, ═
|
серьёзно работать. В идеале, надо использовать не словарь Лебедева, а |
А╚╝╒═ЮЛ ┤═╚╗╖╜О╙═, ╜╝ ╔ё╝ Б═║╚╗Ф ╒ Ц╓╝║╜╝╛ ╓╚О ╝║Ю═║╝Б╙╗ М╚╔╙БЮ╝╜╜╝╛ ╒╗╓╔
|
словарь Зализняка, но его таблиц в удобном для обработки электронном виде |
О ╜╔ ╜═ХЯ╚.
|
я не нашёл. |
|
|
|
|
░╝╛═╜ ▒╔╛╗╖═Ю╝╒
|
Роман Семизаров |
roma7@zaba.ru
|
roma7@zaba.ru |
|
|
|
|