Функция множественного/сингулярного преобразования английского языка

Есть ли какая-либо функция (VB.NET или С#), которая может преобразовать английское слово в его единственную или в свою множественную форму?

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

Ответ 1

В dll System.Data.Entity.Design есть пространство имен, называемое PluralizationServices.

System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us")) предоставит вам объект, который предоставляет методы пояснения Pluralize, Singularize, IsPlural и IsSingular.

EF использует его для плюрализации и уникальности имен таблиц.

Ответ 2

Вы можете использовать Humanizer микробиблиотеку. Он способен на это и многое другое.

Отказ от ответственности: я являюсь создателем библиотеки.

Ответ 3

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

Ответ 4

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


Мое собственное предпочтение было бы иметь механизм преобразования вместе с набором преобразований (на удивление достаточно) для выполнения фактической работы.

Вы выполняете преобразования (от конкретного к общему) и, когда будет найдено совпадение, примените преобразование к слову.

Регулярные выражения были бы идеальным подходом к этому из-за их выразительности. Примерным набором правил для преобразования множественного числа в единственное может быть:

 1. If the word is fish, return fish.
 2. If the word is sheep, return sheep.
 3. If the word is "radii", return "radius".
 4. If the word is "types", return "type".
 5. If the word ends in "ii", replace that "ii" with "us" (octopii,virii).
    : : : : :
97. If a word ends with -ies, I replace the ending with -y
98. If a word ends with -es, I remove this ending.
99. Otherwise, I just remove the trailing -s.

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

Обратите внимание, что более ранняя версия правил, возможно, не имела номер записи 4. Однако, когда мы обнаружили проблему с преобразованием типов в "typ" в правиле 98, мы затем создали преобразование с более высоким приоритетом на 4 чтобы удовлетворить это.

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

Аналогичная схема может быть собрана для другого направления, единственного числа до множественного числа.

Основная проблема заключается в том, что вам придется поймать все те случаи краев, которые известны по-английски, но, не убедившись, чтобы вся планета говорила на эсперанто, это может быть вашим лучшим выстрелом: -)