Python:詞頻統計及排序
阿新 • • 發佈:2020-08-14
對一段文字,想要統計各種詞語出現的次數,即詞頻統計,思路是先分詞,再進行數量統計、排序。
分詞可以用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,主要是用來進行比較的元素,只有一個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中的一個元素來進行排序。