- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含数千个表和列的数据库。列名一致全部大写,例如预订流程已添加、预订日期时间、预订状态。我希望重命名列,使它们采用小驼峰式大小写,例如BOOKINGSTATUS -> booking_status
由于单词、空格或下划线之间的大小写没有变化,因此基本上不可能应用更传统的方法将字符串转换为不同的大小写(例如使用 R 的 snakecase
包)。我想知道是否可以对每个字符串应用某种英语词典查找并返回拆分。
以上面的 BOOKINGSTATUS 为例,返回结果可能是:boo_king_status、boo_king_stat_us 和 booking_status。指定单词的最小长度会很有用。如果最小值设置为 4 个字母,则此示例中将仅返回 booking_status(因为“boo”只有 3 个字母长,“us”只有 2 个字母长)
蛮力方法很可能在计算上过于昂贵,但想询问是否有一种相当有效的方法可以做到这一点。 Python 或 R 解决方案将受到欢迎。
最佳答案
这是一个草率的、暴力的、不完美的尝试。它几乎肯定会错过一些东西。其实更多的是关于过程的对话,希望大家能建立一个更好的“词典”。
首先,讨论一下这个“字典”:理想情况下它应该包含一个单词及其复数、*ing
和 *ed
形式。我们将尝试用蛇形包裹 (_word_
) 版本替换每个单词,因此我们将根据长度以相反的顺序进行。为了保持理智,我们可能应该删除太短的单词(and
、an
、a
),所以让我们从 stringr::单词
(只是一个“用于练习字符串操作的示例字符向量”,不是一个好的开始)。
words <- stringr::words[ order(nchar(stringr::words), decreasing = TRUE) ]
# see words[nchar(words) < 4] for what we are removing here
words <- words[nchar(words) > 3]
Reduce(function(txt, ptn) gsub(ptn, paste0("_", ptn ,"_"), txt, perl = TRUE),
toupper(words), init = vec)
# [1] "_BOOK_ING_PROCESS__NOTE_ADDED" "_BOOK_ED_DATE__TIME_" "_BOOK_INGSTATUS"
这看起来确实很奇怪。我们可以注意到,我们向量中知道的一些单词在stringr::words
中丢失了:
c("booking", "process", "status") %in% words
# [1] FALSE TRUE FALSE
我们可以扩充我们的列表:
words2 <- c(words, "booking", "booked", "status")
words2 <- words2[ order(nchar(words2), decreasing = TRUE) ]
Reduce(function(txt, ptn) gsub(ptn, paste0("_", ptn ,"_"), txt, perl = TRUE),
toupper(words2), init = vec)
# [1] "__BOOK_ING__PROCESS__NOTE_ADDED" "__BOOK_ED__DATE__TIME_" "__BOOK_ING__STATUS_"
这里的问题是,由于我们同时拥有 "booking"
和 "book"
,因此它总是会双重更改 "BOOKING"
。鉴于我的起步很幼稚,除了删除 "book"
(顺便说一句,还有 "king"
)之外,我不知道还有什么简单的快速补丁。
words3 <- setdiff(words2, c("book", "king"))
Reduce(function(txt, ptn) gsub(ptn, paste0("_", ptn ,"_"), txt, perl = TRUE),
toupper(words3), init = vec)
# [1] "_BOOKING__PROCESS__NOTE_ADDED" "_BOOKED__DATE__TIME_" "_BOOKING__STATUS_"
从这里,我们可以删除前导/尾随和双_
。
gsub("__", "_",
gsub("^_|_$", "",
Reduce(function(txt, ptn) gsub(ptn, paste0("_", ptn ,"_"), txt, perl = TRUE),
toupper(words3), init = vec)))
# [1] "BOOKING_PROCESS_NOTE_ADDED" "BOOKED_DATE_TIME" "BOOKING_STATUS"
质量完全取决于从一本好的字典开始。如果您所有的 UPPERNOSPACEWORDS 都定义良好,那么也许您可以手动构建它。 (请注意,某些单词可能只是 self 隔离,因为前后都有一个已知单词(请注意,"added"
不在 words3
中,但它仍然被分解)。
关于python - 全部大写的驼峰式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70621434/
请帮助我..我被困在这里.. 我真正想要的是检查密码是否重复单个字符或数字。 重复要求 aaaa = 假, abbb = 假 abag = 假 a33f = 假 abcd1234 = 真 一个字符在密
在 Ant 中,我有一个名为 ' some_property 的属性。 ',假设它的值为“hello”。 我正在尝试 替换文本文件中的占位符 将此属性的值(“ hello ”)作为 大写 . 所以,我
var temp=["dy34","fd","FD","av","AV","12esu",1,"DY34",1011,123,101]; 当我对数组进行排序时,我得到的结果是: result = [1
var font_name = $(".font").val(); 我的 JavaScript 代码中有这个。在我的 html 中,我有一个带有 .font 类的输入表单。 我想将 .font 中每个
有人可以解释一下我如何实现文本转换:大写; sIFR 3 的功能? 在文档上,它解释了如何使用它,但我真的不知道如何实现它。有人可以举个例子吗? Specifes text transformatio
这个问题已经有答案了: String contains - ignore case [duplicate] (5 个回答) 已关闭 3 年前。 我需要定义我的查询是 DDL 还是 DML。为此,我需要
所以我一直在用 Java 编写一小段代码,它从用户那里获取输入,计算大写字母、小写字母和其他部分(例如空格、数字,甚至括号),然后返回每个部分的数量用户。 我遇到的问题是,如果我输入“Hello Th
在土耳其语中,有两个 i 无点:ı,I 虚线:i,© 问题:每次我将 i 大写时,我得到的是 I。 当我将 i 大写时,我想得到一个 İ(仅限土耳其语),以及一个I 当我将 ı 大写时。 我有一个函数
使用点符号向数组添加属性是否会将其更改为对象? var arr = []; arr.something = "test"; 是数组吗? 我不这么认为,但 underscore.js 说是 consol
我希望 TextBlock、Label、MenuItem.Header 中的所有文本都以大写显示。字符串取自 ResourceDictionary 例如: 等等。 (也适用于 Label 和其他控
我正在尝试计算包含用户定义范围内所有大写字符的单元格实例的数量,我已经有一些代码可以循环并正确突出显示这些大写单元格,但我正在努力应用该逻辑到VBA 的 Countif 函数。这是我得到的代码,但它给
我正在使用 dplyr 进行数据清理。 我想做的一件事是将某些列中的值大写。 data$surname john Mary John mary ...
为什么低于一个不起作用?我需要转换 IsValue转换成大写值,然后需要用 NO 检查它值(value)。我该怎么做? {{item.IsValue}} 最佳答案 确保 uppercase在比较
我需要将相同的变量转换为大写|小写|大写。 /** * @package ${1 default="Hello"} * @subpackage ${com}_${1 capitalize
显然,拉丁字母表也是如此。但我是在概念上提出这个问题,跨越语言和 Unicode 规范。 实际上,这是为了比较两个字符串。如果你已经知道它们的字节数不同——在所有语言中——你能认为这足以保证它们不是同
今天我更新了我的 Octopress 博客,当我运行时: rake new_post["This is a test of title"] 它在 source/_post/2013-02-18-thi
除了大写部分之外,我的程序正在运行:以下是将英语单词 englishWord 翻译为 Pig 拉丁语单词 pigLatinWord 的方法:A。如果英语单词中没有元音,那么pigLatinWord就是
通过使用一个输入文本框,输入类型只允许字母。输入的值为'a',它应该在文本框外显示为'A'? 如果我们在输入文本中输入小写字母“a”,那么它会希望在框外显示大写字母“A”...以下是我的html代码:
我正在开发一个特殊的脚本来修复文本区域内的字母。我在堆叠时发现了一个问题。在 Stackoverflow 上,我找不到解决方案,需要帮助。 我的脚本有一个系统,用于识别每个以大写首字母开头的单词,以及
我在 bash 中有以下行: echo "Manufacturer: $(echo ${family:-$name}|cut -d' ' -f1)" 我想使用 ${var^} 语法将回显字符串大写,但
我是一名优秀的程序员,十分优秀!