本文所有的例子我都將使用中文文字進行,所以在分析前需要對中文的文字進行乙個預處理的過程(暫時只用的分詞,去除停用詞的部分後面介紹)
# -*- coding:utf-8 -*-
from nltk import freqdist
import jieba
import pymssql
# 我的資料**於資料庫,用的是爬蟲的小學數學題
conndb = pymssql.connect(host=".", user="**", password="****", database="jd")
cursor = conndb.cursor()
cursor.execute("select top 2000 [題目] from [jd].[dbo].[題庫]")
rows = cursor.fetchall()
#將200道題目中文分詞後,並放到乙個list中
text =
for line in rows:
content = list(jieba.cut(line[0]))
for word in content:
結果如下圖所示,可以看到有很多標點符號和單個無意義數字
fdist1 = freqdist(text) # 生成詞頻的字典,格式(「詞1」:數量,「詞2」:數量...)
vocabulary1 = fdist1.keys() # 字典的key,就是所有的詞
print(list(vocabulary1)[0:10]) # 詞的前10個是什麼,注意字典的keys是亂序的所有前10並不是數量最多的top10
for word,num in fdist1.items(): # 如果想看看字典內到底是什麼,可以執行這個迴圈
print(word,num)
結果如下圖
那麼如何獲得出現數量最多的top10詞語呢?
f = zip(fdist1.keys(),fdist1.values()) # 將字典壓縮成list[('詞1',num1),('詞2',num2),...]
sortf = list(sorted(f,key=lambda s: s[1], reverse=true)) # f按照num排序
for i in range(10):
print(sortf[i])
結果如下,這就是不去除停用詞的後果,得到的top10都是無意義的詞。
低頻的詞可以一行**獲取到
fdist1.hapaxes()
利用for迴圈和條件判斷對詞進行篩選,但是是用一行**實現,這在python中叫列表解析。
**可以理解成 迴圈v中所有詞,如果詞長度大於4,就把詞放到乙個list中,最終所有長度大於4的詞組成了long_words
v=set(text) #文字去重
long_words = [w for w in v if len(w)>4]
print(long_words)
結果如下,很明顯本次使用的資料集除了要剔除停用詞,對於全數字全英文的詞也應該做剔除操作
列表解析後的判斷可以是多個條件
print([w for w in v if len(w)>2 and fdist1[w]>10])
通過多個條件篩選出的值更具有代表意義,代表著這個文字的特徵
fdist.max() # 數量最多的詞長度
fdist[1] # 長度為1的詞的數量
fdist.freq(1) # 長度為1的詞的頻率
fdist.tabulate() # 生成分布表
首先將每個詞的長度放到乙個list中,接著呼叫freqdist即
統計自然語言處理 自然語言處理是什麼?
自然語言是指中文 英語 西班牙語 法語 德語等等語言,作為人們日常使用的其他語言,它們對人類的交流有著重要作用。自然語言是隨著人類社會的發展而自然產生的語言,而不是由人類所特意創造的語言。自然語言是人們日常學習生活的重要工具和媒介,如果人類失去交流的能力,文明就失去了意義。總的來說,自然語言就是指人...
自然語言處理 詞袋
詞袋模型將一段文字作為乙個個分離的詞進行處理,通過不同類文字中可能出現詞的差異對文字進行分類。必須指出的是對於文字分類,上下文對於其真正的類別有著強相關性。個人理解此類方法可能只是為了演算法的簡易性選擇性地放棄了文字中的上下文資訊,或者說只關注詞頻資訊也能夠獲得符合要求的文字分類效果。詞袋模型的三部...
統計自然語言處理(詞法)
語法可分為詞法和句法 詞法 句法 現代漢語句法的主要內容包括,句子的基本結構 句子的類別 句子的表達形式三個方面。句子的基本結構也叫基本成分,包括主語 謂語 賓語 定語 狀語 補語六種成分。其中的主語 謂語 賓語是主要成分,定語 狀語 補語是附加修飾成分。而主語和謂語是句子的必要成分,缺一則不能成為...