python提取關鍵詞textrank算法,將數據庫中的數據提取出來,然后進行分析,代碼如下
import pymysql import jieba from textrank4zh import TextRank4Keyword,TextRank4Sentence import logging jieba.setLogLevel(logging.INFO) #消除日志 def get_key_words(text,num=3): tr4w=TextRank4Keyword() tr4w.analyze(text,lower=True)
#分析文本 key_words=tr4w.get_keywords(num)
#提取關鍵詞,num是指關鍵詞的個數 return [item.word for item in key_words] db = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='cs', charset='utf8')
#連接數據庫 cursor = db.cursor()
#使用cursor方法創建一個游標 sql = "select shuzi from 單位" cursor.execute(sql) data = cursor.fetchall()
#fetchall()方法為查詢多條數據,fetchone()為查詢一條數據 for i in data: if i[0] != None: words = get_key_words(i[0]) print(words)
在編寫過程中出現了這種錯誤'NoneType' object has no attribute 'split',在網上找了好長時間為什么會出現這樣的錯誤,錯誤出現在最后通過循環對數據庫中的數據進行提取的時候,我通過這種方法,查看了每條數據的類型,發現在第六條數據類型為NoneType,說明第六條數據為空,所以才會報錯
for i in data: print(type(i[0]))
當遇到為空的數據時候,只要跳過就可以了,所以加了一條判斷語句,只有不為空的時候,才執行函數進行關鍵詞提取,最開始使用的是:
for i in data: if len(i[0])>0: # if i[0] != None: words = get_key_words(i[0]) print(words)
出現了如下的錯誤:TypeError: object of type 'NoneType' has no len()
這就說明這種判斷是否為空的方法是錯誤的,后發現Nonetype類型,其實就是值為None,所以直接判斷值就可以了直接可以用:
if i[0] != None:最后錯誤解決,成功提取了關鍵詞。