![文本数据挖掘:基于R语言](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/39130707/b_39130707.jpg)
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=1739301556-LaLWmGZqHTD0dq6vB36WGVKyzF8iydjo-0-39fc6aad108f9ad297915cf460fc81cf)
标点符号没有大小写之分,因此不会进行转换。还有一种转换方法叫作“标题转换”,能够将所有单词的首字母改为大写,但是其他部分则转为小写格式,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_01.jpg?sign=1739301556-1Rjiulv88UXxgm9u9KpR1gb23seR71By-0-a52e9748e1062edca02d5cfae0913a75)
可以看出,所有单词的首字母都转化为大写,其余则转化为了小写形式。
最后介绍让英文符合句子中的转化函数str_to_sentence,它能够把所有内容按照正常句子的形式输出,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_02.jpg?sign=1739301556-kArrpIAJZlE469d9TrSkhWo8pFlmg0cJ-0-db4c37a6c6693ff95a387f6b95007fdb)
因为两个单词中间是逗号,因此第二个单词是小写,完全符合英文中句子的格式。
2.指定字符串的输出长度
指定字符串输出长度的函数包括str_pad/str_trunc。字符串的长短不一,但是有的时候输出的字符串需要指定固定的长度。如果字符串短了,则需要补充其他字符;如果字符串长了,则需要截断。在补全的过程中,一般会使用空格进行填充。例如在一个长度为 30的框中,要将文字内容居中,就可以使用str_pad函数实现,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_03.jpg?sign=1739301556-fcjNbXNfRdpKOs0oPxjqUtI5dlJgJEDh-0-c8e2bf19f83f6d1d993b312f0b413e9c)
首先,函数保证输出的字符串长度为30,而把side设定为“both”则表示在目标字符串“HOPE”两侧补空格。如果需要让“HOPE”靠左侧或者右侧,可以把side参数分别设置为“left”或“right”,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_04.jpg?sign=1739301556-euh5DhGz8h1rd80jBaVa1v91fhbLJ9eL-0-a7182019410df6941079a1679f3d5596)
补全过程中也可以不用空格,而采用其他符号进行填充,例如下面用井号(“#”)进行填充。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_05.jpg?sign=1739301556-TPQzKnPxtVG7jB0TNXTBy8jFkhKGdYEE-0-408bc1f0b17c2a1093b237964184ac1d)
这样,两侧的空格就全部变为井号,长度依然是30。如果字符太长,需要截断,一般用省略号进行替代。例如我们前面保存在en_string中的英文句子,如果只能够显示 30个字符,那么可以用str_trunc函数进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_06.jpg?sign=1739301556-aKLlvgHyIRoZFMcFUyW9PLHujhz3IgOA-0-8a787f2f3978a745828c5ac099900f21)
最后能够保证字符串的长度依然是30,但是只有前27个字符是原来的句子成分,最后以3个句点构成的省略号进行截断。默认是截断后方的内容,其实也可以对前面内容进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_01.jpg?sign=1739301556-qLYusMnAHBSy7mAmW6Cpf8Ye7sqRPouE-0-90690f546dee3bd16cbbae4e0807ca3e)
截断的符号也可以通过ellipsis参数进行设定,例如我们使用“!!!”作为末尾的截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_02.jpg?sign=1739301556-3g3FX3PNS0RXE9PplYqdcVFzj3EEANja-0-a9f30a00fd7f86b7d14ebf1b761c0eed)
3.空格转换(str_trim/str_squish)
在文本数据挖掘的时候,空格往往是不提供额外信息的。如果一个字符串左边或右边有大量的空格,那么就可以直接去除掉。str_trim函数能够把任意字符两边所存在的空格全部清除掉。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_03.jpg?sign=1739301556-SGLjh63y4hy1tW2tIVkgAWn4dc1XH3X9-0-9d4aea77822d73638120f19ca17d5e79)
如果只想清除左边的空格,可以将side参数设定为“left”。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_04.jpg?sign=1739301556-DIP5VifDSIhtpSnPbrWo0OFK3CVhuCF7-0-46f5e902588d00ae0a4c41028101cd49)
此外,如果空格不在两端,一般不会进行处理。但是实际工作中发现有的空格在行文之间具有很大的长度,因此还需要进行特殊处理。str_squish函数就可以做到这一点,它不仅能够把两端的空格全部清除掉,还能够把任意长度大于1的空格都缩减为长度为1的空格,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_05.jpg?sign=1739301556-IHBlJY2yIs9EexrOPoO7PqWcO93vJ2wQ-0-aa5bb8a6170a9c2dfa8aaab33a8df5e0)