Czy w języku C # jest jakiś algorytm do wyróżniania - pluralizuj słowo (w języku angielskim) lub czy istnieje biblioteka .net do tego celu (może być również w różnych językach)?
106
Masz również System.Data.Entity.Design.PluralizationServices.PluralizationService .
AKTUALIZACJA : Stara odpowiedź zasługuje na aktualizację. Jest teraz także Humanizer: https://github.com/MehdiK/Humanizer
Mogę to zrobić dla esperanta, bez specjalnych przypadków!
W przypadku języka angielskiego przydatne byłoby zapoznanie się z regułami dotyczącymi zwykłej liczby mnogiej rzeczowników oraz nieregularnej liczby mnogiej rzeczowników . Istnieje cały artykuł w Wikipedii dotyczący angielskiej liczby mnogiej , który może również zawierać przydatne informacje.
źródło
Większość ORMów ma w tym coś wspólnego, chociaż generalnie nie są doskonałe. Wiem, że Castle ma swoją klasę Inflector, którą prawdopodobnie możesz poszperać . Jednak zrobienie tego „perfekcyjnie” nie jest łatwym zadaniem (angielskie „zasady” nie są tak naprawdę regułami :)), więc zależy to od tego, czy jesteś zadowolony z podejścia opartego na „rozsądnym przypuszczeniu”.
źródło
Oszukiwałem w Javie - chciałem być w stanie stworzyć poprawny ciąg znaków dla "Nie było czegoś", więc napisałem foll. mało przeciążona metoda narzędziowa:
wywołane w ten sposób
źródło
Stworzyłem do tego małą bibliotekę w .net (C #), nazwaną Pluralizer (nic dziwnego).
Jest przeznaczony do pracy z pełnymi zdaniami, podobnie jak w przypadku String.Format.
Zasadniczo działa to tak:
Może też zrobić o wiele więcej. Przeczytaj więcej na ten temat na moim blogu . Jest również dostępny w NuGet.
źródło
Zrobiłem jeden razem w oparciu o pluralizator Rails. Możesz zobaczyć mój post na blogu tutaj lub na github tutaj
źródło
Ponieważ pytanie dotyczyło C #, oto fajna odmiana rozwiązania Software Monkey (znowu trochę "oszustwa", ale dla mnie naprawdę najbardziej praktyczny i wielokrotnego użytku):
Sposób użycia jest następujący:
źródło
Subsonic 3 ma
Inflector
klasę, która zrobiła na mnie wrażenie, zmieniając sięPerson
wPeople
. Zerknąłem na źródło i odkryłem, że naturalnie trochę oszukuje z zakodowaną listą, ale to naprawdę jedyny sposób, aby to zrobić po angielsku i jak to robią ludzie - pamiętamy liczbę pojedynczą i mnogą każdego słowa i nie stosujemy tylko reguły . Ponieważ nie ma męskiego / kobiecego (/ neutralnego), aby dodać do mieszanki, jest to o wiele prostsze.Oto fragment:
Wynika z tego, że niektóre słowa nie mają odpowiedników w liczbie mnogiej, jak przykład wyposażenia. Jak zapewne możesz powiedzieć, robi to proste
Regex
zamianę za pomocą 1 $.Aktualizacja:
Wygląda na
Inflector
to, że Subsonic ma wpływ na klasę Castle ActiveRecordInflector
!źródło
Niewiele dokumentacji z MSDN na temat konkretnego użycia klasy PluralizationService, więc oto klasa testów jednostkowych (NUnit), aby pokazać podstawowe użycie. Zwróć uwagę na dziwny przypadek testowy na dole, który pokazuje, że usługa nie jest idealna, jeśli chodzi o niestandardowe formy liczby mnogiej.
źródło
Strona ta pokazuje, jak korzystać
PluralizationService
zSystem.Data.Entity
(.NET Framework 4.0)http://zquanghoangz.blogspot.it/2012/02/beginner-with-pluralizationservices.html
źródło
Korzystanie z przykładowej bazy danych Northwind firmy Microsoft:
Singularize nie Singularize „Order_Details” Zwraca „Order_Details” z
s
końcówką. Jaka jest ta praca?źródło