• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jakiego algorytmu użyć, by podzielić słowo na sylaby?

VPS Starter Arubacloud
–3 głosów
2,788 wizyt
pytanie zadane 13 maja 2017 w C i C++ przez jegor377 Stary wyjadacz (13,230 p.)
edycja 13 maja 2017 przez jegor377

Potrzebuje funkcję, która dzieli słowo na sylaby i sprawdza, czy słowa się rymują. Znacie może jakiś algorytm, który pozwoli mi na podzielenia słowa na sylaby? Najlepiej jakby współpracował z językiem polskim, bo taki jest mój cel. Znalazłem coś takiego http://stackoverflow.com/questions/405161/detecting-syllables-in-a-word ale nic z tego nie rozumiem. :/

@edit

Oczywiście, jak to ja, nie przejrzałem dobrze tej strony, a jest tam super dobry algorytm do angielskich słów, jednak kiedy nie używamy polskich znaków, to z polskim też daje radę. Nie wiem tylko jak zmusić ten algorytm, aby wypluwał mi listę tych sylab, ale jak ktoś wie, to miło gdyby mi napisał. :)

int countSyllables(string word) {
	vector<char> vowels = { 'a', 'e', 'i', 'o', 'u', 'y' };
	string currentWord = word;
	int numVowels = 0;
    bool lastWasVowel = false;
    for(auto wc : currentWord)
    {
        bool foundVowel = false;
        for(auto v : vowels)
        {
            //don't count diphthongs
            if (v == wc && lastWasVowel)
            {
                foundVowel = true;
                lastWasVowel = true;
                break;
            }
            else if (v == wc && !lastWasVowel)
            {
                numVowels++;
                foundVowel = true;
                lastWasVowel = true;
                break;
            }
        }

        //if full cycle and no vowel found, set lastWasVowel to false;
        if (!foundVowel)
            lastWasVowel = false;
    }
    //remove es, it's _usually? silent
    if (currentWord.length() > 2 && currentWord.substr(currentWord.length() - 2) == "es") numVowels--;
    // remove silent e
    else if (currentWord.length() > 1 && currentWord.substr(currentWord.length() - 1) == "e") numVowels--;

    return numVowels;
}

 

2 odpowiedzi

+1 głos
odpowiedź 13 maja 2017 przez Wiciorny Ekspert (268,990 p.)
edycja 13 maja 2017 przez Wiciorny
zapisuj zwracane sylaby do tablicy, i wypisz tablice na końcu? W czym problem, to najprostsze ( omg*)  co możesz zrobić .
komentarz 13 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
najprostsze* :D
komentarz 13 maja 2017 przez jegor377 Stary wyjadacz (13,230 p.)
popatrzyłem sobie na ten algorytm, ale on nie szuka sylab, tylko liczy ilość samogłosek, bo tyle ile jest samogłosek, tyle powinno być sylab. Ten algorytm jeżeli się nie mylę wywala się na słowach typu "mieszkanie", bo są tam litery "ie" (w słowiańskim byłaby to jedna litera), a wg. programu 'i' i 'e' to oddzielne sylaby. ;) Wymyśliłem sobie już algorytm na liczenie sylab i jak go napisze, to pewnie go tu zamieszczę, ale jak ktoś ma jakiegoś gotowca/algorytmu, albo linka do gotowca, to będę bardzo szczęśliwy. :)
komentarz 13 maja 2017 przez Wiciorny Ekspert (268,990 p.)
nie da się  napisać algorytmu na Polski język: bo mamy za dużo wyjątków, dwa słowa- często zaczerpnięte są z innego języka przez co ich podział sylabiczny- wgl nie ma funkcji w leksykonie....
0 głosów
odpowiedź 14 maja 2017 przez WilmaOlcho Obywatel (1,740 p.)
Dokładnie tak jak mówiono w poprzednich komentarzach, nasz język jest zbyt skomplikowany by napisać do niego jednoznaczny algorytm dzielący wyrazy na sylaby.

Ale możesz zrobić bazę sylab w pliku i sprawdzać zachłannie wystąpienia tych sylab w wyrazie. Myślę że sprawność takiego rozwiązania mogłaby być całkiem duża.

Podobne pytania

0 głosów
1 odpowiedź 1,272 wizyt
0 głosów
3 odpowiedzi 163 wizyt
pytanie zadane 16 września 2019 w HTML i CSS przez grodzkistudio Nowicjusz (160 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez Admin Cpp Początkujący (350 p.)

92,417 zapytań

141,222 odpowiedzi

318,985 komentarzy

61,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...