Das sind alles allgemeine (und gute) Regeln, aber Englisch ist keine Sprache für schwache Nerven :-).
Ich selbst würde eine Transformations-Engine zusammen mit einer Reihe von Transformationen (überraschenderweise) bevorzugen, um die eigentliche Arbeit zu erledigen. Man würde die Transformationen (von spezifisch bis allgemein) durchlaufen und, wenn eine Übereinstimmung gefunden wurde, die Transformation auf das Wort anwenden und anhalten.
Reguläre Ausdrücke wären aufgrund ihrer Ausdruckskraft ein idealer Ansatz hierfür. Ein Beispiel für einen Regelsatz:
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 ends in "ii", replace that "ii" with "us" (octopii,virii).
5. If a word ends with -ies, replace the ending with -y
6. If a word ends with -es, remove it.
7. Otherwise, just remove any trailing -s.
Beachten Sie, dass diese Transformation auf dem neuesten Stand gehalten werden muss. Nehmen wir zum Beispiel an, jemand fügt den Tabellennamen types
. Dies würde derzeit durch die Regel #6
und Sie würden den Singularwert erhalten typ
was offensichtlich falsch ist.
Die Lösung besteht darin, irgendwo eine neue Regel einzufügen vor #6
etwa so:
3.5: If the word is "types", return "type".
für eine ganz bestimmte Umwandlung, oder vielleicht später, wenn sie allgemeiner gestaltet werden kann.
Mit anderen Worten: Sie müssen diese Transformationstabelle ständig aktualisieren, wenn Sie all die wundersamen Ausnahmen finden, die das Englische im Laufe der Jahrhunderte hervorgebracht hat.
En andere Möglichkeit ist, seine Zeit nicht mit allgemeinen Regeln zu verschwenden.
Da der Anwendungsfall dieser Anforderung derzeit nur darin besteht, die Tabellennamen zu singularisieren, und die Menge der Tabellennamen relativ klein sein wird (zumindest im Vergleich zu der Menge der englischen Pluralwörter), erstellen Sie einfach eine andere Tabelle (oder eine Art Datenstruktur) namens singulars
die alle aktuellen Plural-Tabellennamen abbildet ( employees
, customers
) zu singulären Objektnamen ( employee
, customer
).
Jedes Mal, wenn eine Tabelle zu Ihrem Schema hinzugefügt wird, stellen Sie sicher, dass Sie einen Eintrag in der Einzahl "table" hinzufügen, damit Sie sie einteilen können.
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.