gpt4 book ai didi

Haskell - 从输入单词列表中查找二元组

转载 作者:行者123 更新时间:2023-12-02 18:01:57 25 4
gpt4 key购买 nike

我正在关注 NLPWP 计算语言学网站,并尝试创建一个 Haskell 过程来查找单词列表中的搭配(最常见的两个单词组合,例如“United States”或“to find”)。我有以下工作代码来查找二元组频率:

import Data.Map (Map)
import qualified Data.Map as Map

-- | Function for creating a list of bigrams
-- | e.g. [("Colorless", "green"), ("green", "ideas")]
bigram :: [a] -> [[a]]
bigram [] = []
bigram [_] = []
bigram xs = take 2 xs : bigram (tail xs)

-- | Helper for freqList and freqBigram
countElem base alow = case (Map.lookup alow base) of
Just v -> Map.insert alow (v + 1) base
Nothing -> Map.insert alow 1 base

-- | Maps each word to its frequency.
freqList alow = foldl countElem Map.empty alow

-- | Maps each bigram to its frequency.
freqBigram alow = foldl countElem Map.empty (bigram alow)

我正在尝试编写一个函数,将每个二元组的映射输出到[二元组的频率]/[(频率词1)*(频率词2)]。您能否提供有关如何处理它的建议?

以下代码均不起作用,但它为我想要做的事情提供了模糊的轮廓。

collocations alow = 
| let f key = (Map.lookup key freqBi) / ((Map.lookup (first alow) freqs)*(Map.lookup (last alow) freqs))
in Map.mapWithKey f = freqBi
where freqs = (freqList alow)
where freqBi = (freqBigram alow)

我对 Haskell 很陌生,所以如果您有任何想法如何修复搭配过程,请告诉我。也欢迎提供风格建议。

最佳答案

除了最后的 colloctions 函数之外,大部分代码看起来都很正常。

我不知道为什么等号后面有一个杂散的管道。您并没有尝试编写任何类型的模式保护,因此我认为不应该在那里。

Map.lookup 返回一个 Maybe 键,因此尝试进行除法或乘法是行不通的。也许您想要的是某种接受键和映射的函数,如果键不存在,则返回关联的计数或零

除此之外,看来您离完成这项工作已经不远了。

关于Haskell - 从输入单词列表中查找二元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646178/

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