【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取

2024-07-30 12:30:40 浏览数 (2)

一、前言

语言是一种使用具有共同处理规则的沟通指令的广义概念,这些指令可以通过视觉、声音或触觉等方式传递。语言可以分为自然语言、动物语言和计算机语言。

自然语言是人类发展过程中形成的一种信息交流方式,它包括口语和书面语,并且反映了人类的思想。自然语言是通过语言习得和文化影响逐渐形成的,并且会随着时间的推移而自然地演化。人类使用自然语言进行沟通和表达时,利用语言中的词汇、语法和语义等元素来传递指令。通过自然语言,人们可以交流思想、传递信息、表达感情和进行社交互动。自然语言具有多样性和灵活性,不同的语言有着不同的特点和表达方式,这也反映了不同文化背景和社会环境对语言的影响。

自然语言处理(Natural Language Processing,NLP) 是一门研究通过建立形式化计算模型来分析、理解和生成自然语言的学科。它的终极目标是让计算机能够具备与人类进行自然语言交流的能力。NLP包含两大问题:

  • 自然语言理解:指让计算机能够理解和解释人类使用的自然语言。这包括对文本或语音进行语法分析、语义分析和语境推断等,从而能够理解句子的含义、语义以及上下文关系。
  • 自然语言生成:指让计算机能够生成符合语法和语义规则的自然语言文本或语音。这包括根据特定的输入或需求,将计算机所处理的信息转化为可读性高、呈现方式自然的自然语言表达形式。

  在自然语言处理领域,研究者们通过设计和开发各种算法、模型和技术,来实现自动处理自然语言的能力。这些技术可以应用于各种领域,比如机器翻译、情感分析、问题回答系统、语音识别和自动摘要等。

自然语言处理涉及字符串构造、截取与格式化输出等基础操作,本文将介绍使用引号构造字符串、字符串索引、切片操作等。

二、正则表达式与Python中的实现

前文:【深度学习】 Python 和 NumPy 系列教程(二):Python基本数据类型:3、字符串(索引、切片、运算、格式化)

1. 字符串构造

  在Python中字符串的构造,主要通过两种方法来实现,一是使用str函数,二是用单引号、双引号或三引号。在Python中,使用引号是一种非常便捷的构造字符串方式。

a. 使用str函数

str()函数是Python内置的函数,用于将其他类型的数据转换为字符串类型。例如:

代码语言:javascript复制
num = 123
str1 = str(num)
print(str1)  # 输出:'123'
b. 单引号或双引号构造字符串
  • 在用单引号或双引号构造字符串时,要求引号成对出现
    • 如:‘Python World!’、‘ABC’、“what is your name?”,都是构造字符串的方法。
    • 'string"在Python中不是一个合法的字符串。
代码语言:javascript复制
str2 = 'Python World!'
str3 = "ABC"
str_error = 'string"
c. 单双引号构造字符串的特殊用法
  • 如果代码中的字符串包含了单引号,且不用转义字符,那么整个字符串就要用双引号来构造,否则就会出错。
  • 如果代码中的字符串包含了双引号,且不用转义字符,那么整个字符串要用单引号来构造
代码语言:javascript复制
"Let's go!"
代码语言:javascript复制
print("Let's go!")
代码语言:javascript复制
'Let's go!'
代码语言:javascript复制
'" Hello world! ",he said. '
代码语言:javascript复制
print('" Hello world!",he said. ') 
d. 三重引号字符串
  • 三重引号字符串是一种特殊的用法。三重引号将保留所有字符串的格式信息。 如字符串跨越多行,行与行之间的回车符、引号、制表符或者其他任何信息, 都将保存下来。在三重引号中可以自由的使用单引号和双引号

PS:打三次单引号就会自动识别出三引号

代码语言:javascript复制
print('''"What's your name?""My name is Jone"''')
代码语言:javascript复制
print('''"What's your name?"
"My name is Jone"''')
e. 典例

  编写程序,分别用双引号、单引号和三引号作为字符串边界符,实现语句 Let's say:"Hello World!" 的正确输出:

  • 程序代码
代码语言:javascript复制
print("Let's say:"Hello World!"")
print('Let's say:"Hello World!"')
print('''Let's say:"Hello World!"''')
  • 运行结果

2. 字符串截取

  字符串的截取就是取出字符串中的子串。截取有两种方法:一种是索引str[index]取出单个 字符;另一种是切片str[[start]:[end]:[step]]取出一片字符。

  • 字符串的索引和切片方式与列表类似,索引从0开始,可以使用正向索引和反向索引:
a. 索引

  通过索引可以获取字符串中指定位置的单个字符。

代码语言:javascript复制
s = 'student'
print(s[0])    # 输出: 's',获取第一个字符
print(s[-1])   # 输出: 't',获取倒数第一个字符
b. 切片

  切片用于获取字符串中一段连续的子串:

  • 模式:<字符串>begin: end: step
    • 左闭右开:以step为步长,取begin到end-1处的全部元素
    • step的正负性代表了方向:当step为负时,需要反向输出
    • 缺省值:begin=0;end=len(<字符串>);step=1
代码语言:javascript复制
print(s[1:3])
  • 输出: tu,获取位置为1到位置为2的子串,不包括位置3的字符
代码语言:javascript复制
print(s[:3])
  • 输出: stu,从头开始取到位置为2的子串
代码语言:javascript复制
print(s[-2:])
  • 输出: nt,从倒数第二个位置开始取到结尾
代码语言:javascript复制
print(s[:])
  • 输出: student,取出全部字符
代码语言:javascript复制
print(s[::2])
  • 输出: suet,步长为2,每隔一个字符取一个
c. 注意事项
  • 字符串的切片操作不会修改原始字符串,而是返回一个新的字符串。
  • 字符串是不可变的数据类型,因此不能通过索引或切片的方式修改字符串的某个字符或子串,否则会抛出TypeError异常。
代码语言:javascript复制
s[0] = 'e'
代码语言:javascript复制
s[1:3] = 'ut'
代码语言:javascript复制
TypeError: 'str' object does not support item assignment

0 人点赞