• Python:词频统计及排序


    对一段文本,想要统计各种词语出现的次数,即词频统计,思路是先分词,再进行数量统计、排序。

    分词可以用jieba库,同时snownlp库也是可以实现的。

    jieba一般可以直接用jieba.lcut('你的文本内容abcdefg。。。')即可,非常简单。

    snownlp除了分词还能实现转繁体、情感分类等等功能,可以参考这篇:

    https://www.cnblogs.com/zhuminghui/p/10953717.html

    分词结果一般是列表形式,例如:

    >>> txt="我是中国人,我爱中国。中国位于亚洲。"
    >>> jieba.lcut(txt)
    ['我', '是', '中国', '人', ',', '我', '爱', '中国', '。', '中国', '位于', '亚洲', '。']
    

    下面进行数量统计。

    思路:每个词有个频数,这个形式用键值对来表示就非常合适了。因此用字典的方式。

    txt = "我是中国人,我爱中国。中国位于亚洲。"
    fenci = jieba.lcut(txt)
    >>> d = {}
    >>> for c in fenci:
    	d[c] = d.get(c,0) + 1
    
    >>> d
    {'我': 2, '是': 1, '中国': 3, '人': 1, ',': 1, '爱': 1, '。': 2, '位于': 1, '亚洲': 1}
    

    d.get(c,0)的功能是:返回字典d中,键为c的元素的对应值,如果目前没有键为c的元素,则返回0。

    如果不想要标点符号或一些停用词,可以在循环里加判断来筛选。如果停用词比较多,可以搜停用词表。

    例如:  https://github.com/goto456/stopwords

    接下来再把字典转换为属性的列表即可。

    方法1(不排序):

    >>> L = []
    >>> for key in d:
    	L.append('{}:{}'.format(key, d[key]))
    
    >>> L
    ['我:2', '是:1', '中国:3', '人:1', ',:1', '爱:1', '。:2', '位于:1', '亚洲:1']
    

    不过做词频统计,一般都是关注频率高的词,要做排序,因此推荐下述的方法。

    方法2(排序):

    >>> M = list(d.items())
    >>> M.sort(key = lambda x:x[1], reverse = True)
    >>> M
    [('中国', 3), ('我', 2), ('。', 2), ('是', 1), ('人', 1), (',', 1), ('爱', 1), ('位于', 1), ('亚洲', 1)]
    

    这里使用了匿名函数的方法。

    匿名函数的格式是:  lambda 参数:表达式,这样写比def来的更简单。

    例如,要实现两个数相乘:

    ##常规方法
    >>> def f(x,y):    
    ...     return x*y
    >>> f(3,4)
    12
    
    ##匿名函数
    >>> func = lambda x,y:x*y
    >>> func(3,4)
    12
    

    另外就是列表的sort方法中,可以设一个参数key,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

  • 相关阅读:
    异步fifo设计(2)
    异步fifo设计(1)
    systemverilog学习(9)assertion
    cordic算法
    Booth除法器设计
    systemverilog学习(8)randomization随机化
    systemverilog学习(7)OOP
    折线法——卡特兰数证明
    【BZOJ 4004】 装备购买(高斯消元+贪心)
    POJ 3322 Bloxorz
  • 原文地址:https://www.cnblogs.com/maoerbao/p/11941572.html
Copyright © 2020-2023  润新知