![自然语言处理应用与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/398/46841398/b_46841398.jpg)
1.2 文本处理技能
1.2.1 字符串处理
1.字符串的创建
字符串是Python中最常用的数据类型,我们可以使用单引号或双引号来创建字符串。创建字符串很简单,只需要为变量分配一个值即可。
例如:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_1.jpg?sign=1739634965-pAZnEPHzRUKeYJ4sCCkXsZJc0anFoQpc-0-409bda97484a6fa5c47d895fc5d980e6)
在终端查看var1变量中的内容如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_2.jpg?sign=1739634965-ehDpP0iIL14GkDpFgBhIgyk3Ft7ecEaA-0-c79714c7bc23e4e3b8019d2d6f22a1c3)
此外,Python支持三引号,用于包含特殊字符,保存原始格式,具体如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_3.jpg?sign=1739634965-Ol0tlFVPJWbgHyjLl58ZJ2e49dykMw75-0-f0630142c507b01ec2d8b142637e85f6)
在终端查看var2变量中的内容如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_4.jpg?sign=1739634965-GhfnZZwBPcvN5XbPX5R3y2H61P8m140w-0-27b3723da33b668479ab36975bc24ab6)
为了正确地表示字符串中的单引号,需要在字符串两边使用双引号。如果使用了单引号,就会出现语法错误。出现语法错误的程序如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_5.jpg?sign=1739634965-Yjb6uuGAaeVHEGCg8dmu4eGhfDYA2yy2-0-c6dccd58eb16d2ed0303c621a9fe9752)
在终端中查看变量var3的结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_20_6.jpg?sign=1739634965-OvPD9sw2ZL3SMHXHc0Kk8H3EhFEgZdX3-0-1528e3a995ba2aa5681417979a5b2e18)
因此,在使用含有单引号的字符串时必须使用双引号。
2.访问字符串中的值
Python中使用方括号[]来访问字符串。按照从左到右的顺序取字符,第一个字符的索引(也称为下表)是0;也可以按照从右到左的顺序取字符,索引值使用负数,最后一个字符的索引是-1。如果使用的索引超出字符串本身的范围,则会出现“IndexError”越界错误。具体程序如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_21_1.jpg?sign=1739634965-TMyIqEVykBprjdBpK83CcOijMlLMzPjg-0-e2d30fb075e8efc14fcb6142176b65d9)
在终端中查看上述案例的输出结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_21_2.jpg?sign=1739634965-TPFce6Yt6dwLds5U7teWQ4DKENvtsecw-0-baaed78d5875fd4e781becb3a3bbe03b)
上述案例同时也给出了使用切片运算符[:]得到一部分字符串的方法。冒号左边是起始下标,右边是结束下标。其中,左边的下标包含在子字符串内,而结束下标对应的字符不包含在子字符串内。步长值也可以是负数,表示自右向左取切片。
3.字符串的运算符
实例变量a值的字符串为“AIX”,变量b值为“Eboard”,字符串运算符示例如表1.2所示。
表1.2 字符串运算符示例
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_21_3.jpg?sign=1739634965-KyBAAwUNWaUSnW3fgHEpBlB2KeiNB0VV-0-70a5605670717371eae0559183310184)
下面的代码给出了表1.2中字符串运算符的具体案例和运行结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_22_1.jpg?sign=1739634965-egMbqU8FLuqKKOCBqL677WaWs9BhWQqQ-0-c96bd61a1a5d0d05303b745fdae02baa)
在终端中查看上述案例的输出结果如下所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_22_2.jpg?sign=1739634965-ggtK0yjXshylpMqfNrpqFiMedu8jYvST-0-29386ba30df0d283cf303da05506c016)
1.2.2 中文分词及案例实现
中文分词指的是将中文句子切分成单独的词语。分词就是将连续的字序列按照一定的规则组合成词序列的过程。自然语言处理的多数任务都需要在词的基础上进行。因此,中文分词作为自然语言处理任务的底层技术,一定程度上决定了自然语言处理的任务能否取得好的结果。我们知道,英文是可以按照空格分割的,但是中文就有很大的不同,其难点在于中文的歧义现象和新词汇的出现。
所以,我们在进行自然处理任务的时候,要先对文本内容进行分词。本节将介绍jieba分词工具及其用法。
jieba是一款非常流行的中文开源分词包,具有高性能、高准确率、高可扩展性等特点。jieba分词支持四种模式。
(1)精确模式:试图将句子最精确地切开,适合文本分析。
(2)全模式:把句子中所有可以组成词的词语都扫描出来,速度非常快,但是不能解决歧义。
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。
(4)paddle模式:利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。jieba分词如果要使用paddle模式就需安装paddlepaddle-tiny。
1.实验目标
使用jieba实现中文分词。
2.实验环境
实验环境如表1.3所示。
表1.3 实验环境
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_23_1.jpg?sign=1739634965-oFbTsnhPp01dpSFMj1sHbMrRCWbEbkNe-0-6026a9393be28a9e8542fc1f84d31a9b)
3.实验步骤
创建words_seq.py源码文件,用于实现词频的统计。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_23_2.jpg?sign=1739634965-2AJRjQ4jSuwUdxRu1fcJBFq3WwmoManu-0-f9d299479654f2344217eabd107008e0)
步骤二:创建word_segment函数,实现不同模式的分词
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_23_3.jpg?sign=1739634965-B70MLni2sCiDwjzPDkbY8ptcENixvPsL-0-22ff48cbdd42d1e5db9b423b69d6312d)
步骤三:自定义main方法编写及主函数处理
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_23_4.jpg?sign=1739634965-4fL9qRFF4BLc3FhYnfFw2kJ4XYaeVzWa-0-0fcd7d8a63fb18dd93f7cf0aa88f419f)
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_24_1.jpg?sign=1739634965-qfqqn3vDi3pBpHCTtK8oWT3OChSlEIR7-0-f771313cc875097f1e8e59245f134dac)
步骤四:运行代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_24_2.jpg?sign=1739634965-txKPMSJ1G03i7j2SoJy1A7mRn2r4ZTvF-0-7a7667c20d140d596cef609b4574c9c1)
经过运行,终端输出内容下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_24_3.jpg?sign=1739634965-ReaDGjU39DpJ4w04f0xaSHM9UqlL9ECy-0-6b454e3ff7280a602a5ca601d9a7e8f2)
从以上结果可以看出,精确模式能获得句子的语义信息,因此自然语言处理的各种任务常常使用精确模式。全模式和搜索引擎模式适用于搜索和推荐领域,而paddle模式则和精确模式类似,不同之处在于paddle模式匹配会对包含语义最大的词组进行切分。