- 文本数据挖掘:基于R语言
- 黄天元编著
- 1081字
- 2021-07-08 12:07:08
3.4 字符串的定制化输出
字符串这种数据往往是非结构化的,因此在实际工作中往往要对其进行一定的调整才能够使用,下面将介绍几种常见的字符串定制化输出,包括大小写转化、空格的补全与缩减等。
1.字符串大小写转换
实现字符串大小写转换的函数包括str_to_lower/str_to_upper/str_to_title/str_to_sentence。英文字母需要区分大小写,但是很多场景下一些问题是大小写不敏感的,因此可能需要统一。str_to_lower函数和str_to_upper函数能够分别把英文字符串统一转换为小写格式和大写格式:
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/65_04.jpg?sign=1739671923-cTLxa4TnWzvXzlZrmx9YwYxx1kaWNhl3-0-4b331776249af9a5bf10f87e958b4bbc)
标点符号没有大小写之分,因此不会进行转换。还有一种转换方法叫作“标题转换”,能够将所有单词的首字母改为大写,但是其他部分则转为小写格式,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_01.jpg?sign=1739671923-HFPnMUUsYrtZsPWDcUYMST6SuVHO5Yby-0-211161e86a71d1989c2057f7bffd478c)
可以看出,所有单词的首字母都转化为大写,其余则转化为了小写形式。
最后介绍让英文符合句子中的转化函数str_to_sentence,它能够把所有内容按照正常句子的形式输出,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_02.jpg?sign=1739671923-DxAtCAu2rE9a1yDoW2SB0W0n1BwyX6iD-0-6890058beeed40a0eb927dc611cd39ac)
因为两个单词中间是逗号,因此第二个单词是小写,完全符合英文中句子的格式。
2.指定字符串的输出长度
指定字符串输出长度的函数包括str_pad/str_trunc。字符串的长短不一,但是有的时候输出的字符串需要指定固定的长度。如果字符串短了,则需要补充其他字符;如果字符串长了,则需要截断。在补全的过程中,一般会使用空格进行填充。例如在一个长度为 30的框中,要将文字内容居中,就可以使用str_pad函数实现,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_03.jpg?sign=1739671923-uW81ssceVojI7iBEwDZ0Jj1xzxz9fEqn-0-2edf463fd8ad6021b631db62f3f49f2b)
首先,函数保证输出的字符串长度为30,而把side设定为“both”则表示在目标字符串“HOPE”两侧补空格。如果需要让“HOPE”靠左侧或者右侧,可以把side参数分别设置为“left”或“right”,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_04.jpg?sign=1739671923-c5g0SClwSKZlBBsLwiWWM5u7mrS69Esh-0-26fbe654b4fc3b7834516abae12bca84)
补全过程中也可以不用空格,而采用其他符号进行填充,例如下面用井号(“#”)进行填充。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_05.jpg?sign=1739671923-XfSITJhcTK0eZrH9v2QCuQ6FCSB08Ic5-0-ba2dba5c82f778fdeca03ffd593dbc16)
这样,两侧的空格就全部变为井号,长度依然是30。如果字符太长,需要截断,一般用省略号进行替代。例如我们前面保存在en_string中的英文句子,如果只能够显示 30个字符,那么可以用str_trunc函数进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_06.jpg?sign=1739671923-4te84n5wUHmNeCzDHvszobx0gqSt3ubK-0-322efdefbb40493e011fc1bc05fa78df)
最后能够保证字符串的长度依然是30,但是只有前27个字符是原来的句子成分,最后以3个句点构成的省略号进行截断。默认是截断后方的内容,其实也可以对前面内容进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_01.jpg?sign=1739671923-bOFMX1YbfPyrH6rUzuUdJz5BN0q3tHaP-0-4cd039d9205950af2ee35b9607f62d6c)
截断的符号也可以通过ellipsis参数进行设定,例如我们使用“!!!”作为末尾的截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_02.jpg?sign=1739671923-pBejt4bDyDqJqj0p4ia77pNIpQ8KHF0i-0-da01a48507b53c6a279b5703ed866d0e)
3.空格转换(str_trim/str_squish)
在文本数据挖掘的时候,空格往往是不提供额外信息的。如果一个字符串左边或右边有大量的空格,那么就可以直接去除掉。str_trim函数能够把任意字符两边所存在的空格全部清除掉。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_03.jpg?sign=1739671923-FF5mZceeT8nET7Kc3H5YbLxqxfvgckDZ-0-bd0e33ebaa53f856e6522e25c26f7f6d)
如果只想清除左边的空格,可以将side参数设定为“left”。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_04.jpg?sign=1739671923-zhPMsHTyhqcAzUdkLCHqlNaCF2V4H7Ef-0-90c1675994c4357fb4a02ddd07ef7100)
此外,如果空格不在两端,一般不会进行处理。但是实际工作中发现有的空格在行文之间具有很大的长度,因此还需要进行特殊处理。str_squish函数就可以做到这一点,它不仅能够把两端的空格全部清除掉,还能够把任意长度大于1的空格都缩减为长度为1的空格,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_05.jpg?sign=1739671923-2eKP2dtVhdbP2MD8SnqdiLlyt5PTZ4od-0-0136ae6001e6bcd70998bec82a3e2e8e)