Skip to content

Commit

Permalink
Update on Hackage
Browse files Browse the repository at this point in the history
  • Loading branch information
OleksandrZhabenko committed Dec 28, 2020
0 parents commit afe31be
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 0 deletions.
9 changes: 9 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Revision history for uniqueness-periods-general

## 0.1.0.0 -- 2020-08-16

* First version. Released on an unsuspecting world.

## 0.2.0.0 -- 2020-08-18

* Second version. Some documentation improvements.
20 changes: 20 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Copyright (c) 2020 OleksandrZhabenko

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2 changes: 2 additions & 0 deletions Setup.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain
115 changes: 115 additions & 0 deletions String/UniquenessPeriodsG.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
-- |
-- Module : String.UniquenessPeriodsG
-- Copyright : (c) OleksandrZhabenko 2020
-- License : MIT
-- Stability : Experimental
-- Maintainer : [email protected]
--
-- Can be used to produce the similar to 'String.Ukrainian.UniquenessPeriods' from
-- @uniqueness-periods@ package functions. Provides the generalization of them.
-- For all the used conversion functions of the type @g :: String -> Vector String@
-- it is important that they are stable for the repeated application (their result after
-- the first application cannot be changed by the rules in the function into new variants).
-- Otherwise, the recursive scheme of the functions in the module will lead to wrong results.
-- So the conversion function should work the following way (@xs@ denotes a word in the language) in GHCi:
--
-- > let v = g xs
-- > let ys = concat . toList $ v
-- > let v2 = g ys
-- > v == v2
-- > True
--
-- Or in the other words, for the single word, @g . concat . toList . g = g@;
--

module String.UniquenessPeriodsG (
-- * Auxiliary functions
show7s'''
, show7s5
, show7s6
, show7sn4'
, show7snc
-- ** Inner predicate (auxiliary)
, eqSnds
-- ** Inner backward conversion function
, listToString
-- * uniquenessPeriods function
, uniquenessPeriods
) where

import Data.Char (isSpace)
import qualified Data.Vector as V
import Data.List ((\\),nubBy)

-- | Function 'listToString' converts the list of Strings being the sequential sounds representations into the text with whitespaces
-- (whitespaces are substituted instead of punctuation symbols, too) and some phonetic conversions. The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation).
listToString :: [String] -> [String] -> String
listToString whspss = concatMap (\ts -> if ts `elem` whspss then " " else ts)

-- | Function 'eqSnds' compares two non-silent Strings representations for sounds by equality. If one of them is a representation for silence (e. g. pause),
-- then the predicate is @False@. The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation).
eqSnds :: [String] -> String -> String -> Bool
eqSnds whspss xs ys
| xs `elem` whspss || ys `elem` whspss = False
| otherwise = xs == ys

-- | The same as @show7s''@ from MMSyn7s module (@mmsyn7s@ package), but the second element in the resulting tuple is again the text with
-- whitespaces (whitespaces are substituted
-- instead of punctuation symbols, too) and some phonetic conversions. The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation).
show7s''' :: [String] -> [String] -> ([String],String)
show7s''' whspss zss =
let (xss, yss) = splitAt 200 zss
uss = xss \\ nubBy (eqSnds whspss) xss
(wss,vss) = if null uss then (xss,[]) else (takeWhile (/= head uss) xss ++ head uss:(takeWhile (/= head uss) . tail . dropWhile (/= head uss) $ xss),
dropWhile (/= head uss) . tail . dropWhile (/= head uss) $ xss) in
(filter (\x -> x `notElem` whspss) $ wss, listToString whspss $ vss ++ yss)

-- | Function 'show7s5' takes a text being a @String@ and returns a tuple, the first element of which is a list of Strings that correspond to the
-- sounds representations that (except pauses) are unique and are not repeated starting from the beginning of the given text (this list is filtered from
-- the representations for the silence), and the second one is a @String@ obtained from the remainder
-- list of Strings starting from the first duplicated non-silent sound representation with whitespaces (whitespaces are substituted
-- instead of punctiuation symbols, too) and some phonetic conversions. The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation). The second argument is a function that
-- converts a 'String' of the text into the 'V.Vector' of sound representations for that language.
show7s5 :: [String] -> (String -> V.Vector String) -> String -> ([String], String)
show7s5 whspss g = show7s''' whspss . V.toList . g

-- | Function 'show7s6' takes a text being a @String@ and returns a list of lists of Strings, each latter one of which is obtained for the unique parts of
-- the text from the sounds representations point of view. It can show how many and what sound representations are needed to be created to completely cover
-- the given text providing all the needed sound parameters. The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation). The second argument is a function that
-- converts a 'String' of the text into the 'V.Vector' of sound representations for that language.
show7s6 :: [String] -> (String -> V.Vector String) -> String -> [[String]]
show7s6 whspss g t@(_:_) = (fst . show7s5 whspss g $ t):(show7s6 whspss g . snd . show7s5 whspss g $ t)
show7s6 _ _ _ = []

