对指定关键词进行词频统计

本文介绍了如何通过分词、停用词过滤和关键词筛选,对单条评论或研究单元内的词频进行统计。步骤包括使用jieba分词、去除哈工大停用词、遍历筛选关键核心词汇,并展示了三种词频统计方法。最后,提供了数据测试实例,以实现在不同场景下对文本内容的细致分析。
摘要由CSDN通过智能技术生成

过往的词频统计都是针对整个文档进行的,而如果研究中需要知道单条评论或某个研究单元内某些词的词频,那么就需要进行额外的处理。原理非常的简单,就是遍历筛选,具体做法为去除停用词的逆运算。

Step1:分词

最基本的处理的就不做多余的赘述,直接上码:

def seg_word(data):
    seg_result=[]
    stop_list = open('哈工大停用词表.txt','r',encoding='utf-8').read()
    for sentence in data:
        c_words=jieba.cut(sentence)
        seg_result.append([word for word in c_words if word not in stop_list and len(word) >1])#不要忘记了加[],输出要为list格式
    return seg_result

Step2:遍历筛选核心关键词

def flitter(seg_result):
    key_words=open('key_words.txt','r',encoding='utf-8').read()
    result=[]
    for i in seg_result:
        for j in i:
            if j in key_words:
                result.append(j)
    return result

         这里需要注意的有两点:

(1)第一步中的分词结果是list of list 的格式,我们需要对内层即第二层的内容进行统计,因此需要用第二层的内容对key_words进行遍历。即两个for循环。

(2)key_words的读取格式要为string,所以是.read()而不是.readlines,否则不会起作用,停用词列表类同。

Step3:词频统计

     实现方法(1)

def count_words(result):
    count={}
    for i in result:
        if len(i)>=2:#排除单个词
            count[i]=count.get(i,0)+1#类似一个循环判断,get的第二个空格是默认值,如果不在list里面就是返回NONE或者数字0
    return count

    实现方法(2)

count={}
for i in seg_result:
    if i not in count:
        count[i]=0#键和值一起存进了count,只是没有的话值为0
    else:
        count[i]+=1

    实现方法(3)

count=data.value_counts()#默认降序

count=data.value_counts(ascending=True)#升序排列

此外,还可以进行排序

items = list(count.items())#list里面为元组
items.sort(key=lambda x:x[1],reverse=True)#key指要执行什么,冒号后面是排序的依据,对应索引中的索引应该是1,(键为0值为1)

Step4:数据测试

        在定义好了函数后,就可以进行主函数的书写和函数的调用啦

data = open('test.txt','r',encoding='utf-8').readlines()
seg_result=seg_word(data)
result=flitter(seg_result)
count=count_words(result)

补充:这样的筛选结果是以词为单元的,每一个符合筛选要求的词语占一行。但有时候用词频做细粒度分析的时候需要知道原本每一行所包含关键词的情况。那么这时候就需要换一种结构:

主要的区别在于函数仅仅考虑单条评论的处理方式,至于自己的数据全部在主函数中进行使用。

import jieba
import pandas as pd
#定义函数
#结巴分词
def seg_word(sentence):
    seg_list = jieba.cut(sentence)
    seg_words=[]
    for i in seg_list:
        seg_words.append(i)
    stoplist=open(r'C:\Users\64884\Desktop\相似度训练\哈工大停用词表.txt','r',encoding='utf-8').read()
    seg_result=[]
    for word in seg_words:
        if word not in stoplist:
            seg_result.append(word)
    return seg_result


#主题词过滤
def flitter(seg_result):
    key_words=open(r'C:\Users\64884\Desktop\相似度训练\key_words.txt','r',encoding='utf-8').read()
    result=[]
    for i in seg_result:
        if i in key_words:
            result.append(i)
    return result


#输入自己的数据
data = open(r'C:\Users\64884\Desktop\相似度训练\物流评论.txt','r',encoding='utf-8').readlines()
seg_result=[]
for i in data:
    seg_result.append(seg_word(i))

result=[]
for i in seg_result:
    result.append(flitter(i))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#faker酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值