Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——非民主相关帖子处理
20180421工作笔记
一、工作
上回说道,新增的500多条非民主子话题中含有大量与“腐败”相关的词汇,很可能在分类的时候,一起分到民主相关之中的,导致分类结果不准确,所以需要对其进行筛选一番。
1.筛选
首先规定一下筛选条件,就是如果一个帖子中出现“腐败”等词汇的时候,不将它选入“非民主子话题帖子”之中。再这里,我准备一个有1000多条法制相关的帖子,作为筛选输入——"fz.xlsx"
筛选条件
L2=['腐败','反腐','受贿','贿赂','贪污','监督','反腐倡廉','行贿','反腐倡廉','廉洁','廉政','落马','自由','民主制度','言论自由']
筛选思想大致和上回的一样,主要还是关键词对比
from openpyxl import load_workbook
from openpyxl import Workbook
import jieba.analyse
wr=load_workbook('fz.xlsx')
osheet=wr.active
orow=osheet.max_row
ww=Workbook()
asheet=ww.active
asheet.title="fa"
print(osheet.max_row)
L1=[]
L2=['腐败','反腐','受贿','贿赂','贪污','监督','反腐倡廉','行贿','反腐倡廉','廉洁','廉政','落马','自由','民主制度','言论自由']
L3=[]
f1=True
for i in osheet["A"]:
content=str(i.value)
keywords=jieba.analyse.extract_tags(content,topK=1000)
for j in keywords:
for k in L2:
if j==k:
f1=False
if f1:
L1.append(content)
L3.append(keywords)
f1=True
print(len(L1))
a="A"
b="B"
n=1
for i in L1:
asheet["%s%d" % (a,n)].value=str(i)
n=n+1
ww.save('fzresult.xlsx')
2.一些修改
由于开毕设会议,导师和我说了,选关键词可以多选择一些,这样结果会比较准确,所以在这将之前固定位100的循环条件都修改了。
由于我的列生成公式能生成26^2个列,比200大得多,所以不需要修改。
其实主要是要将Labeld值一起加进去
O1=alphabet[e]+alphabet[m-3]
O2=alphabet[e]+alphabet[m-2]
O3=alphabet[e]+alphabet[m-1]
用O1,O2,O3来动态地得到最后三个列号(因为关键词个数不确定)
L5=[]
L5.append(O1)
L5.append(O2)
L5.append(O3)
L6=['B','C','D']
k=0
for j in L5:
n=2
c=1
print(j)
for i in osheet2[L6[k]]:
if c>1:
asheet["%s%d" % (j,n)].value=i.value
n=n+1
c=c+1
k=k+1
最后将BCD 三列的数值读进去就可以了
from openpyxl import load_workbook
from openpyxl import Workbook
import jieba.analyse
wr=load_workbook('sta.xlsx')
osheet=wr.active
orow=osheet.max_row
ww=Workbook()
asheet=ww.active
asheet.title="ml"
alphabet=[]
o='A'
for i in range(26):
alphabet.append(o)
p=ord(o)+1
o=chr(p)
k=0
n=1
e=0
m=0
num=200
tempL=[]
testL=[]
tempc=0
for i in osheet["A"]:
if tempc<num:
tempL.append(i.value)
testL.append(i.value)
else:
break
tempc=tempc+1
tempL.append("民主制度")
tempL.append("言论自由")
tempL.append("民主监督")
num2=num+3
for i in tempL:
if k<=num2:
if k<26:
a=alphabet[k]
asheet["%s%d" % (a,n)].value=str(i)
else:
if m==26:
m=0
e=e+1
b=alphabet[e]
c=alphabet[m]
d=b+c
asheet["%s%d" % (d,n)].value=str(i)
m=m+1
else:
break
k=k+1
O1=alphabet[e]+alphabet[m-3]
O2=alphabet[e]+alphabet[m-2]
O3=alphabet[e]+alphabet[m-1]
ww.save('t2.xlsx')
wr2=load_workbook('FMLin.xlsx')
osheet2=wr2.active
print(osheet2.max_row)
L1=[]
for i in osheet2["A"]:
k=0
content=str(i.value)
keywords=jieba.analyse.extract_tags(content,topK=1000)
L1.append(keywords)
L1.pop(0)#第一个是空的
count=0
L3=[]
L2=[]
flag=False
for i in L1:
L2=[]
for g in testL:
flag=False
for j in i:
if g==j:
flag=True
if flag:
L2.append(1)
else:
L2.append(0)
L3.append(L2)
k=0
n=2
for j in L3:
e=0
m=0
for i in j:
if k<=num2:
if k<26:
a=alphabet[k]
asheet["%s%d" % (a,n)].value=i
else:
if m==26:
m=0
e=e+1
b=alphabet[e]
c=alphabet[m]
d=b+c
asheet["%s%d" % (d,n)].value=i
m=m+1
k=k+1
n=n+1
k=0
print(n)
L5=[]
L5.append(O1)
L5.append(O2)
L5.append(O3)
L6=['B','C','D']
k=0
for j in L5:
n=2
c=1
print(j)
for i in osheet2[L6[k]]:
if c>1:
asheet["%s%d" %(j,n)].value=i.value
n=n+1
c=c+1
k=k+1
ww.save('t2.xlsx')
其中FMLin表格就是500条民主+500条不相关的+它们的Label等级合成的:
FMLin.xlsx:
t2.xlsx:
二、总结反思
做了一下午和一晚上,看逼乎浪费了挺多时间的。。。以后来实验室争取不看逼乎,多看文章代码、多学习,别懒费时间。
三、接下来的任务
继续看scikitlearn的使用方法,周一老师要看演示,就很慌。。。说实在的我这个“算法应用”,到时候答辩演示的时候我都不知道该咋办。。。老师也不让我用黑框框演示。。。不管了,能调出结果再说吧。