vocal usuario una trata que programa pida numérico muestre mayúscula letras letra las dígito diga determinar detecte descendiendo dado crear consonante caracter algoritmo c# algorithm

usuario - ¿Hay algún algoritmo en c#para singularizar-pluralizar una palabra?



crear un programa que pida una letra al usuario y diga si se trata de una vocal. (11)

¿Hay algún algoritmo en c # para singularizar - pluralizar una palabra (en inglés) o existe una biblioteca .net para hacer esto (también puede estar en diferentes idiomas)?


Batí uno en base al pluralizador Rails. Puedes ver mi blog here , o en github aquí

output = Formatting.Pluralization(100, "sausage");


Como la pregunta era por C #, aquí hay una buena variación de la solución de Software Monkey (una vez más un "truco", pero para mí realmente es la forma más práctica y reutilizable de hacerlo):

public static string Pluralize(this string singularForm, int howMany) { return singularForm.Pluralize(howMany, singularForm + "s"); } public static string Pluralize(this string singularForm, int howMany, string pluralForm) { return howMany == 1 ? singularForm : pluralForm; }

El uso es el siguiente:

"Item".Pluralize(1) = "Item" "Item".Pluralize(2) = "Items" "Person".Pluralize(1, "People") = "Person" "Person".Pluralize(2, "People") = "People"


Creé una pequeña biblioteca para esto en .net (C #), llamada Pluralizer (como era de esperar).

Está destinado a trabajar con oraciones completas, algo así como String.Format lo hace.

Básicamente funciona así:

var target = new Pluralizer(); var str = "There {is} {_} {person}."; var single = target.Pluralize(str, 1); Assert.AreEqual("There is 1 person.", single); // Or use the singleton if you''re feeling dirty: var several = Pluralizer.Instance.Pluralize(str, 47); Assert.AreEqual("There are 47 people.", several);

También puede hacer mucho más que eso. Lea más sobre esto en mi blog . También está disponible en NuGet.



Hice trampa en Java - Quería poder producir una cadena correcta para "Había n algo (s)", así que escribí el resultado. pequeño método de utilidad sobrecargado:

static public String pluralize(int val, String sng) { return pluralize(val,sng,(sng+"s")); } static public String pluralize(int val, String sng, String plu) { return (val+" "+(val==1 ? sng : plu)); }

invocado como tal

System.out.println("There were "+pluralize(count,"something")); System.out.println("You have broken "+pluralize(count,"knife","knives"));


La mayoría de los ORM tienen una puñalada, aunque generalmente no son perfectos. Sé que Castle tiene su Clase de Inflector que probablemente puedas hurgar . Sin embargo, hacerlo "a la perfección" no es una tarea fácil (las "reglas" en inglés no son realmente reglas :)), por lo que depende si está satisfecho con un enfoque de "conjetura razonable".


No hay mucha documentación de MSDN sobre el uso específico de la clase PluralizationService así que aquí hay una clase de prueba de unidad (NUnit) para mostrar el uso básico. Observe el caso de prueba impar en la parte inferior que muestra que el servicio no es perfecto cuando se trata de formularios plurales no estándar.

[TestFixture] public class PluralizationServiceTests { [Test] public void Test01() { var service = PluralizationService.CreateService(CultureInfo.CurrentCulture); Assert.AreEqual("tigers", service.Pluralize("tiger")); Assert.AreEqual("processes", service.Pluralize("process")); Assert.AreEqual("fungi", service.Pluralize("fungus")); Assert.AreNotEqual("syllabi", service.Pluralize("syllabus")); // wrong pluralization } }



Subsonic 3 tiene una clase Inflector que me impresionó al convertir Person en People . Eché un vistazo a la fuente y descubrí que naturalmente hace trampas con una lista codificada, pero esa es realmente la única forma de hacerlo en inglés y cómo los humanos lo hacen: recordamos el singular y el plural de cada palabra y no solo aplicamos una regla . Como no hay masculino / femenino (/ neutro) para agregar a la mezcla, es mucho más simple.

Aquí hay un fragmento:

AddSingularRule("^(ox)en", "$1"); AddSingularRule("(vert|ind)ices$", "$1ex"); AddSingularRule("(matr)ices$", "$1ix"); AddSingularRule("(quiz)zes$", "$1"); AddIrregularRule("person", "people"); AddIrregularRule("man", "men"); AddIrregularRule("child", "children"); AddIrregularRule("sex", "sexes"); AddIrregularRule("tax", "taxes"); AddIrregularRule("move", "moves"); AddUnknownCountRule("equipment");

Representa algunas palabras que no tienen equivalentes en plural, como el ejemplo del equipo. Como probablemente puedas decir, lo hace con un Regex simple usando $ 1.

Actualizar:
¡Parece que el Inflector de Subsonic es de hecho la clase Castle ActiveRecord Inflector !



Usando la base de datos de ejemplo de Neptuno de Microsoft:

System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(new System.Globalization.CultureInfo("en-US"));

Singularize no Singularize "Order_Details" Devuelve "Order_Details" con la s al final. ¿Cuál es el trabajo?