前言
舆情分析、文本分析,在做特征提取时,需要把一整段内容合并后,提取内容中的热词、F-IDF权重和词频,本编以python编程,分享如何通过结巴分词简易上手。
代码讲解
先给代码片段配内容讲解,篇尾给完整的python代码。
1、读取文本信息
import pandas as pd
# 1.导入数据语料的特征源数据
#df_data = pd.read_table('data.txt', names=[ 'type', 'content'], encoding='utf-8') #读txt文本的方式,names=[ 'type', 'content'] 表示读取两个字段内容
df_data = pd.read_excel('data.xlsx',names=['type','content'],header =0)
contentslist = df_data.content.values.tolist() #这是一个list,从多维数组df_data里面提取'content'这一列内容
引用pd,有两种读取方式,txt文件使用pd.read_table,excel文件使用pd.read_excel,内容如下:
txt文件的内容格式
excel文件的内容格式
2、通过结巴分词获取分词后的内容
import jieba
import jieba.analyse
def jiebacut(content):
content_S = []
for line in content:
# jieba分词 精确模式。返回一个列表类型,建议使用
current_segment = jieba.lcut(line) #每一行都做分词
if len(current_segment) > 1 and current_segment != '\r\n':
content_S.append(current_segment)
return content_S
# 2、通过jieba分词,获取分词后的内容list
jieba_contentslist=jiebacut(contentslist)
3、获取删除停用词后的分词
import re
import jieba
import jieba.analyse
# 删除内容中的停用词
def drop_stopwords(contents, stopwords):
contents_clean = [] # 删除后的新闻
all_words = [] # 构造词云所用的数据
for line in contents:
line_clean = []
for word in line:
if word in stopwords: #这里只去掉停词表的内容,没有做去重
continue
if word == ' ' or bool(re.search(r'\d', word)): #去掉空格和包含数字的分词(浮点型、带有%的百分比分词)
continue
line_clean.append(word)
all_words.append(str(word))
contents_clean.append(line_clean)
return contents_clean, all_words