Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——向量生成

Posted cafe3165

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——向量生成相关的知识,希望对你有一定的参考价值。

Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——向量生成

20180417学习笔记、20180421修改

一、工作

今天中午开了一次小组讨论会议,老师旁听了并给出了一些意见。

今天的工作主要是两个,一个是构造SVM所需要的向量,一个是标注无关帖子500条。
但是后面遇到一个很麻烦的问题。。。细思恐极不知道该咋办。。。

(1) 生成向量

主要任务,是将“t1.xlsx”中的关键词,取前100个出来。

构成一个1*100的向量,就像(监督,自由,民主,...,体制,民主制度,言论自由,民主监督)这样。

以这个向量为准,对各个帖子进行判断,倘若一个帖子中出现若干个关键词(比如出现了“监督”、“民主”,其他关键词均没出现),该帖子的向量则为(1,0,1.......0,0,X,X,X)。

后面的XXX则是该帖子的三个民主子话题的评分。如

技术分享图片

上述向量改写为(1,0,1.......0,0,1,5,1)。



那么,具体怎么构造向量呢?

在正式写代码前,思考这样一个问题:
我们之前写入excel文件的时候,是采用直接赋值的方法,也就是
asheet["%s%d" % (a,n)].value=str(i)这个样子的,其中a代表的就是表格中的列号。

那么我们有100各个关键词,而字母只有26个,怎么继续编排呢。我们发现,表格在Z之后其实是重新以A开头再按ABCD的顺序继续编排的,也就是说,接下来的27列是"AA",28是"AB",以此类推。。。

故,我们需要再组装出一个装列号的list——alphabet[]。
怎么做呢,两个循环就好了

o=‘A‘
 for i in range(26):   
   alphabet.append(o)
   p=ord(o)+1
   o=chr(p)

(其中ord是获取字符的ascii码的函数,而chr是将ascii码转化成字符的函数)。

(i)提取sta文件中的A列,取前100个关键词,并将子话题加上

tempL=[]
testL=[]
tempc=0
for i in osheet["A"]:
    if tempc<100:
        tempL.append(i.value)
        testL.append(i.value)
    else:
        break
    tempc=tempc+1
tempL.append("民主制度")
tempL.append("言论自由")
tempL.append("民主监督")

(ii)将100个关键词,横向排开

k=0
n=1
e=0
m=0
for i in tempL:
    if k<=103:
        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

ww.save(‘t2.xlsx‘)
  • 效果如图:

技术分享图片

(iii)重新提取帖子的关键词

由于使用关键词与关键词对比,速度快效率高,所以在此重新对原帖进行取关键词操作,并存在L1之中。

wr2=load_workbook(‘biao2.xlsx‘)
#print(wr.sheetnames)
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)

(iv)关键词对比

对比提取后的100个关键词,在每个帖子的关键词列表中是否出现,若出现则标记为1,没出现则标记为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)

(v)将各帖子的向量存入表格中

k=0
n=2

for j in L3:
    e=0
    m=0
    for i in j:
        if k<=103:
            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

ww.save(‘t2.xlsx‘)
  • 最终效果如图:
    每一行代表原帖的一个向量

技术分享图片

(2) 标注不相关帖子

为了凑齐1000条,还需要500条不相关的帖子。。。可以我翻查语料库发现。。。

很多“不想关”的帖子实际上是相关的。。。尤其是我的第三个label是“民主监督/腐败”。而语料库中含有大料的反腐帖子。这就很麻烦了,还得手工筛选一下吧,把腐败的相关的筛掉

二、总结反思

代码方面没什么问题,主要是语料比较头痛

三、接下来的任务

学习SVM/Naive Bayes/Decision Tree分类。先试试吧






以上是关于Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——向量生成的主要内容,如果未能解决你的问题,请参考以下文章

[Python3]读写Excel - openpyxl库

python3操作Excel openpyxl模块的使用

python3 openpyxl修改Excel的内容

python基础教程:python3.7 openpyxl 删除指定一列或者一行的代码

使用 OpenPyXL 读取提取的 XLSX 文件

Python3 读取和写入excel xlsx文件 使用openpyxl