gpt4 book ai didi

haskell - 在 Haskell 中从字符串中删除字符

转载 作者:行者123 更新时间:2023-12-03 20:19:00 24 4
gpt4 key购买 nike

我正在创建一个程序,该程序读取文本文件并拆分单词并将它们存储在列表中。我一直在尝试创建一个函数,它接收一个字符串,它是文件中的整个文本字符串并删除标点符号,例如";", ",", "."但不幸的是还没有任何运气。该程序在没有标点功能的情况下工作,但当我将它包含到 (toWords fileContents) 时就不行了。请有人看看我做了什么,看看我做错了什么。

这是我到目前为止的代码:

main = do  
contents <- readFile "LargeTextFile.txt"
let lowContents = map toLower contents
let outStr = countWords (lowContents)
let finalStr = sortOccurrences (outStr)
let reversedStr = reverse finalStr
putStrLn "Word | Occurrence "
mapM_ (printList) reversedStr

-- Counts all the words.
countWords :: String -> [(String, Int)]
countWords fileContents = countOccurrences (toWords (removePunc fileContents))

-- Splits words and removes linking words.
toWords :: String -> [String]
toWords s = filter (\w -> w `notElem` ["an","the","for"]) (words s)

-- Remove punctuation from text String.
removePunc :: String -> String
removePunc xs = x | x <- xs, not (x `elem` ",.?!-:;\"\'")

-- Counts, how often each string in the given list appears.
countOccurrences :: [String] -> [(String, Int)]
countOccurrences xs = map (\xs -> (head xs, length xs)) . group . sort $ xs

-- Sort list in order of occurrences.
sortOccurrences :: [(String, Int)] -> [(String, Int)]
sortOccurrences sort = sortBy (comparing snd) sort

-- Prints the list in a format.
printList a = putStrLn((fst a) ++ " | " ++ (show $ snd a))

最佳答案

你可能想要:

removePunc xs = [ x | x <- xs, not (x `elem` ",.?!-:;\"\'") ]

带括号。

关于haskell - 在 Haskell 中从字符串中删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com