packages feed

phladiprelio-ukrainian-simple 0.11.0.1 → 0.12.0.0

raw patch · 5 files changed

+55/−25 lines, 5 filesdep +mmsyn2-arraydep +phonetic-languages-basisPVP ok

version bump matches the API change (PVP)

Dependencies added: mmsyn2-array, phonetic-languages-basis

API changes (from Hackage documentation)

+ Phladiprelio.Ukrainian.IO: selectSounds :: String -> FlowSound
- Phladiprelio.Ukrainian.IO: generalF :: (String, String) -> Int -> FilePath -> Int -> HashCorrections -> (Int8, [Int8]) -> Int -> Bool -> Int -> Bool -> Int8 -> (FilePath, Int) -> Bool -> String -> [String] -> IO [String]
+ Phladiprelio.Ukrainian.IO: generalF :: String -> (String, String) -> Int -> FilePath -> Int -> HashCorrections -> (Int8, [Int8]) -> Int -> Bool -> Int -> Bool -> Int8 -> (FilePath, Int) -> Bool -> String -> [String] -> IO [String]

Files

CHANGELOG.md view
@@ -152,3 +152,9 @@  * Eleventh version revised A. Fixed issue with documentation for README.md file. +## 0.12.0.0 -- 2023-10-27++* Twelfth version. Added a new command line argument "+ul" with additional argument to compute not+  usual rhythmicity properties, but diversity property of the sounds represented by the encoded +additional string. You can try something like: phladiprelioUkr +ul vw +w 54 садок вишневий коло хати+
Main.hs view
@@ -33,6 +33,7 @@       maxNumWords = let k = fromMaybe 7 (readMaybe (concat . getB "+x" $ argsB)::Maybe Int) in if k == 0 || abs k >= 9 then 9 else max (abs k) 2       hc = readHashCorrections . concat . getB "+c" $ argsB       prepare = oneA "-p" argsA+      selStr = concat . getB "+ul" $ argsB       grpp = grouppingR . concat . getB "+r" $ argsB       splitting = fromMaybe 50 (readMaybe (concat . getB "+w" $ argsB)::Maybe Int8)       emptyline = oneA "+l" argsA@@ -84,7 +85,7 @@   if helpMessage then do       putStrLn "SYNOPSIS:"       putStrLn ""-      putStrLn "phladiprelioUkr [+a <PhLADiPreLiO constraints> -a] [+b <extended algebraic PhLADiPreLiO constraints> -b] [+c <HashCorrections encoded>] [+n] [+l] [+d <FilePath to file with durations>] [+k <number - hash step>] [+r <groupping info>] [-t <number of the test or its absence if 1 is here> [-C +RTS -N -RTS]] [+s <syllable durations function number>] [-p] [+w <splitting parameter>] [+f <FilePath to the file to be appended the resulting String> <control parameter for output parts>] [+x <maximum number of words taken>] <Ukrainian textual line>"+      putStrLn "phladiprelioUkr [+a <PhLADiPreLiO constraints> -a] [+b <extended algebraic PhLADiPreLiO constraints> -b] [+c <HashCorrections encoded>] [+n] [+l] [+d <FilePath to file with durations>] [+k <number - hash step>] [+ul <diversity property encoding string>] [+r <groupping info>] [-t <number of the test or its absence if 1 is here> [-C +RTS -N -RTS]] [+s <syllable durations function number>] [-p] [+w <splitting parameter>] [+f <FilePath to the file to be appended the resulting String> <control parameter for output parts>] [+x <maximum number of words taken>] <Ukrainian textual line>"       putStrLn ""       putStrLn "+n \t— if specified then the order of sorting and printing is descending (the reverse one to the default otherwise). "       putStrLn ""@@ -110,6 +111,8 @@       putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioEng.7.pdf in English or: "       putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.7.pdf in Ukrainian."       putStrLn ""+      putStrLn "+ul \t— afterwards there is a string that encodes which sounds are used for diversity property evaluation. If used, then +r group has no meaning and is not used. Unlike in the link, the argument \"1\" means computing the property for all the sound representations included (for all of the present representations, so the value is maximal between all other strings instead of \"1\"). For more information, see: https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#types"+      putStrLn ""       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 ""       putStrLn "+c \t— see explanation at the link: https://hackage.haskell.org/package/rhythmic-sequences-0.3.0.0/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections Some preliminary tests show that theee corrections influence the result but not drastically, they can lead to changes in groupping and order, but mostly leave the structure similar. This shows that the algorithms used are more stable for such changes."@@ -134,11 +137,11 @@       putStrLn ""       putStrLn "For the \"music\" mode the number of syllables printed for the line does not include the inserts. So the property value can be greater than this number."       putStrLn ""-  else generalF (prestr, poststr) lineNmb fileDu numTest hc grpp sylD descending hashStep emptyline splitting (filesave, codesave) concurrently (unwords arg3s) variants1 >> return ()+  else generalF selStr (prestr, poststr) lineNmb fileDu numTest hc grpp sylD descending hashStep emptyline splitting (filesave, codesave) concurrently (unwords arg3s) variants1 >> return ()   bSpecs :: CLSpecifications-bSpecs = (zip ["+c","+d","+k","+r","+s","-t","+w","+x"] . cycle $ [1]) `mappend` [("+f",2),("+m",2)] +bSpecs = (zip ["+c","+d","+k","+r","+s","-t","+ul","+w","+x"] . cycle $ [1]) `mappend` [("+f",2),("+m",2)]   aSpecs :: CLSpecifications aSpecs = zip ["-h", "+l", "+n","-p", "-C"] . cycle $ [0]
Phladiprelio/Ukrainian/IO.hs view
@@ -9,7 +9,7 @@ import GHC.Enum (fromEnum,toEnum) import Text.Show (Show(..)) import Text.Read (readMaybe)-import Data.Char (isDigit, isAlpha)+import Data.Char (isDigit, isAlpha,toLower) import System.IO (putStrLn, FilePath,stdout,hSetNewlineMode,universalNewlineMode,getLine,appendFile,print) import Rhythmicity.MarkerSeqs hiding (id)  import Data.List hiding (foldr)@@ -19,6 +19,7 @@ import Phladiprelio.Ukrainian.SyllableDouble import Phladiprelio.Ukrainian.Melodics  import GHC.Int (Int8)+import CaseBi.Arr (getBFst') import Phladiprelio.Ukrainian.ReadDurations import Data.Ord (comparing) import Numeric (showFFloat)@@ -28,9 +29,11 @@ import Control.Concurrent.Async (mapConcurrently) import Phladiprelio.Tests import Phladiprelio.General.Datatype (readBasic3, readBasic4, readBasic1G)+import Phladiprelio.UniquenessPeriodsG  generalF- :: (String, String)  -- ^ If the next element is not equal to -1, then the prepending and appending lines to be displayed. Used basically for working with the multiline textual input data.+ :: String -- ^ If not null than instead of rhythmicity evaluation using hashes and and feets, there is computed a diversity property for the specified 'String' here using the 'selectSounds' function. For more information, see: 'https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#types'+ -> (String, String)  -- ^ If the next element is not equal to -1, then the prepending and appending lines to be displayed. Used basically for working with the multiline textual input data.  -> Int -- ^ The number of the line in the file to be read the lines from. If equal to -1 then neither reading from the file is done nor the first argument influences the processment results.  -> FilePath -- ^ The file to read the sound representation durations from.  -> Int @@ -46,12 +49,14 @@  -> String -- ^ An initial string to be analysed.  -> [String]   -> IO [String]-generalF (prestr, poststr) lineNmb file numTest hc (grps,mxms) k descending hashStep emptyline splitting (fs,code) concurrently initstr universalSet@(u1:u2:us) = do+generalF selStr (prestr, poststr) lineNmb file numTest hc (grps,mxms) k descending hashStep emptyline splitting (fs,code) concurrently initstr universalSet@(u1:u2:us) = do    syllableDurationsDs <- readSyllableDurations file    let syllN = countSyll initstr --       universalSet = map unwords . permutations . words $ rs-       f syllableDurationsDs grps mxms = sum . countHashes2G hashStep hc grps mxms . readBasic3 ((if null file then case k of { 1 -> syllableDurationsD; 2 -> syllableDurationsD2; 3 -> syllableDurationsD3; 4 -> syllableDurationsD4} +       f syllableDurationsDs grps mxms -- Since the version 0.12.0.0, has a possibility to evaluate diversity property.+            | null selStr = sum . countHashes2G hashStep hc grps mxms . readBasic3 ((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) (mconcat) +            | otherwise = fromIntegral . diverse2GGL (selectSounds selStr) [100,101] . convertToProperUkrainianI8 . filter (\c -> not (isDigit c) && c /= '_')    hSetNewlineMode stdout universalNewlineMode    if numTest >= 0 && numTest <= 179 && numTest /= 1 then do      putStrLn "Feet   Val  Stat   Proxim" @@ -83,19 +88,23 @@                                          let writ = writable permiss                                              readab = readable permiss                                          if writ && readab then do-                                             let lineOption = head . filter (\(S k _ ts) -> k == num) $ sRepresent-                                                 textP = (\(S _ _ ts) -> ts) lineOption-                                                 sylls = createSyllablesUkrS textP-                                             if code >= 10 && code <= 19 && grps == 2-                                                 then do-                                                     let qqs = readBasic4 ((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) (mconcat) (mconcat . createSyllablesUkrS) (map showFS) . readBasic1G $ textP -                                                         (breaks, rs) = showZerosFor2PeriodMusic qqs-                                                     putStrLn textP-                                                     putStrLn breaks-                                                     putStrLn . show $ rs-                                                     appendFile fs ((if code >= 15 then (show rs `mappend` "\n" `mappend` breaks `mappend` "\n") else "") `mappend` outputSel lineOption code)-                                                 else appendFile fs (outputSel lineOption code)+                                             if null selStr then do+                                                let lineOption = head . filter (\(S k _ ts) -> k == num) $ sRepresent+                                                    textP = (\(S _ _ ts) -> ts) lineOption+                                                    sylls = createSyllablesUkrS textP+                                                if code >= 10 && code <= 19 && grps == 2+                                                    then do+                                                        let qqs = readBasic4 ((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) (mconcat) (mconcat . createSyllablesUkrS) (map showFS) . readBasic1G $ textP +                                                            (breaks, rs) = showZerosFor2PeriodMusic qqs+                                                        putStrLn textP+                                                        putStrLn breaks+                                                        putStrLn . show $ rs+                                                        appendFile fs ((if code >= 15 then (show rs `mappend` "\n" `mappend` breaks `mappend` "\n") else "") `mappend` outputSel lineOption code)+                                                    else appendFile fs (outputSel lineOption code)+                                             else do +                                                let lineOption = head . filter (\(S k _ ts) -> k == num) $ sRepresent+                                                appendFile fs (outputSel lineOption code)                                          else error "The specified file cannot be used for appending the text! Please, specify another file!"                                          return []           where jjj kk = let (q1,r1) = quotRem kk (if kk < 0 then -10 else 10) in jjj' q1 r1 emptyline@@ -104,8 +113,8 @@                   | r1 == 1 || r1 == 3 = 10*q1 + (if emptyline then 5 else r1)                   | r1 < 0 = -10*q1 + (if emptyline then -4 else r1)                   | otherwise = 10*q1 + (if emptyline then 4 else r1)-generalF _ _ _ _ _ _ _ _ _ _ _ _ _ _ [u1] = mapM putStrLn [u1] >> return [u1]-generalF _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ = let strOutput = ["You have specified the data and constraints on it that lead to no further possible options.", "Please, specify another data and constraints."] in mapM putStrLn strOutput >> return strOutput+generalF _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [u1] = mapM putStrLn [u1] >> return [u1]+generalF _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ = let strOutput = ["You have specified the data and constraints on it that lead to no further possible options.", "Please, specify another data and constraints."] in mapM putStrLn strOutput >> return strOutput  data PhladiprelioUkr = S Int Integer String deriving Eq @@ -143,4 +152,14 @@   if isNothing num || num > Just l1 || num == Just 0        then parseLineNumber l1        else return . fromJust $ num++{-| 'selectSounds' converts the argument after \"+up\" command line argument into a list of  Ukrainian sound representations that is used for evaluation of \'uniqueness periods\' properties of the line. Is a modified Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2.parsey0Choice from the @phonetic-languages-simplified-examples-array-0.21.0.0@ package. +-}+selectSounds :: String -> FlowSound+selectSounds = f . sort . filter (/= 101) . concatMap g . words . map (\c -> if c  == '.' then ' ' else toLower c)+    where g = getBFst' ([101::Sound8], listArray (0,41) (("1",[1,2,3,4,5,6,7,8,10,15,17,19,21,23,25,27,28,30,32,34,36,38,39,41,43,45,47,49,50,52,54,66]):("sr",[27,28,30,32,34,36]):("vd",[8,10,15,17,19,21,23,25]) :("vs",[45,47,49,50,43,52,38,66,54,39,41]) :("vw",[1..6]) :map (\(k,t) -> (k,[t])) [("\1072",1),("\1073",15),("\1074",36),("\1075",21),("\1076",17),("\1076\1078",23),("\1076\1079",8),("\1077",2),("\1078",10),("\1079",25),("\1080",5),("\1081",27),("\1082",45),("\1083",28),("\1084",30),("\1085",32),("\1086",3),("\1087",47),("\1088",34),("\1089",49),("\1089\1100",54),("\1090",50),("\1091",4),("\1092",43),("\1093",52),("\1094",38),("\1094\1100",66),("\1095",39),("\1096",41),("\1097",55),("\1100",7),("\1102",56),("\1103",57),("\1108",58),("\1110",6),("\1111",59),("\1169",19),("\8217",61)]))+          f (x:ts@(y:xs)) +            | x == y = f ts+            | otherwise = x:f ts+          f xs = xs 
README.md view
@@ -98,6 +98,8 @@  In Ukraine this day has several important celebrations — Intercession of the Holy Theotokos (Pokrova), Cossacks' Day, Day of Defenders of Ukraine (especially relevant during the Russian war against Ukraine). +On the 27/10/2023 there is Ukrainian Language and Writing Day. + All support is welcome, including donations for the needs of the Ukrainian army, IDPs and refugees.  If you would like to share some financial support, please, contact the mentioned foundation
phladiprelio-ukrainian-simple.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               phladiprelio-ukrainian-simple-version:            0.11.0.1+version:            0.12.0.0  -- A short (one-line) description of the package. synopsis:           A PhLADiPreLiO implementation for Ukrainian that uses hashes and asynchronous concurrency.@@ -28,7 +28,7 @@      -- LANGUAGE extensions used by modules in this package.     other-extensions: NoImplicitPrelude, BangPatterns-    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.4.1.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.11.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.7.3.0, phonetic-languages-simplified-base ==0.7.1.0, halfsplit ==0.3.0.0, directory >=1.3.4.0 && <2, rev-scientific ==0.2.1.0, async >= 2.2.2 && <3, phladiprelio-tests ==0.1.0.0, phladiprelio-general-datatype ==0.3.1.0+    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.4.1.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.11.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.7.3.0, phonetic-languages-simplified-base ==0.7.1.0, halfsplit ==0.3.0.0, directory >=1.3.4.0 && <2, rev-scientific ==0.2.1.0, async >= 2.2.2 && <3, phladiprelio-tests ==0.1.0.0, phladiprelio-general-datatype ==0.3.1.0, mmsyn2-array ==0.3.1.1, phonetic-languages-basis ==0.3.0.0     hs-source-dirs:   .     default-language: Haskell2010 @@ -40,7 +40,7 @@     ghc-options:      -threaded -rtsopts     -- LANGUAGE extensions used by modules in this package.     other-extensions: NoImplicitPrelude, BangPatterns-    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.4.1.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.11.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.7.3.0, phonetic-languages-simplified-base ==0.7.1.0, halfsplit ==0.3.0.0, directory >=1.3.4.0 && <2, rev-scientific ==0.2.1.0, async >= 2.2.2 && <3, phladiprelio-tests ==0.1.0.0, phladiprelio-general-datatype ==0.3.1.0+    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.4.1.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.11.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.7.3.0, phonetic-languages-simplified-base ==0.7.1.0, halfsplit ==0.3.0.0, directory >=1.3.4.0 && <2, rev-scientific ==0.2.1.0, async >= 2.2.2 && <3, phladiprelio-tests ==0.1.0.0, phladiprelio-general-datatype ==0.3.1.0, mmsyn2-array ==0.3.1.1, phonetic-languages-basis ==0.3.0.0     hs-source-dirs:   .     default-language: Haskell2010