|
|
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Добрый день, на данный момент передо мной стоит задача разработки бд для мультиязычного словаря. Подскажите, пожалуйста, насколько правильно будет данное решение? Условия задачи: 1. Имеется 5 языков. 2. В будущем предполагается добавление новых языков. 3. В каждом языке более 10 000 слов. 4. В будущем предполагается добавление новых слов. 5. Каждое слово может иметь несколько значений-переводов. 6. Каждое слово с большой вероятностью имеет перевод на все доступные в системе языки. Будет использоваться SQLite или MySQL. Сокращения: PK - первичный ключ. FK - внешний ключ. words word_id - PKword_value language_id - FK languages language_id - PKlanguage_valuelanguage_code translations translate_id - PK first_word_id - FK second_word_id - FK Если насчет первых двух таблиц у меня не возникает особых сомнений, то как поступить с таблицей translations пока не знаю. Как правильно заполнять данную таблицу, чтобы увеличить скорость поиска перевода: Любое слово, если оно имеет перевод, должно встретиться в левой колонке (first_word_id), даже если оно уже было в правой колонке (second_word_id) или это приведет к черезмерному учеличению объема бд и как следствие замедлению поиска? Или же наоборот скорость поиска увеличится, т.к. будет осуществляться только по одному столбцу. Пример: (вместо, id слов я подставил значения слов, чтобы было нагляднее) translate_id first_word_id second_word_id1 table таблица2 table стол3 таблица table4 стол table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 14:50 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
CasemasterЕсли насчет первых двух таблиц у меня не возникает особых сомнений, то как поступить с таблицей translations пока не знаю. Выкинуть её. Убрать с таблицы Words первичный ключ и валить все переводы в неё, объединяя по id. При этом table (который стол) и table (которая таблица) будут разными словами. В качестве бонуса получишь возможность переводить с любого языка на любой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 14:56 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ! А если появится необходимость добавить такую функциональность как синонимы, антонимы, категории слов (пример: фрукты, предметы быта, причем каждое слово также может состоять в разных категориях). То лучше добавить новые таблицы как, например: (Вместо значений нужно использовать word_id, но так нагляднее) Synonyms word_id synonym_idБежать мчатьсяБежать нестись Antonyms word_id antonym_idБежать стоятьБежать ползти Categories category_id - PK category_value1 фрукты2 продукты3 еда Categories_entries word_id - FK category_id - FKгруша фруктыгруша продуктыгруша едахлеб продуктыхлеб еда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 16:27 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovCasemasterЕсли насчет первых двух таблиц у меня не возникает особых сомнений, то как поступить с таблицей translations пока не знаю. Выкинуть её. Убрать с таблицы Words первичный ключ и валить все переводы в неё, объединяя по id. При этом table (который стол) и table (которая таблица) будут разными словами. В качестве бонуса получишь возможность переводить с любого языка на любой. Очень сомнительный способ, подразумевающий обязательную транзитивность перевода. Возможность перевода с любого языка на любой есть и в изначальной схеме автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 16:34 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинDimitry Sibiryakovпропущено... Выкинуть её. Убрать с таблицы Words первичный ключ и валить все переводы в неё, объединяя по id. При этом table (который стол) и table (которая таблица) будут разными словами. В качестве бонуса получишь возможность переводить с любого языка на любой. Очень сомнительный способ, подразумевающий обязательную транзитивность перевода. Возможность перевода с любого языка на любой есть и в изначальной схеме автора. Я тоже немного сомневаюсь в транзитивности перевода. Знакомый лингвист говорит, что исключения есть и если есть возможность, то лучше не завязываться на каком-то эталоне (id в нашем случае). С другой стороны, если предположить что языков как минимум 5, в каждом 10 000 слов, и для каждого слова 5 значений-переводов на каждый другой язык, то таблица translations будет состоять из как минимум: 10 000 (слов) * 5 (значений-переводов) * 5 (языков изначального слова) * 4 (языков для слова - перевода) ~ 1 000 000 записей в таблице переводов. Собственно, если я хочу найти переводы слова table, исходя из предложенной мною схемы, я должен: 1. сначала найти в таблице words значение word_id по условию word_value = 'table' и language_id = 1 (допустим это код english). 2. Найти в таблице translations значение second_word_id (это код слова-перевода) по условию first_word_value = word_id (результат первого запроса) 3. По полученным значениям сделать join на таблицу words, чтобы получить значения слов и выбрать только нужные языки. Не имею опыта работы с таблицами таких размеров (1 000 000 записей) , поэтому интересует скорость поиска в ней. Скорость вставки и редактирования таблицы переводов не волнует совсем, т.к. это будет происходить очень редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 17:18 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Миллион записей - это немного, при наличии индексов поиск будет вполне шустрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 17:24 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинМиллион записей - это немного, при наличии индексов поиск будет вполне шустрым. Спасибо за ответ! А в данном случае (таблица translations ) как лучше поступить с индексами: 1. Сделать составной первичный ключ (first_word_id, second_word_id). И заполнять таблицу переводов как я уже писал выше, то есть с повторениями: first_word_id second_word_id1 (table) 10 (стол)1 (table) 15 (таблица)10 (стол) 1 (table)15 (таблица) 1(table) Т.е. чтобы при поиске перевода для определенного word_id (например 1 (table)), происходил поиск значения только в одном столбце. Но при этом будет значительное дублирование данных. 2. Или же кроме составного первичного ключа (first_word_id, second_word_id) добавить еще индекс по тем же полям, но в обратном порядке (second_word_id, first_word_id). Но в таком случае для поиска перевода нужно будет задавать условия вроде WHERE first_word_id = word_id || second_word_id = word_id. Тогда в таблице не будет дублирующих записей, но вот сколько будет занимать времени такой поиск и последующая выборка значения слова и фильтрация по необходимом языку в таблицу words, не совсем представляю. Пример таблицы переводов в таком случае: (Возможен поиск переводов в обоих направлениях с меньшим количеством записей) first_word_id second_word_id1 (table) 10 (стол)1 (table) 15 (таблица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 17:41 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Я бы не делал дублирований. Только поиск в таком случае лучше оформлять не как Код: sql 1. 2. 3. , а Код: sql 1. 2. 3. 4. 5. 6. 7. Обычно оптимизаторы лучше понимают такие конструкции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 17:56 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЯ бы не делал дублирований. Только поиск в таком случае лучше оформлять не как Код: sql 1. 2. 3. , а Код: sql 1. 2. 3. 4. 5. 6. 7. Обычно оптимизаторы лучше понимают такие конструкции Спасибо за совет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 18:10 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
CasemasterЯ тоже немного сомневаюсь в транзитивности перевода. Я исхожу из того, что первично понятие "сущность", а "наименование сущности в конкретном языке" - вторично. При таком подходе нет никакой проблемы транзитивности, поскольку для перевода задействованы только два элемента множества. Проблема возникает как раз в оригинальной постановке ТСа, когда перевод с одного небазового языка на другой небазовый выполняется в два этапа. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 19:20 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
> добавить такую функциональность как синонимы, антонимы, категории слов Casemaster, вы вообще представляете, что такое словарь? Словарь Ожегова, например, в руках держали? Понимаете, чем он отличается от тезауруса? Понимаете, почему у слов не может быть никакой категоризации? > Знакомый лингвист Это хорошо, что у вас есть знакомый лингвист. Заплатите ему немного денег, пусть он вам расскажет, как строятся словари. Все, что вы нарисовали как структуру словаря, смело выбрасывайте. Я бы рекомендовал вашему руководству также уволить постановщика задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 19:38 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
guest_20040621> добавить такую функциональность как синонимы, антонимы, категории слов Casemaster, вы вообще представляете, что такое словарь? Словарь Ожегова, например, в руках держали? Понимаете, чем он отличается от тезауруса? Понимаете, почему у слов не может быть никакой категоризации? > Знакомый лингвист Это хорошо, что у вас есть знакомый лингвист. Заплатите ему немного денег, пусть он вам расскажет, как строятся словари. Все, что вы нарисовали как структуру словаря, смело выбрасывайте. Я бы рекомендовал вашему руководству также уволить постановщика задачи. К сожалению, в техническом условии категоризация есть. Более того даже в реальных словарях категоризация встречается. Пример - словари с тематическими разделами. Там есть такие категории, как еда, одежда, и прочее. Там тоже одно слово может встречаться сразу в нескольких категориях. А можно более конкретно сказать, почему предложенная мной структура совершенно не подходит под заданные требования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 20:10 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
> К сожалению, в техническом условии категоризация есть. Это означает, что задание писал человек, который в принципе ничего не знает о словарях. В сообщении выше я уже сказал, что рекомендовал бы уволить этого человека за профнепригодность. > Более того даже в реальных словарях категоризация встречается. Например? Не общие названия, а конкретные примеры академических изданий? > Там есть такие категории, как еда, одежда, и прочее. Нет и не может быть. > А можно более конкретно сказать, почему предложенная мной структура совершенно не подходит под заданные требования? Можно, конечно. Только давайте сначала разберемся с задачей. Что именно вы хотите спроектировать и для какой цели? Словарь длиной 10 тыс. слов вызывает... хм... настороженность. И - до начала обсуждения - пожалуйста, прочтите о том, что такое тезаурус и почему невероятно сложно построить мультиязычный тезаурус. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 20:29 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
guest_20040621> К сожалению, в техническом условии категоризация есть. Это означает, что задание писал человек, который в принципе ничего не знает о словарях. В сообщении выше я уже сказал, что рекомендовал бы уволить этого человека за профнепригодность. > Более того даже в реальных словарях категоризация встречается. Например? Не общие названия, а конкретные примеры академических изданий? > Там есть такие категории, как еда, одежда, и прочее. Нет и не может быть. > А можно более конкретно сказать, почему предложенная мной структура совершенно не подходит под заданные требования? Можно, конечно. Только давайте сначала разберемся с задачей. Что именно вы хотите спроектировать и для какой цели? Словарь длиной 10 тыс. слов вызывает... хм... настороженность. И - до начала обсуждения - пожалуйста, прочтите о том, что такое тезаурус и почему невероятно сложно построить мультиязычный тезаурус. Ок, назовем тогда это не словарь, а некой справочной системой. Необходимо построить систему, которая позволяла бы пользователю ввести слово. После этого система выдавала бы перевод или переводы (если значений много) данного слова на определенный заранее язык. После этого пользователь мог бы воспользоваться функцией поиска синонимов или антонимов для определенного перевода. Кроме того, в системе есть некий каталог, в котором некоторые слова расположены по категориям (еда, одежда и т.д.). Таким образом, пользователь может также воспользоваться функцией, которая определяла бы входит указанное им слово в одну из категорий в системе. Пример, такой системы в книжном варианте - Русско-немецкий визуальный словарь. Единственное там отсутствует функция поиска синонимов, антонимов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 21:02 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
> Ок, назовем тогда это не словарь, а некой справочной системой. Словарной единицей является слово или термин? > Необходимо построить систему То есть что-то типа translate.google.com + thesaurus.com в одном флаконе? Чем ограничен набор словарных единиц? Откуда цифра 10 тысяч? > Русско-немецкий визуальный словарь Не видел, ничего не могу о нем сказать. Более распространенные примеры есть? Ваше описание похоже на тезаурус. Но это не тезаурус. Вы задачу в целом можете описать? Для чего это нужно? С чем связаны словарные единицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 21:19 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Ок, назовем тогда это не словарь, а некой справочной системой. Словарной единицей является слово или термин? > Необходимо построить систему То есть что-то типа translate.google.com + thesaurus.com в одном флаконе? Чем ограничен набор словарных единиц? Откуда цифра 10 тысяч? > Русско-немецкий визуальный словарь Не видел, ничего не могу о нем сказать. Более распространенные примеры есть? Ваше описание похоже на тезаурус. Но это не тезаурус. Вы задачу в целом можете описать? Для чего это нужно? С чем связаны словарные единицы? Да, что-то похожее на translate.google.com + thesaurus.com. Это система служит для образовательных целей, а точнее для людей изучающих иностранные языки. На данный момент для каждого языка предполагается около 10 000 слов, т.к. система рассчитана на начальный уровень языка. Соответственно для этого и нужны категории, чтобы пользователь мог посмотреть другие слова данной тематики. Набор словарных единиц может быть и увеличен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 21:30 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovCasemasterЕсли насчет первых двух таблиц у меня не возникает особых сомнений, то как поступить с таблицей translations пока не знаю. Выкинуть её. Убрать с таблицы Words первичный ключ и валить все переводы в неё, объединяя по id. При этом table (который стол) и table (которая таблица) будут разными словами. В качестве бонуса получишь возможность переводить с любого языка на любой. Хорошо, давайте для определенности заполним все таблицы для всех значений слова "стол", со всеми связями, на русском и английском языках. Канонический текст гласит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. причем Хиругический стол может называться как surgical [operating] table, так и patient plate. Какие будут предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 21:33 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherКакие будут предложения? Деканонизировать Лингво. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 21:38 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, стол 1) (мебель) table письменный стол — writing table / desk; (с выдвижными ящиками тж.) bureau; (лабораторный, рабочий) bench 2) (питание) board; diet; meals pl; (кухня) cooking, cuisine [kwɪ'ziːn] стол и квартира — board and lodging диетический стол — diet, dietary meals pl 3) (отдел в учреждении) desk, department, office стол заказов — order placement desk адресный стол — address bureau паспортный стол — passport office стол справок — information (desk) причем Хиругический стол может называться как surgical [operating] table, так и patient plate. Я бы сделал так, но еще скорей бы всего добавил в свою структуру БД таблицы словосочетаний и поле (к таблице Words) или отдельную таблицу Context, где описал бы возможные трактования слов. Languages language_id language_value1 Русский2 English3 Italiano Words word_id word_value language_id1 стол 12 мебель 13 питание 14 отдел 15 table 26 board 27 diet 28 стул 1 Translations first_word_id second_word_id1 51 61 7 Synonyms word_id synonym_word_id5 6 Для соотнесения слов по категориям: Categories_entries word_id category_id1 (Стол) 2 (Мебель)5 (table) 2 (Мебель)8 (Стул) 2 (Мебель) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 22:04 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
> для людей изучающих иностранные языки Уже что-то определенное. Значит, словарные единицы - не обязательно слова. Ключом к пониманию сложности реализации мультиязычных структур можно считать распространенный пример о количестве определений слова "снег" у эскимосов. ОК, к вашему примеру. Две задачи: связи и перевод. term () --базовый перечень терминов на базовом языке term_constraint () --практика употребления (общая лексика, отраслевая специфика, устаревшие значения и пр.; правильнее, конечно, иметь возможность использовать несколько признаков) definition () term_definition (definition_id, term_id, term_constraint_id) Это обычный словарь для одного языка (плюс части речи и пр.). Для перевода вам необходим исходный уникальный набор терминов. Не обязательно описывать его отдельной структурой, но это самый простой вариант. Как организовать перевод и связи - есть варианты. Однако, совершенно очевидно, что связи - не категоризацию! - необходимо строить посредством семантических отношений меронимы - холонимы и синонимы - антонимы. Причем, все термины должны быть описаны в базе данных явным образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2012, 22:50 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
CasemasterДобрый день, на данный момент передо мной стоит задача разработки бд для мультиязычного словаря. Подскажите, пожалуйста, насколько правильно будет данное решение? Оно ни с какой точки зрения не похоже на правильное, имхо. Если это курсовая, я посоветовал бы свалить информацию в таблицу вида term_idlanguage_idspelling С объёмами MySQL на глаз должен справиться, а в крайнем случае никто не мешает партиционировать (в том числе руками, если он не умеет сам). Обратите внимание, что переводы объединяются значением term_id, и одно слово (language+spelling) может встречаться несколько раз при наличии разных значений. Если же это более-менее серьёзная работа, то Вы имхо зашли не с того конца. Нужно сначала хорошо поставить задачу на концептуальном уровне, а уж потом думать о таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 10:33 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Casemaster Words word_id word_value language_id5 table 26 board 2 Synonyms word_id synonym_word_id5 6 Так что, теперь таблицы наши будем боардами называть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2012, 17:22 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, с board немного промашка вышла, но с другой стороны один из переводов - это же "табло, информационная таблица" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2012, 22:12 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
CasemasterCane Cat Fisher, с board немного промашка вышла, но с другой стороны один из переводов - это же "табло, информационная таблица" :) "Один из переводов" - согласен. Но "синонимы" (вообще) - не согласен. Я бы сказал, "синонимы, в одном из значений". Так что либо в таблицу синонимов - добавить поле "в значении...". Либо в саму таблицу слов добавить несколько "table", для разных значений, и синоним board пусть ссылаются только на одно из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2012, 17:31 |
|
||
|
Проектирование бд для мультиязычного словаря
|
|||
|---|---|---|---|
|
#18+
Casemaster, хочу заметить, что задачи перевода (с одного языка на другой), дешифровки сообщений (перевод с неизвестного языка на понятный), "понимания смысла" (ИИ), разбора сокращений и соотнесение с классификатором товарных строк и ...(ещё целая куча задач), до сих пор не решены в полной мере. И уж тем более средствами "таблиц". Основная проблема, насколько опнимаю, в праввильном выделении контекста сообщения и формирования "иерархии" контекстов связями. Вам тут уже немножко подсказывали на эту тему... Заметьте что в таблице слов колонка "язык" - тоже одно из контекстных ограничений... "всего лишь". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2012, 19:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38044542&tid=1541436]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 403ms |

| 0 / 0 |
