Резюме в одну строку: предлагает оптимальную структуру (скорость поиска/компактность) данных для многоязычного словаря, представляющего преимущественно индоевропейские языки (список внизу).
Допустим, вы хотите создать некоторую структуру (и) данных для реализации многоязычного словаря, скажем, самых популярных европейских языков (N ~ 40) в Интернете, ранжируя выбор языка по количеству веб-страниц. (примерный список языков приведен внизу этого вопроса). Цель состоит в том, чтобы сохранить рабочий словарный запас каждого языка (то есть 25 000 слов для английского языка и т.д.). Исключены собственные существительные. Не уверен, сохраняем ли мы множественное число, спряжения глаголов, префиксы и т.д. Или добавляем специфичные для языка правила того, как они образованы из существительных в единственном числе или основ глагола. Также вы можете выбрать способ кодирования и обработки акцентов, дифтонгов и специальных символов для конкретного языка, например, возможно, где это возможно, мы транслитерируем вещи (например, романизируем немецкий язык как "ss", а затем добавляем правило для его преобразования). Очевидно, что если вы решите использовать 40-100 символов и три, существует слишком много ветвей, и большинство из них пустые.
Определение задачи: Какую бы структуру данных вы не использовали, вы должны выполнить оба следующих действия:
- Основная операция при поиске состоит в том, чтобы быстро получить указание "Да, это допустимое слово в языках A, B и F, но не в C, D или E". Итак, если N = 40 языков, ваша структура быстро возвращает 40 Булевы.
- Вторичная операция заключается в возвращении некоторого указателя/объекта для этого слова (и всех его вариантов) для каждого языка (или ноль, если он был недействительным). Этот указатель/объект может быть определен пользователем, например, часть речи и словарное определение/тезаурус сравним/список переводов на другие языки /... Он может быть специфичным для конкретного языка или независимым от языка, например общее определение пиццы)
А основным показателем эффективности является компромисс между а) компактностью (для всех N языков) и б) скоростью поиска. Время вставки не важно. Ограничение компактности исключает бесполезные подходы, такие как "хранить отдельный хэш для каждого слова" или "хранить отдельный для каждого языка и каждого слова в этом языке".
Итак:
- Каковы возможные структуры данных, как они ранжируются на скорость поиска/кривая компактности?
- У вас есть единая структура для всех N языков или раздел, например германские языки в одну подструктуру, славянский в еще один? или просто N отдельных структур (которые позволят вам Хаффман-кодировать)?
- Какое представление вы используете для символов, акцентов и специальных символов для конкретного языка?
- В идеале, дать ссылку на алгоритм или код, особенно. Python или еще C. -
(Я проверил SO, и были связанные вопросы, но не этот точный вопрос. Конечно, я не искал базу данных SQL. Одна статья 2000 года, которая может быть полезна: "Оценка использования английского и неанглийского языков в WWW" - Grefenstette & Nioche. И один список многоязычных словарей) Ресурсы: два онлайн-многоязычных словаря: Interglot (en/ge/nl/fr/sp/se) и LookWayUp (en & lt; → fr/ge/sp/nl/pt).
Языки для включения:
Вероятно, в основном индоевропейские языки для простоты: английский, французский, испанский, немецкий, итальянский, шведский + албанский, чешский, датский, голландский, эстонский, финский, венгерский, исландский, латышский, литовский, норвежский, польский, Португальский, румынский, русский, сербохорватский, словацкий, словенский + бретонский, каталанский, корсиканский, эсперанто, гэльский, валлийский
Вероятно, включают русский, славянский, турецкий, исключая арабский, иврит, иранский, индийский и т.д. Возможно, включите и малайскую семью. Скажи мне, что достижимо.