Ich bin gerade auf dieses Problem gestoßen und habe in 10 Minuten eine Lösung gefunden.
Ich denke, @paxdiablo bietet einen guten Gedanken auf den Bau einer transformierenden Motor und Regeln hinzufügen. Ich baue eine Wörterbuchregel und drei allgemeine Regeln. Die Wörterbuchregel geht zu einer Diktatdatei, um Ausnahmefälle nachzuschlagen, während die drei allgemeinen Regeln jeweils "ies", "es" und "s" behandeln.
Es kann jedoch zu viel Zeit in Anspruch nehmen, alle Ausnahmen in das Wörterbuch aufzunehmen, z. B. Torten/Bäume/Bus usw. Eine Verbesserung, die ich vorgenommen habe, um mit diesen Wörtern umzugehen, besteht darin, sicherzustellen, dass sie zurückkonvertiert werden können.
Wenn wir z. B. fälschlicherweise die "es"-Regel auf "trees" anwenden und es in "tre" umwandeln, erhalten wir beim Versuch, die Pluralform wieder hinzuzufügen, "tres", was nicht dem ursprünglichen "tree" entspricht, und Sie wissen, dass die "es"-Regel nicht angewendet werden sollte. Mit dieser Methode können die oben genannten Ausnahmen gelöst werden, ohne sie in eine Wörterbuchdatei aufzunehmen.
Am Ende habe ich eine Wörterbuchdatei mit 42 wirklich außergewöhnlichen Wörtern, und sie könnte die meisten Fälle bewältigen.
6 Stimmen
Ich habe den Plural der Tabellennamen schon vor langer Zeit aufgegeben und verwende nur noch Singularnamen für die Tabellen, das spart mir Tipparbeit!
7 Stimmen
Alle Ihre Regeln haben triviale Fälle, in denen sie versagen: "Torten", "Bäume", "Bus". Es gibt natürlich noch zig andere. Die einzige Antwort ist (wie Tal Pressman sagt), dass Sie es mit natürlicher Sprache zu tun haben, wo Ausnahmen die Regel sind.
0 Stimmen
.NET Inflector ist großartig, Sie können Regeln, Ausnahmen, ungewöhnliche Pluralisierungen, Nicht-Zählbares wie Fisch und Schaf usw. usw. definieren. Großartige Bibliothek
0 Stimmen
Ich würde einfach eine einfache Liste der üblichen Transformationen implementieren, wie sie der OP gepostet hat, und es erlauben, die singuläre Version explizit anzugeben (z. B. als Eigenschaft des Modells) für Fälle, die nicht zu den häufigsten gehören.