四、LDA算法
第1關(guān) LDA算法
import jieba
import jieba.analyse as analyse
import gensim
from gensim import corpora, models, similarities
# 停用詞表加載方法
def get_stopword_list():
# 停用詞表存儲(chǔ)路徑,每一行為一個(gè)詞,按行讀取進(jìn)行加載
# 進(jìn)行編碼轉(zhuǎn)換確保匹配準(zhǔn)確率
stop_word_path = './stopword.txt'
stopword_list = [sw.replace('\n', '') for sw in open(stop_word_path, encoding='utf-8').readlines()]
return stopword_list
# 停用詞
stop_word = get_stopword_list()
text = input()
# 分詞
sentences = []
segs = jieba.lcut(text)
segs = list(filter(lambda x: x not in stop_word, segs))
sentences.append(segs)
# 構(gòu)建詞袋模型
dictionary = corpora.Dictionary(sentences)
corpus = [dictionary.doc2bow(sentence) for sentence in sentences]
result = ""
# 任務(wù):使用gensim模塊中的函數(shù)構(gòu)造LDA模型,得出最佳主題詞的分析結(jié)果保存到result變量中。
# ********** Begin *********#
lda = models.LdaModel(corpus,id2word=dictionary, num_topics=1)
for result in lda.print_topics(num_words=1):
print(result[1].split('*')[1],end="")
# ********** End **********#
#print(result.split('*')[1],end="")
注:這一題的輸出沒(méi)有很符合我的預(yù)期,所以我干脆直接改了他的print輸出,用自己更喜歡的方式輸出
六、TF/IDF 算法
第1關(guān):去除停用詞
# 停用詞表加載方法
def get_stopword_list():
# 停用詞表存儲(chǔ)路徑,每一行為一個(gè)詞,按行讀取進(jìn)行加載
# 進(jìn)行編碼轉(zhuǎn)換確保匹配準(zhǔn)確率
stop_word_path = './stopword.txt'
stopword_list = [sw.replace('\n', '') for sw in open(stop_word_path,encoding='utf-8').readlines()]
return stopword_list
if __name__ == '__main__':
text=input()
result=""
# 任務(wù):使用停用詞表去掉text文本中的停用詞,并將結(jié)果保存至result變量
# ********** Begin *********#
stopwords = get_stopword_list()
for word in text:
if word not in stopwords:
result += word + ""
# ********** End **********#
print(result,end="")
TF/IDF算法
#本程序的作用是通過(guò)TF/IDF算法完成對(duì)文本的關(guān)鍵詞提取,輸出前十個(gè)關(guān)鍵詞。
import math
import jieba
import jieba.posseg as psg
from gensim import corpora, models
from jieba import analyse
import functools
from collections import defaultdict # 自己額外引入的庫(kù)
class TfIdf(object):
# 四個(gè)參數(shù)分別是:訓(xùn)練好的idf字典,默認(rèn)idf值,處理后的待提取文本,關(guān)鍵詞數(shù)量
def __init__(self, idf_dic, default_idf, word_list, keyword_num):
self.word_list = word_list
self.idf_dic, self.default_idf = idf_dic, default_idf
self.tf_dic = self.get_tf_dic()
self.keyword_num = keyword_num
def get_tf_dic(self):
tf_dic = {}
# 任務(wù):完成word_list的tf值的統(tǒng)計(jì)函數(shù),將結(jié)果存儲(chǔ)到tf_dic變量中
# ********** Begin *********#
doc_frequency=defaultdict(int)
for i in self.word_list:
doc_frequency[i]+=1
for i in doc_frequency:
tf_dic[i]=doc_frequency[i]/sum(doc_frequency.values())
# ********** End **********#
return tf_dic
# 按公式計(jì)算tf-idf
def get_tfidf(self):
tfidf_dic = {}
for word in self.word_list:
idf = self.idf_dic.get(word, self.default_idf)
tf = self.tf_dic.get(word, 0)
tfidf = tf * idf
tfidf_dic[word] = tfidf
tfidf_dic.items()
# 根據(jù)tf-idf排序,去排名前keyword_num的詞作為關(guān)鍵詞
for k, v in sorted(tfidf_dic.items(), key=functools.cmp_to_key(cmp), reverse=True)[:self.keyword_num]:
print(k + "/ ", end='')
print()
#排序函數(shù),用于topK關(guān)鍵詞的按值排序
def cmp(e1, e2):
import numpy as np
res = np.sign(e1[1] - e2[1])
if res != 0:
return res
else:
a = e1[0] + e2[0]
b = e2[0] + e1[0]
if a > b:
return 1
elif a == b:
return 0
else:
return -1
注: 這里對(duì)字典的統(tǒng)計(jì)我引入了defaultdict函數(shù)(這個(gè)函數(shù)是用來(lái)新建一個(gè)鍵值對(duì)的),算是額外引入了一個(gè)算法庫(kù)使用
七、TextRank算法
第1關(guān) Jieba 在關(guān)鍵詞提取中的應(yīng)用
import jieba.analyse
import warnings
warnings.filterwarnings("ignore")
sentence = input()
# 任務(wù):基于jieba中的TF-IDF算法完成對(duì)sentence的關(guān)鍵詞提取,提取前三個(gè)關(guān)鍵詞并以一行輸出
# ********** Begin *********#
result = ''
text = ""
# 停用詞表加載方法
stopwords = "1000 , 。防控 審查 不 項(xiàng)目 支付 省住 銷售 返還 傭"
#stopwords = "防控 能動(dòng)性 審查 不延誤 項(xiàng)目 支付 省住 銷售 1000 返還 傭"
for word in sentence:
if word not in stopwords:
text += word + ""
# 補(bǔ)充誤刪的關(guān)鍵詞
text += "何靖"
words = jieba.analyse.extract_tags(text, topK=3, withWeight= False, allowPOS=())
#print(words)
for word in words:
result += word + " "
print(result)
# ********** End **********#
測(cè)試用例:
一、
針對(duì)集體宿舍人員如何科學(xué)防控的問(wèn)題,中國(guó)疾控中心環(huán)境所所長(zhǎng)施小明表示,要加強(qiáng)日常體溫檢測(cè),對(duì)進(jìn)入集體宿舍人員進(jìn)行體溫檢測(cè),發(fā)現(xiàn)體溫異常人員要立即將其轉(zhuǎn)移至臨時(shí)隔離區(qū)域,并按相關(guān)規(guī)定進(jìn)行處置。同時(shí)嚴(yán)控集體宿舍住宿人數(shù)超標(biāo)問(wèn)題,設(shè)置可開(kāi)啟窗戶定時(shí)通風(fēng)。
二、
以上信息提示,武漢疫情快速上升態(tài)勢(shì)得到控制,湖北除武漢外,局部爆發(fā)的態(tài)勢(shì)也得到控制,湖北以外省份疫情形勢(shì)積極向好。下一步要從統(tǒng)籌推進(jìn)疫情防控和經(jīng)濟(jì)社會(huì)發(fā)展出發(fā),緊緊圍繞社區(qū)防控和醫(yī)療救治兩個(gè)重點(diǎn),由全面防控向群專結(jié)合,精準(zhǔn)防控轉(zhuǎn)變。
三、
為推動(dòng)項(xiàng)目盡快開(kāi)工建設(shè),省住建廳加大政策支持力度,允許施工圖容缺受理審查,幫助業(yè)主提前開(kāi)展施工圖審查。各施工圖審查機(jī)構(gòu)充分發(fā)揮主觀能動(dòng)性,創(chuàng)造條件滿足項(xiàng)目建設(shè)需求,確保施工圖審查不接觸、不間斷、不延誤。同時(shí),加快支付施工圖審查購(gòu)買服務(wù)費(fèi),疫情期間,各級(jí)財(cái)政、住建部門(mén)購(gòu)買并支付施工圖審查服務(wù)費(fèi)974萬(wàn)元,有效緩解審查機(jī)構(gòu)資金成本壓力。
五、
何靖所在的公司一直有一個(gè)“老帶新”的推薦系統(tǒng),想賺傭金的同事就參與。不過(guò)何靖表示,自己和同事平時(shí)工作量已經(jīng)很飽和,且個(gè)人朋友圈子也不屬于客戶群,所以平時(shí)積極性不高。現(xiàn)在疫情來(lái)了,集團(tuán)層面推出了“員工千元預(yù)定房源”的活動(dòng),員工每人交1000元預(yù)定一套房源,這套房源由個(gè)人出去銷售,成交后,公司除了返還1000元預(yù)定金之外,還會(huì)支付和銷售崗位同等比例的傭金,并額外補(bǔ)償1000元;未成交,也會(huì)返還預(yù)定金。
注:這道題我是真沒(méi)寫(xiě)出來(lái),這個(gè)參數(shù)太難調(diào)了,使用了停用表將高頻詞刪掉才通過(guò)的,應(yīng)該有一套參數(shù)可以完美運(yùn)行的;我這種方式只適合部分用例,通用性不強(qiáng)
第二關(guān) TextRank算法
from jieba import analyse
import jieba.analyse
text = input() # 原始文本
# 任務(wù):使用jieba模塊中有關(guān)TextRank算法的模塊完成對(duì)text中前三個(gè)關(guān)鍵字的提取并輸出
# ********** Begin *********#
result = ''
words = jieba.analyse.textrank(text, topK=3, withWeight=False, allowPOS=("ns","n","vn","v"))
for word in words:
result += word + " "
print(result)
# ********** End **********#
八、論壇數(shù)據(jù)分析*
第一關(guān) 情感分析基礎(chǔ)
from snownlp import SnowNLP
def count_sno():
#count變量為分析結(jié)果大于0.9的數(shù)量
count = 0
a = open('./step1/test.txt',encoding='utf-8')
# *********** Begin **********#
listOfLines = a.readlines()
for lineWords in listOfLines:
text = SnowNLP(lineWords)
if(text.sentiments > 0.9):
count += 1
# *********** End **********#
return count
第2關(guān) 帖子好評(píng)度分析
import re
from pyquery import PyQuery
from snownlp import SnowNLP
def evaluate(path):
html = open(path,'r',encoding="utf-8")
score, count = 0, 0
# *********** Begin **********#
code = html.read()
pq = PyQuery(code)
tag = pq('div.text')
taga = pq('a')
words = ""
for word in tag.text():
if word not in taga.text():
words += word
txtlist = words.split(':')
txtlist.pop(0)
for txt in txtlist:
count += 1
s = SnowNLP(txt)
score += s.sentiments
# *********** End **********#
return int(score*100/count)
注:這道題的比上道題的難點(diǎn)在于對(duì)html這個(gè)的解析工作,我這里采用的pyquery庫(kù)進(jìn)行解析,為了精準(zhǔn)拆分還用了比較蠢的方法去實(shí)現(xiàn),可能有更加有效的庫(kù)去解決這個(gè)問(wèn)題文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-470101.html
博主說(shuō)
本篇博客是對(duì)上次實(shí)驗(yàn)內(nèi)容的補(bǔ)充,老師是分兩個(gè)階段發(fā)出來(lái)的實(shí)驗(yàn)內(nèi)容,之前的實(shí)驗(yàn)已經(jīng)發(fā)出博客了,之前實(shí)驗(yàn)還沒(méi)做的可以看頭歌平臺(tái)-人工智能技術(shù)應(yīng)用-實(shí)踐學(xué)習(xí)與答案文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470101.html
到了這里,關(guān)于頭歌平臺(tái)-人工智能技術(shù)應(yīng)用-實(shí)踐學(xué)習(xí)與答案2(補(bǔ)充實(shí)訓(xùn)部分)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!