前一节对微博内容进行了缺失值填充和删除,本小节对微博内容进行数据清洗和分词处理,以便后续的词云图绘制。本节中主要使用re库和replace函数进行文本清洗。 sub函数 re.sub()是Python中re(正则表达式)库提供的函数之一,用于在字符串中通过正则表达式模式匹配的内容进行替换。 语法: re.sub(pattern, repl, string, count=0, flags=0) 参数: pattern:要匹配的正则表达式模式,可以是字符串或编译后的正则表达式对象。 repl:替换的内容,可以是字符串或一个函数。如果是字符串,替换所有匹配的内容;如果是函数,根据匹配的内容动态生成替换内容。 string:要进行替换的原始字符串。 count(可选):指定最大替换次数。默认为0,表示替换所有匹配的内容。 flags(可选):用于控制正则表达式的匹配方式,如忽略大小写、多行匹配等。 返回值: 返回替换后的新字符串。 replace函数 replace()函数是Python字符串对象提供的方法之一,用于将字符串中的指定旧值替换为新值。 语法: str.replace(old, new[, count]) 参数: old:要被替换的旧值。 new:用于替换旧值的新值。 count(可选):指定最大替换次数。默认为全部替换。 返回值: 返回一个新的字符串,其中旧值已被新值替换。 cut函数 jieba库是一款中文文本处理的常用工具库,其中的cut()函数基于前缀词典实现的分词算法,可以将中文文本切分成词语,便于后续的中文文本处理和分析。 语法: jieba.cut(sentence, cut_all=False, HMM=True) 参数: sentence:待分词的文本字符串。 cut_all(可选):是否采用全模式分词。默认为False,表示采用精确模式分词。 HMM(可选):是否使用隐马尔可夫模型进行分词。默认为True,表示使用。 返回值: 返回一个可迭代的生成器(generator),用于逐个输出分词结果。 使用示例: import jieba text = "我爱自然语言处理" seg_list = jieba.cut(text) print("/".join(seg_list)) 输出: 我/爱/自然语言/处理 在示例中,调用jieba.cut()函数对文本字符串"我爱自然语言处理"进行分词。默认采用精确模式分词,并启用了隐马尔可夫模型。最后,通过"/".join(seg_list)将分词结果连接为字符串并输出。分词结果为"我/爱/自然语言/处理"。 任务步骤 定义一个read_stopwords函数读取停用词表文件,并返回停用词列表。 数据清洗: 定义一个函数data_cleaning,用于对文本内容进行清洗。 初始化特殊字符、标点、数字、字母等。 调用read_stopwords函数,读取停用词表。 遍历文本列表。 用find函数找到文本中"展开全文-收起全文"内容,截取其中的文本部分。 使用re库的sub函数实现去除文本中的用户名部分。 lower函数统一转换为小写。 使用replace函数去除特殊字符、标点等,。 使用jieba库的cut函数进行分词。 去除分词后的停用词、换行符和空格。 将分词结果添加到清洗后的列表中。 将微博内容转换为列表:将"内容"列的值转换为列表,并赋值给变量content。 将内容分词后保存到列表:调用data_cleaning函数,将content列表中的文本进行清洗和分词处理,并将结果保存到content_seg_list列表。 将分词结果添加为新列:将content_seg_list列表作为新列"content_seg"添加到sample数据框中。 针对微博内容的文本进行了数据清洗和分词处理,通过去除特殊字符、标点、停用词等,以及使用jieba库进行中文分词,将文本内容转换为经过处理的分词列表。将处理好的分词文本存到了content_seg_listb变量和sample['content_seg']列中。 import jieba,re def read_stopwords(file='hit_stopwords.txt'): with open(file,___, encoding=___) as f: stopwords = f.read().___('\n') return stopwords def data_cleaning(content_list): content_seg_list = [] symbols = '-\\n~%≥℃|/【】↓#~_「♂!?\',、:;。《》()()·—.…,0123456789abcdefghijklnmopqrstuvwxyz' stopwords = _____() for content in content_list: # 获取“展开全文-收起全文”内文本 if '展开全文' in content and '收起全文' in content: begin = content.___('展开全文') end = content.___('收起全文') content = content[begin: end] if '@' in content: content = re.___('@.* ', ' ', content) content = content.lower() for con in content: if con in symbols: content = content.re place(con, ' ') con_list = jieba.___(content, cut_all=False) result_list = [] for con in con_list: if con not in stopwords and con!='\n' and con!='\u3000' and con!=' ': result_list.append(con) content_seg_list.append(result_list) return content_seg_list content = sample['内容'].tolist() content_seg_list = ___(content) sample['content_seg']=content_seg_list前一节对微博内容进行了缺失值填充和删除,本小节对微博内容进行数据清洗和分词处理,以便后续的词云图绘制。本节中主要使用re库和replace函数进行文本清洗。 sub函数 re.sub()是Python中re(正则表达式)库提供的函数之一,用于在字符串中通过正则表达式模式匹配的内容进行替换。 语法: re.sub(pattern, repl, string, count=0, flags=0) 参数: pattern:要匹配的正则表达式模式,可以是字符串或编译后的正则表达式对象。 repl:替换的内容,可以是字符串或一个函数。如果是字符串,替换所有匹配的内容;如果是函数,根据匹配的内容动态生成替换内容。 string:要进行替换的原始字符串。 count(可选):指定最大替换次数。默认为0,表示替换所有匹配的内容。 flags(可选):用于控制正则表达式的匹配方式,如忽略大小写、多行匹配等。 返回值: 返回替换后的新字符串。 replace函数 replace()函数是Python字符串对象提供的方法之一,用于将字符串中的指定旧值替换为新值。 语法: str.replace(old, new[, count]) 参数: old:要被替换的旧值。 new:用于替换旧值的新值。 count(可选):指定最大替换次数。默认为全部替换。 返回值: 返回一个新的字符串,其中旧值已被新值替换。 cut函数 jieba库是一款中文文本处理的常用工具库,其中的cut()函数基于前缀词典实现的分词算法,可以将中文文本切分成词语,便于后续的中文文本处理和分析。 语法: jieba.cut(sentence, cut_all=False, HMM=True) 参数: sentence:待分词的文本字符串。 cut_all(可选):是否采用全模式分词。默认为False,表示采用精确模式分词。 HMM(可选):是否使用隐马尔可夫模型进行分词。默认为True,表示使用。 返回值: 返回一个可迭代的生成器(generator),用于逐个输出分词结果。 使用示例: import jieba text = "我爱自然语言处理" seg_list = jieba.cut(text) print("/".join(seg_list)) 输出: 我/爱/自然语言/处理 在示例中,调用jieba.cut()函数对文本字符串"我爱自然语言处理"进行分词。默认采用精确模式分词,并启用了隐马尔可夫模型。最后,通过"/".join(seg_list)将分词结果连接为字符串并输出。分词结果为"我/爱/自然语言/处理"。 任务步骤 定义一个read_stopwords函数读取停用词表文件,并返回停用词列表。 数据清洗: 定义一个函数data_cleaning,用于对文本内容进行清洗。 初始化特殊字符、标点、数字、字母等。 调用read_stopwords函数,读取停用词表。 遍历文本列表。 用find函数找到文本中"展开全文-收起全文"内容,截取其中的文本部分。 使用re库的sub函数实现去除文本中的用户名部分。 lower函数统一转换为小写。 使用replace函数去除特殊字符、标点等,。 使用jieba库的cut函数进行分词。 去除分词后的停用词、换行符和空格。 将分词结果添加到清洗后的列表中。 将微博内容转换为列表:将"内容"列的值转换为列表,并赋值给变量content。 将内容分词后保存到列表:调用data_cleaning函数,将content列表中的文本进行清洗和分词处理,并将结果保存到content_seg_list列表。 将分词结果添加为新列:将content_seg_list列表作为新列"content_seg"添加到sample数据框中。 针对微博内容的文本进行了数据清洗和分词处理,通过去除特殊字符、标点、停用词等,以及使用jieba库进行中文分词,将文本内容转换为经过处理的分词列表。将处理好的分词文本存到了content_seg_listb变量和sample['content_seg']列中。 import jieba,re def read_stopwords(file='hit_stopwords.txt'): with open(file,___, encoding=___) as f: stopwords = f.read().___('\n') return stopwords def data_cleaning(content_list): content_seg_list = [] symbols = '-\\n~%≥℃|/【】↓#~_「♂!?\',、:;。《》()()·—.…,0123456789abcdefghijklnmopqrstuvwxyz' stopwords = _____() for content in content_list: # 获取“展开全文-收起全文”内文本 if '展开全文' in content and '收起全文' in content: begin = content.___('展开全文') end = content.___('收起全文') content = content[begin: end] if '@' in content: content = re.___('@.* ', ' ', content) content = content.lower() for con in content: if con in symbols: content = content.re place(con, ' ') con_list = jieba.___(content, cut_all=False) result_list = [] for con in con_list: if con not in stopwords and con!='\n' and con!='\u3000' and con!=' ': result_list.append(con) content_seg_list.append(result_list) return content_seg_list content = sample['内容'].tolist() content_seg_list = ___(content) sample['content_seg']=content_seg_list