-- | Function 'uniquenessPeriods' takes a text being a @String@ and returns a list of Ints. Each Int value is a number of
-- the sounds representations (non-silent ones) being unique and not duplicated alongside the given text starting from the beginning to the end.
-- This function provides some important information about the phonetic and in some cases semantic structures of the text.
-- The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation). The second argument is a function that
-- converts a 'String' of the text into the 'V.Vector' of sound representations for that language.
uniquenessPeriods :: [String] -> (String -> V.Vector String) -> String -> [Int]
uniquenessPeriods whspss g xs
| any (not . isSpace) xs = fmap length . show7s6 whspss g $ xs
| otherwise = [0::Int]

-- | Converts a list of 'String' each one being a non-silent sound representation into a list of 'Int' using recursively @show7sn4'@.
-- The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation).
show7snc :: [String] -> [String] -> [Int]
show7snc whspss xss = let (tss,vss) = show7sn4' whspss xss in if null vss then [length tss] else length tss:show7snc whspss vss

-- | The same as @show7sn'''@ from the MMSyn7s module from the @mmsyn7s@ package, but does not concatenate the list of 'String' as the second tuple's element.
-- The first argument must be a list of 'String',
-- each of which is a representation for the white space (or more generally, non-sound symbol representation).
show7sn4' :: [String] -> [String] -> ([String],[String])
show7sn4' whspss zss =
let (xss, yss) = splitAt 200 zss
uss = xss \\ nubBy (eqSnds whspss) xss
(wss,vss) = if null uss then (xss,[]) else (takeWhile (/= head uss) xss ++ head uss:(takeWhile (/= head uss) . tail . dropWhile (/= head uss) $ xss),
dropWhile (/= head uss) . tail . dropWhile (/= head uss) $ xss) in
(filter (\x -> x `notElem` whspss) $ wss, vss ++ yss)
25 changes: 25 additions & 0 deletions uniqueness-periods-general.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
-- Initial uniqueness-periods-general.cabal generated by cabal init. For
-- further documentation, see http://haskell.org/cabal/users-guide/

name: uniqueness-periods-general
version: 0.2.0.0
synopsis: Can be used to produce the similar to 'String.Ukrainian.UniquenessPeriods' functions.
description: Can be used to produce the similar to 'String.Ukrainian.UniquenessPeriods' from uniqueness-periods package functions. Provides the generalization of them.
homepage: https://hackage.haskell.org/package/uniqueness-periods-general
license: MIT
license-file: LICENSE
author: OleksandrZhabenko
maintainer: [email protected]
copyright: Oleksandr Zhabenko
category: Language
build-type: Simple
extra-source-files: ChangeLog.md
cabal-version: >=1.10

library
exposed-modules: String.UniquenessPeriodsG
-- other-modules:
-- other-extensions:
build-depends: base >=4.7 && <4.15, vector >=0.11 && <0.15
-- hs-source-dirs:
default-language: Haskell2010

0 comments on commit afe31be

Please sign in to comment.