天天看點

【自然語言處理概述】文本詞頻分析【自然語言處理概述】文本詞頻分析一、前沿二、代碼部分三、總結

【自然語言處理概述】文本詞頻分析

作者簡介:在校大學生一枚,華為雲享專家,阿裡雲專家部落客,騰雲先鋒(TDP)成員,雲曦智劃項目總負責人,全國高等學校計算機教學與産業實踐資源建設專家委員會(TIPCC)志願者,以及程式設計愛好者,期待和大家一起學習,一起進步~

.

部落格首頁:ぃ靈彧が的學習日志

.

本文專欄:人工智能

.

專欄寄語:若你決定燦爛,山無遮,海無攔

.

【自然語言處理概述】文本詞頻分析【自然語言處理概述】文本詞頻分析一、前沿二、代碼部分三、總結

(文章目錄)

一、前沿

(一)、任務描述

文本與圖檔具有本質上的差别:圖檔本質上是數字化的,其每個像素點都由三原色的組合灰階值構成,而文本屬于自然語言,其表現形式無法被計算機直接識别,是以,在自然語言處理技術發展的早期,解決文本表示問題是一項極具挑戰的任務。

(二)、環境配置

本次實驗平台為百度AI Studio,Python版本為Python3.7,下面介紹如何通過Python程式設計方式實作文本詞頻分析。

二、代碼部分

(一)、文本加載

首先将需要分析的文本從檔案中讀出,本文以一篇散文為例進行後面的分析:

with open('test.txt', 'r', encoding='UTF-8') as novelFile:
    novel = novelFile.read()
           

(二)、文本分詞

目前,Python支援多種第三方分詞工具,最常用的有jieba分詞、SnowNLP、THULAC、NLPIR等,本書以jieba分詞為例進行示範,更多分詞工具讀者可以自行實驗嘗試。

import jieba # jieba中文分詞庫
novelList = list(jieba.lcut(novel))
           

(三)、去停用詞

在自然語言中,存在很多無意義的詞,比如标點符号“、”“的”“之”等,這類詞出現頻率高,且具有很有限的語義作用,稱作停用詞。為了避免這類詞對統計結果造成的幹擾,通常在分詞之後,需要将其剔除,隻保留重要的詞語用作進一步分析,下面一段代碼示範了計算每個詞出現的頻次的過程,若該詞在停用詞清單中,直接不計入:

stopwords = [line.strip() for line in open('stop.txt', 'r', encoding='UTF-8').readlines()]
novelList = list(jieba.lcut(novel))
novelDict = {}

# 統計出詞頻字典
for word in novelList:
    if word not in stopwords:
            # 不統計字數為一的詞
            if len(word) == 1:
                continue
            else:
                novelDict[word] = novelDict.get(word, 0) + 1
           

(四)、根據詞頻排序并輸出

import jieba # jieba中文分詞庫

with open('test.txt', 'r', encoding='UTF-8') as novelFile:
    novel = novelFile.read()
# print(novel)
stopwords = [line.strip() for line in open('stop.txt', 'r', encoding='UTF-8').readlines()]
novelList = list(jieba.lcut(novel))
novelDict = {}

# 統計出詞頻字典
for word in novelList:
    if word not in stopwords:
            # 不統計字數為一的詞
            if len(word) == 1:
                continue
            else:
                novelDict[word] = novelDict.get(word, 0) + 1

# 對詞頻進行排序
novelListSorted = list(novelDict.items())
novelListSorted.sort(key=lambda e: e[1], reverse=True)

# 列印前10詞頻
topWordNum = 0
for topWordTup in novelListSorted[:10]:
    print(topWordTup)

from matplotlib import pyplot as plt
x = [c for c,v in novelListSorted]
y = [v for c,v in novelListSorted]
plt.plot(x[:10],y[:10],color='r')
plt.show()
           

(五)、小結

詞頻統計在一定程度上可以反映文本的特征。文本詞頻分析僅僅可以作為文本的一部分最淺層的特征使用,但是要分析其深度語義,需要使用更加先進的文本特征提取方式。

三、總結

本系列文章内容為根據清華社出版的《自然語言處理實踐》所作的相關筆記和感悟,其中代碼均為基于百度飛槳開發,若有任何侵權和不妥之處,請私信于我,定積極配合處理,看到必回!!!