我经常需要对具有区分大小写的不同要求的Data.Text值进行比较 - 当我使用chatter进行NLP任务时,这经常会出现.
例如,在搜索令牌以寻找信息提取任务时,我经常需要根据比标准字符串相等性更少限制的等式关系进行搜索.区分大小写是这些更改中最常见的,但它通常是特定标记的函数.像"激活"这样的术语通常可能是小写,但如果它是句子中的第一个单词,它将以一个主要资本开头,或者如果在标题文本中使用可能是全部大写或大写中句,那么忽略案例的比较是有道理的.相反,首字母缩略词(例如,"US")具有取决于大小写的不同语义.
这就是说我不能轻易地为每个相等类创建一个类型类包装器,因为它是一个价值驱动的方面.(所以不区分大小写的包看起来不像它会起作用).
到目前为止,我正在使用toLower
规范表示,并比较这些表示,以便我可以创建带有敏感性标记的文本比较函数的自定义版本,例如:
matches :: CaseSensitive -> Text -> Text -> Bool matches Sensitive x y = x == y matches Insensitive x y = (T.toLower x) == (T.toLower y)
但是,我担心这需要额外传递输入文本.我可以想象它在某些情况下融合,但可能不是全部(例如:T.isSuffixOf,T.isInfixOf).
有一个更好的方法吗?