对于一个由中文句子组成的列表,现在需要去除一切标点符号及数字,仅保留中文并将句子输出为列表。
sentence
0 巴林新增3例新冠肺炎确诊病例 累计确诊50例
1 稳外资外贸 中国这样做
2 工信部:每天保障湖北地区防护服数量达25万件
3 广东建口岸联防联控机制 疫情严重地区入境者均需隔离
4 广州警方将全面压缩港澳商务签注办理时限
5 他们,身处脱贫攻坚一线,又是疫情防控先锋
6 南非卫生部:尚未考虑任何旅行或贸易禁令
7 工信部:为湖北提供约6.5万台(套)医疗设备 基本满足防疫需要
8 【抗疫在基层】战疫日记:防疫战中的武汉味道
9 中国经济战“疫”录:疫情下共享经济的“危”与“机”
Name: 标题, dtype: object
首先加载re和jieba包。
import re
import jieba
接下来使用以下代码构造分词去停用词函数,其中chineseStopWords.txt为停用词库。这里的处理逻辑是:先导入停用词库形成列表,接下来对一个单独句子处理,先通过re.findall提取出句子中的每一个单独汉字,再用join函数把汉字连接成没有空格和符号的句子,再用jieba.lcut将句子分词形成列表,这里使用的是精准切割(cut_all = False),最后通过for循环,倒序检查列表的每一个元素,如果这个元素出现在停用词列表中,者将其删除,最后返回这个列表。
stopwords = [i.strip() for i in open('chineseStopWords.txt').readlines()]
def pretty_cut(sentence):
cut_list = jieba.lcut(''.join(re.findall('[\u4e00-\u9fa5]', sentence)), cut_all = False)
for i in range(len(cut_list)-1, -1, -1):
if cut_list[i] in stopwords:
del cut_list[i]
return cut_list
接下来通过apply函数对列表批量分词。
list(map(lambda x: pretty_cut(x), sentence))
[['巴林', '新增', '例新冠', '肺炎', '确诊', '病例', '累计', '确诊', '例'],
['稳', '外资', '外贸', '中国'],
['工信部', '保障', '湖北', '地区', '防护服', '数量', '达', '万件'],
['广东', '建', '口岸', '联防', '联控', '机制', '疫情', '地区', '入境者', '均', '需', '隔离'],
['广州', '警方', '压缩', '港澳', '商务', '签注', '办理', '时限'],
['身处', '脱贫', '攻坚', '一线', '疫情', '防控', '先锋'],
['南非', '卫生部', '尚未', '旅行', '贸易', '禁令'],
['工信部', '湖北', '提供', '约', '万台', '套', '医疗', '设备', '防疫'],
['抗疫', '基层', '战疫', '日记', '防疫', '战中', '武汉', '味道'],
['中国', '经济', '战疫录', '疫情', '共享', '经济', '危与机']]