Эффективный способ обработать исключительное/множественное слово на основе некоторого [закрытого] размера набора

16
задан Matthias Braun 21 January 2017 в 09:58
поделиться

4 ответа

Взгляните на inflector , java-проект, который позволяет выполнять Noun.pluralOf ("пользователь") или Noun. pluralOf ("user", userList.size ()) , и который обрабатывает множество вариантов и необычных случаев (человек-> люди, буханка-> буханки и т. д.), а также позволяет вам определять собственные правила сопоставления когда необходимо.

28
ответ дан 30 November 2019 в 16:13
поделиться

Это становится сложнее в других языках, кроме английского, которые inflector намерен поддерживать в будущем.

Я знаком с чешским языком, где user = uživatel и:

1 uživatel
2 uživatelé
3 uživatelé
4 uživatelé
5 uživatelů

...

Вы можете видеть, почему программы, написанные с жестко закодированным единственным и множественным числом, становятся не-i18n-able.

4
ответ дан 30 November 2019 в 16:13
поделиться

Эта функциональность встроена в Ruby on Rails. Я не знаю, где именно, но это должно быть достаточно легко найти в исходном коде, и тогда вы могли бы просто скомпилировать код.

РЕДАКТИРОВАТЬ: Нашел код:

Если я правильно помню, это в основном вопрос добавления «s» к большинству слов, хотя я считаю, что есть список (вероятно, хэш, словарь ошибок) некоторых распространенных исключений. Примечательно преобразование от «человека» к «людям» :)

Вы, конечно, столкнетесь с миром боли, если решите, что хотите интернационализировать это на другие языки, кроме английского. Добро пожаловать в мир неправильной грамматики и удачи!

0
ответ дан 30 November 2019 в 16:13
поделиться

Хм, я не совсем понимаю, зачем вам для этого нужна библиотека. Я думаю, что функция для этого тривиальна:

public String singlePlural(int count, String singular, String plural)
{
  return count==1 ? singular : plural;
}

Вызовы будут выглядеть так:

singlePlural(count, "user", "users");
singlePlural(count, "baby", "babies");
singlePlural(count, "person", "people");
singlePlural(count, "cherub", "cherubim");
... etc ...

Может быть, эта библиотека выполняет целый ряд других вещей, которые делают ее полезной. Я полагаю, вы могли бы сказать, что он предоставляет словарь всех форм множественного числа, но в любой данной программе вас не интересуют множественные числа всех слов в языке, а только те, которые вы используете в этой программе. Я предполагаю, что если слово, которое может быть в единственном или множественном числе, неизвестно во время компиляции, если это что-то введенное пользователем, тогда мне нужен сторонний словарь, а не пытаться создать его самостоятельно.

Править

Внезапно мне пришло в голову, что то, что вы искали, было функцией для обобщения множественного числа, воплощающей набор правил вроде «обычно просто добавляйте 's', но если слово заканчивается на 'y', измените 'y' на 'ies', если оно заканчивается на 's', измените его на 'ses', ... "и т. д. Я думаю, что в английском это невозможно для каких-либо практических целей: слишком много особых случаев, таких как «человек / люди» и «ребенок / дети» и т. д. Я думаю, что лучшее, что вы могли бы сделать, - это иметь общее правило «добавить», может быть, несколько других распространенных случаев, а затем длинный список исключений. Возможно, на других языках можно было бы придумать довольно простое правило.

Итак, как я сказал, если слово неизвестно во время компиляции, но исходит из пользовательского ввода, то да, сторонний словарь очень желателен.

10
ответ дан 30 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: