phladiprelio-ukrainian-simple 0.3.2.0 → 0.3.3.0
raw patch · 4 files changed
+21/−7 lines, 4 files
Files
- CHANGELOG.md +5/−0
- README.md +5/−1
- app/Main.hs +10/−5
- phladiprelio-ukrainian-simple.cabal +1/−1
CHANGELOG.md view
@@ -48,3 +48,8 @@ on potentially irregular or unstable line options. Updated the dependency boundaries of rhythmic-sequences. +## 0.3.3.0 -- 2023-04-04++* Third version revised D. Added the possibility to see example lines for minimum and maximum values+ for the properties in the test mode using the "-t <one of 4, 5, or 6>" command line arguments.+
README.md view
@@ -1,6 +1,6 @@ The executable is the new implementation of the ideas related to PhLADiPreLiO (Phonetic Languages Approach to Discovering the Preferred Line Options) for Ukrainian language. It uses hashes and-has at the moment (as of the version 0.3.1.0) not the full functionality. The previous implementation +has at the moment (as of the version 0.3.3.0) not the full functionality. The previous implementation and its documentation are at the links: https://hackage.haskell.org/package/phonetic-languages-simplified-examples-array@@ -17,6 +17,10 @@ Example of the new functionality in the version 0.3.0.0 is in the video: https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid0QT1BCWf9fmgQHasfUrSSqCenR9YT1C6CtL8PV4ieGrCTWGwatRh6TTUcxho8irkHl++Example of the new functionality in the version 0.3.3.0 is in the video:++https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid03qAMdEk6ehnQjQXLqNeAULQiTMKJUpQYUjM1eipcJy7hkxLCMuoh7cvZVUEHUUAfl Video recordings as examples of the working prototype usage and how you can listen to Ukrainian text using Google services are at the links below:
app/Main.hs view
@@ -8,7 +8,7 @@ import GHC.Enum (fromEnum) import Text.Show (show) import Text.Read (readMaybe)-import System.IO (putStrLn, FilePath)+import System.IO (putStrLn, FilePath,stdout,hSetNewlineMode,universalNewlineMode) import Rhythmicity.MarkerSeqs hiding (id) import Rhythmicity.BasicF import Data.List hiding (foldr)@@ -34,11 +34,16 @@ f syllableDurationsDs grps mxms = sum . countHashes2G hashStep hc grps mxms . mconcat . (if null file then case k of { 1 -> syllableDurationsD; 2 -> syllableDurationsD2; 3 -> syllableDurationsD3; 4 -> syllableDurationsD4} else if length syllableDurationsDs >= k then syllableDurationsDs !! (k - 1) else syllableDurationsD2) . createSyllablesUkrS- if numTest `elem` [0,2,3] then do+ if numTest `elem` (0:[2..6]) then do+ hSetNewlineMode stdout universalNewlineMode putStrLn "Feet Val Stat Proxim" - mapM (\(q,qs) -> let m = stat1 syllN (q,qs) in let max1 = maximumBy (comparing (f syllableDurationsDs q qs)) universalSet in let mx = f syllableDurationsDs q qs max1 in putStrLn (show (fromEnum q) `mappend` " | " `mappend` show mx `mappend` " " `mappend` show m `mappend` " -> " `mappend` show (100 * fromIntegral mx / fromIntegral m) `mappend` "%")) .- zip [2..7] $ ([1]:(case numTest of { 0 -> [[2,1],[3,2],[4,3,2],[5,4,3],[6,5,4,3,2]]; 2 -> [[2],[3],[4,3],[5,4],[6,5,4]]; 3 -> [[1],[2,1],[3,2,1],[3,2],[4,3,2]]}))+ mapM (\(q,qs) -> let m = stat1 syllN (q,qs) in let max1 = maximumBy (comparing (f syllableDurationsDs q qs)) universalSet in let mx = f syllableDurationsDs q qs max1 in putStrLn (show (fromEnum q) `mappend` " | " `mappend` show mx `mappend` " " `mappend` show m `mappend` " -> " `mappend` show (100 * fromIntegral mx / fromIntegral m) `mappend` "%" `mappend` (if numTest >= 4 then let min1 = minimumBy (comparing (f syllableDurationsDs q qs)) universalSet in ("\n" `mappend` min1 `mappend` "\n" `mappend` max1 `mappend` "\n") else ""))) .+ zip [2..7] $ ([1]:sel numTest) else mapM (\(x,y) -> putStrLn (show x `mappend` (' ':y))) . (let h1 = if descending then (\(u,w) -> ((-1) * u, w)) else id in sortOn h1) . map (\xss -> (f syllableDurationsDs grps mxms xss, xss)) $ universalSet+ where sel x + | x == 0 || x == 4 = [[2,1],[3,2],[4,3,2],[5,4,3],[6,5,4,3,2]]+ | x == 2 || x == 5 = [[2],[3],[4,3],[5,4],[6,5,4]]+ | otherwise = [[1],[2,1],[3,2,1],[3,2],[4,3,2]] countSyll :: String -> Int countSyll xs = fromEnum . foldr (\x y -> if isVowel1 x then y + 1 else y) 0 . convertToProperUkrainianI8 $ xs@@ -69,7 +74,7 @@ putStrLn "+d \t— see: https://web.archive.org/web/20220610171812/https://raw.githubusercontent.com/OleksandrZhabenko/phonetic-languages-data/main/0.20.0.0/56.csv as a format for the file." putStrLn "+r \t— afterwards are several unique digits not greater than 8 in the descending order — the first one is the length of the group of syllables to be considered as a period, the rest — positions of the maximums and minimums. Example: \"543\" means that the line is splitted into groups of 5 syllables starting from the beginning, then the positions of the most maximum (4 = 5 - 1) and the next (smaller) maximum (3 = 4 - 1). If there are no duplicated values then the lowest possible value here is 0, that corresponds to the lowest minimum. If there are duplicates then the lowest value here is the number of the groups of duplicates, e. g. in the sequence 1,6,3,3,4,4,5 that is one group there are two groups of duplicates — with 3 and 4 — and, therefore, the corresponding data after +r should be 7...2. The values less than the lowest minimum are neglected." putStrLn "+c \t— see explanation at the link: https://hackage.haskell.org/package/rhythmic-sequences-0.2.3.1/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections"- putStrLn "-t \t— and afterwards the digit showing the test for \'smoothness\' (to be more accurate - absense or presense of some irregularities that influences the prosody) to be run - if 0 - more extended and strict, if 2 - less strict, more permissive, if 3 - the test for some values expected to be not the maximum nor the minimum ones in the line with no repetitions (the most common case), this option for its greatest values tends to give either more \'irregular\' lines (more jumping-like or wavy combinations) than other ones or more \'regular\' ones - it depends on the distribution of not included into account maximums and minimums; the lines with the minimum values here can be of different kinds but they are not \'stable\', otherwise - no tests at all (if no digit is here then it is likely that the first word can be used instead and it will be removed from the input)."+ putStrLn "-t \t— and afterwards the digit showing the test for \'smoothness\' (to be more accurate - absense or presense of some irregularities that influences the prosody) to be run - if 0 - more extended and strict, if 2 - less strict, more permissive, if 3 - the test for some values expected to be not the maximum nor the minimum ones in the line with no repetitions (the most common case), this option for its greatest values tends to give either more \'irregular\' lines (more jumping-like or wavy combinations) than other ones or more \'regular\' ones - it depends on the distribution of not included into account maximums and minimums; the lines with the minimum values here can be of different kinds but they are not \'stable\'; if 4 - similar to 0, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value; if 5 - similar to 2, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value; if 6 - similar to 3, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value; otherwise - no tests at all (if no digit is here then it is likely that the first word can be used instead and it will be removed from the input)." putStrLn "+k \t— and then the number greater than 2 (better, greater than 12, the default value if not specified is 20). The greater value leads to greater numbers. The number less than some infimum here leads to wiping of some information from the result and, therefore, probably is not the desired behaviour. For most cases the default value is just enough sensible, but you can give it a try for other values." else generalF fileDu numTest hc grpp sylD descending hashStep str1 >> return ()
phladiprelio-ukrainian-simple.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: phladiprelio-ukrainian-simple-version: 0.3.2.0+version: 0.3.3.0 -- A short (one-line) description of the package. synopsis: A PhLADiPreLiO implementation for Ukrainian that uses hashes