Структура данных для многоязычного словаря?

Краткое описание в одну строку: предлагает оптимальную (скорость поиска / компактность) структуру (и) данных для многоязычного словаря, представляющего преимущественно индоевропейские языки (список внизу) .

Предположим, вы хотите создать некоторую структуру (ы) данных для реализации многоязычного словаря, скажем, для самых популярных европейских языков в Интернете, ранжируя выбор языка по количеству веб-страницы (приблизительный список языков приведен в конце этого вопроса). Цель состоит в том, чтобы сохранить рабочий словарный запас каждого языка (например, 25 000 слов для английского языка и т. Д.) Исключение собственных существительных. Не уверен, храним ли мы множественное число, спряжения глаголов, префиксы и т. Д. Или добавляем специфичные для языка правила о том, как они образуются из существительных единственного числа или основ глаголов. Также вы можете выбрать способ кодирования и обработки акцентов, дифтонгов и специальных символов языка, например возможно, где возможно, мы транслитерируем вещи (например, Романизируем немецкий ß как 'ss', а затем добавим правило для его преобразования). Очевидно, что если вы решите использовать 40-100 символов и дерево, будет слишком много ветвей, и большинство из них будут пустыми.

Определение задачи: Какие бы структуры данных вы ни использовали, вы должны выполнить оба действия. следующее:

  1. Основная операция поиска - быстро получить указание «Да, это допустимое слово для языков A, B и F, но не для C, D или E». Итак, если N = 40 языков, ваша структура быстро возвращает 40 логических значений.
  2. Вторичная операция - вернуть некоторый указатель / объект для этого слова (и всех его вариантов) для каждого языка (или null, если оно было недопустимым. ). Этот указатель / объект может быть определен пользователем, например. Часть речи и определение словаря / тезаурус сравнения / список переводов на другие языки / ... Это может быть языковое или независимое от языка, например общее определение пиццы )

И главный показатель эффективности - это компромисс между а) компактностью (для всех N языков) и б) скоростью поиска . Время установки не имеет значения. Ограничение компактности исключает подходы, требующие расточительного использования памяти, такие как «сохранять отдельный хэш для каждого слова» или «сохранять отдельный хеш для каждого языка и каждого слова в этом языке» .

Итак:

  1. Каковы возможные структуры данных, как они ранжируются в Кривая скорости / компактности поиска?
  2. У вас есть унифицированная структура для всех N языков или разделов, например германские языки в одну субструктуру, славянские в другой и т. д.? или просто N отдельных структур (что позволит вам Huffman-encode)?
  3. Какое представление вы используете для символов, акцентов и специальных символов языка?
  4. В идеале, дайте ссылку на алгоритм или код, особенно. Python или иначе C. -

(Я проверил SO, и там были связанные вопросы, но не этот точный вопрос. Конечно, не ищу базу данных SQL. Одна статья 2000 года, которая может быть полезна: «Оценка английского и не -Использование английского языка в сети Интернет »- Grefenstette & Nioche . И один список многоязычных словарей ) Ресурсы: два многоязычных онлайн-словаря: Interglot (en / ge / nl / fr / sp / se) и LookWayUp (en fr / ge / sp / nl / pt) .


Включенные языки:

Вероятно, в основном индоевропейские языки для простоты: английский, французский, испанский, немецкий, итальянский, шведский + албанский, чешский, датский, голландский, эстонский, Финский, венгерский, исландский, латышский, литовский, норвежский,Польский, португальский, румынский, русский, сербохорватский, словацкий, словенский + бретонский, каталонский, корсиканский, эсперанто, гэльский, валлийский

Возможно, включает русский, славянский, турецкий, исключая арабский, иврит, иранский, индийский и т. Д. Может включать малайский семья тоже. Скажите, чего можно достичь.

10
задан 19 revs, 4 users 99% 17 October 2019 в 15:43
поделиться