![文本数据挖掘:基于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=1739317540-9zetz8KHYAnnrIoxTwENcFG49TFcmiJ7-0-40b87462d67fb1a5c878f6c430ff201c)
标点符号没有大小写之分,因此不会进行转换。还有一种转换方法叫作“标题转换”,能够将所有单词的首字母改为大写,但是其他部分则转为小写格式,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_01.jpg?sign=1739317540-ZgFfcjWjbBbID9Ojwnwu2iZ6OpczIkrl-0-7a82360558c3c6ad00dfbf5950ea07a0)
可以看出,所有单词的首字母都转化为大写,其余则转化为了小写形式。
最后介绍让英文符合句子中的转化函数str_to_sentence,它能够把所有内容按照正常句子的形式输出,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_02.jpg?sign=1739317540-FpmlV9tkkcGjG12SZeemxMInLUdE31Ig-0-2948a82b8f5fe690156576cbdd59160e)
因为两个单词中间是逗号,因此第二个单词是小写,完全符合英文中句子的格式。
2.指定字符串的输出长度
指定字符串输出长度的函数包括str_pad/str_trunc。字符串的长短不一,但是有的时候输出的字符串需要指定固定的长度。如果字符串短了,则需要补充其他字符;如果字符串长了,则需要截断。在补全的过程中,一般会使用空格进行填充。例如在一个长度为 30的框中,要将文字内容居中,就可以使用str_pad函数实现,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_03.jpg?sign=1739317540-KKQrbQfYfgSo6gPrMJREAPHtG9k1uRpW-0-c06781d5adc0d62db80d6dbb9e015e71)
首先,函数保证输出的字符串长度为30,而把side设定为“both”则表示在目标字符串“HOPE”两侧补空格。如果需要让“HOPE”靠左侧或者右侧,可以把side参数分别设置为“left”或“right”,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_04.jpg?sign=1739317540-n21nL8hkl86GEfstFJj1nWRW4BVn89rp-0-fc4d41344c7ddd50b7d98c35165a26c1)
补全过程中也可以不用空格,而采用其他符号进行填充,例如下面用井号(“#”)进行填充。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_05.jpg?sign=1739317540-WU9H5u47J96kRvX5i3uCgrG40owrpSn3-0-fc36046b5a9ddb29d31f2295939608d9)
这样,两侧的空格就全部变为井号,长度依然是30。如果字符太长,需要截断,一般用省略号进行替代。例如我们前面保存在en_string中的英文句子,如果只能够显示 30个字符,那么可以用str_trunc函数进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/66_06.jpg?sign=1739317540-eudOjiorLIXf6z8NFK2VhN1hI8kpvgVz-0-ceb8584941d5ff1433539451dfebd92f)
最后能够保证字符串的长度依然是30,但是只有前27个字符是原来的句子成分,最后以3个句点构成的省略号进行截断。默认是截断后方的内容,其实也可以对前面内容进行截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_01.jpg?sign=1739317540-MMsvGSS5tIXMyqA8Z9O3eEs66UAccE8I-0-ee5709b9c214332ad9f27ccbeb149c4a)
截断的符号也可以通过ellipsis参数进行设定,例如我们使用“!!!”作为末尾的截断。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_02.jpg?sign=1739317540-z1dpHzqok04D2vHUOez8LgEUi6pADJ0I-0-363fee4e988b9044b32a91dc391d3c22)
3.空格转换(str_trim/str_squish)
在文本数据挖掘的时候,空格往往是不提供额外信息的。如果一个字符串左边或右边有大量的空格,那么就可以直接去除掉。str_trim函数能够把任意字符两边所存在的空格全部清除掉。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_03.jpg?sign=1739317540-fWdfolQTUZFcSdtdlJOk9gzEzmhv0SGZ-0-87ad38348585898fbb93631177b67c23)
如果只想清除左边的空格,可以将side参数设定为“left”。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_04.jpg?sign=1739317540-BsFeNttEiS7ZNpOJVtbcoqTxftedsaQJ-0-713abd74fd4b3f772ce5676cd201abd2)
此外,如果空格不在两端,一般不会进行处理。但是实际工作中发现有的空格在行文之间具有很大的长度,因此还需要进行特殊处理。str_squish函数就可以做到这一点,它不仅能够把两端的空格全部清除掉,还能够把任意长度大于1的空格都缩减为长度为1的空格,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/67_05.jpg?sign=1739317540-Qo60RxHsTdIhaXA1znt4dapYyH6OEVzO-0-cd1b0777125746d88628d6ae3b50b1c3)