• 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?

Object Storage Arubacloud
–3 głosów
2,819 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 (270,110 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 (270,110 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,307 wizyt
0 głosów
3 odpowiedzi 168 wizyt
pytanie zadane 16 września 2019 w HTML i CSS przez grodzkistudio Nowicjusz (160 p.)
0 głosów
1 odpowiedź 156 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez Admin Cpp Początkujący (350 p.)

92,568 zapytań

141,422 odpowiedzi

319,639 komentarzy

61,957 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...