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:最后錯誤解決,成功提取了關鍵詞。
