《自然语言处理》- 字符串常用操作

《自然语言处理》- 字符串常用操作

Scroll Down

1. 字符串操作

1.1 去空格和特殊符号

  • strip() 去除两端的空格
  • lstrip() 去除左边空格
    1. lstrip(str) 去除左边以 str 开头的部分, 必须完全匹配
  • rstrip() 去除右边空格
    1. rstrip(str) 去除右边以 str 结尾的部分, 必须完全匹配
s = ' hello , world!'

print('|' + s.strip() + '|')
print('|' + s.lstrip(' hello , ') + '|')  # 删除以  hello ,  开头的部分, 必须完全匹配, 否则无法删除
print(s.rstrip('!'))  # 删除以 ! 结尾的部分, 必须完全匹配, 否则无法删除
|hello , world!|
|world!|
 hello , world

1.2 连接字符串

str1 = 'hello,'
str2 = 'world'
str1 += str2
print(str1)
hello,world

1.3 查找字符串

  • str1.index(target) 返回 target 在字符串中的下标
    1. 如果没找到, 直接抛异常 : ValueError: substring not found
str1 = 'hello,world'
target = 'llo'

posIndex = str1.index(target)  # 如果没找到, 直接抛异常 : ValueError: substring not found
print(posIndex)
2

1.4 比较字符串

  • 需要导入 import operator as op
  • python3 不再使用 cmp
  • op.eq(str1, str2) 比较字符串是否相等
import operator as op  # python3 不再使用 cmp

str1 = 'hellor'
str2 = 'hello'
print(op.eq(str1, str2))
print(op.eq(str2, str1))
print(op.eq(str1, str1))
False
False
True

1.5 字符串中的大小写转换

  • str1.upper() 转换为大写
  • str2.lower() 转换为小写
str1 = 'ABCDefg'
print(str1.upper())  # 转换为大写
print(str2.lower())  # 转换为小写
ABCDEFG

1.6 翻转字符串

  • python中,字符换是不可变,更改字符串不会修改字符串,而是创建一个新的字符串。
  • 字符串是可切片,切片字符串会以给定的增量从字符串中的一个点(向后或向前)向另一个点提供一个新字符串。它们在下标中采用切片表示法或切片对象:
    1. string[start:stop:step] 下标通过在大括号中包含冒号来创建切片
    2. str1[::-1] 反转字符串
str1 = 'abcdef'
print(str1[::-1])
fedcba

1.7 查找字符串

  • str1.find(target) 返回 target 在 字符串中的索引, 查找失败返回 -1
str1 = 'abcdef'
target = 'cde'

print(str1.find(target))  # 返回 target 在 字符串中的索引, 查找失败返回 -1
-1

1.8 分割字符串

str1 = 'ab, cde, fgh'
target = ','
print(str1.split(target))
['ab', ' cde', ' fgh']

1.9 统计词频

  • import re
  • from collections import Counter
  • result = re.findall('[a-zA-Z]', text) 使用正则获取字母
  • Counter(result)
    1. 返回值为字典 {单词:词频} : Counter({'a': 3, 'b': 3, 'c': 3, 'e': 3, 'd': 2})
    2. result 必须是列表
    3. count.values() : 获取单词词频数 list
    4. count.keys() : 获取单词 list
    5. count.items() : 返回 k,v 迭代器
import re
from collections import Counter

text = 'aaabbbC CEEEE,EDdD!'
# 将字符串转为小写
text = text.lower()
# 去掉字符串中的其他符号, 只获取字母
result = re.findall('[a-zA-Z]', text) # 返回值为list
count = Counter(result) # 返回值为字典 {单词:词频} : Counter({'a': 3, 'b': 3, 'c': 3, 'e': 3, 'd': 2})
count_value = count.values() # 获取词频列表  dict_values([3, 3, 3, 3, 2]))
max_value = max(count_value) # 获取最大的词频数 : 3
max_list = [] # 存储最大词频数对应的 单词

# 获取最大词频数对应的单词
for k,v in count.items():
    if v == max_value:
        max_list.append(k)
max_list = sorted(max_list)
max_list
['e']
  • 其他版本
#version 2
import string

def get_max_value(text):
    text = text.lower()
    return max(string.ascii_lowercase, key=text.count)

get_max_value(text)
<built-in method count of str object at 0x000002342E078850>

'e'
#version 3
from collections import Counter

def get_max_value(text):
    count = Counter([x for x in text.lower() if x.isalpha()])
    m = max(count.values())
    return sorted([x for (x, y) in count.items() if y == m])[0]

get_max_value(text)
'e'

2. lambda 表达式

  • sum = lambda a,b: a+b
    1. a,b 其实就是传递的两个参数
    2. a+b是一个表达式
    3. sum就是函数名
# 带入key函数中,各个元素返回布尔值,相当于[False, False, False, True, True, True]
# key函数要求返回值为True,有多个符合的值,则挑选第一个。
max(range(6), key = lambda x : x > 3) # 返回大于 3 的第一个值
4
# 带入key函数中, 各个元素返回自身的值, 最大的值为5, 返回5
max([3,5,2,1,4,3,0], key = lambda x : x)
5
# 带入key函数,各个字符串返回最后一个字符,其中'ah'的h要大于'bf'中的f,因此返回'ah'
max('ah', 'bf', key=lambda x: x[1])
'ah'
# 带入key函数,各个字符串返回第一个字符, 其中'bf'的b要大于'ah'中的a, 因此返回'bf'
max('ah', 'bf', key=lambda x: x[0])
'bf'
# 带入key函数,返回各个字符在'Hello World'中出现的次数,出现次数最多的字符为'l',因此输出'l'
text = 'Hello World'
max('abcdefghijklmnopqrstuvwxyz', key=text.count)
'l'