四、LDA算法
第1关 LDA算法
import jieba
import jieba.analyse as analyse
import gensim
from gensim import corpora, models, similarities
# 停用词表加载方法
def get_stopword_list():
# 停用词表存储路径,每一行为一个词,按行读取进行加载
# 进行编码转换确保匹配准确率
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)
# 构建词袋模型
dictionary = corpora.Dictionary(sentences)
corpus = [dictionary.doc2bow(sentence) for sentence in sentences]
result = ""
# 任务:使用gensim模块中的函数构造LDA模型,得出最佳主题词的分析结果保存到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="")
注:这一题的输出没有很符合我的预期,所以我干脆直接改了他的print输出,用自己更喜欢的方式输出
六、TF/IDF 算法
第1关:去除停用词
# 停用词表加载方法
def get_stopword_list():
# 停用词表存储路径,每一行为一个词,按行读取进行加载
# 进行编码转换确保匹配准确率
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=""
# 任务:使用停用词表去掉text文本中的停用词,并将结果保存至result变量
# ********** Begin *********#
stopwords = get_stopword_list()
for word in text:
if word not in stopwords:
result += word + ""
# ********** End **********#
print(result,end="")
TF/IDF算法
#本程序的作用是通过TF/IDF算法完成对文本的关键词提取,输出前十个关键词。
import math
import jieba
import jieba.posseg as psg
from gensim import corpora, models
from jieba import analyse
import functools
from collections import defaultdict # 自己额外引入的库
class TfIdf(object):
# 四个参数分别是:训练好的idf字典,默认idf值,处理后的待提取文本,关键词数量
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 = {}
# 任务:完成word_list的tf值的统计函数,将结果存储到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
# 按公式计算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()
# 根据tf-idf排序,去排名前keyword_num的词作为关键词
for k, v in sorted(tfidf_dic.items(), key=functools.cmp_to_key(cmp), reverse=True)[:self.keyword_num]:
print(k + "/ ", end='')
print()
#排序函数,用于topK关键词的按值排序
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
注: 这里对字典的统计我引入了defaultdict函数(这个函数是用来新建一个键值对的),算是额外引入了一个算法库使用
七、TextRank算法
第1关 Jieba 在关键词提取中的应用
import jieba.analyse
import warnings
warnings.filterwarnings("ignore")
sentence = input()
# 任务:基于jieba中的TF-IDF算法完成对sentence的关键词提取,提取前三个关键词并以一行输出
# ********** Begin *********#
result = ''
text = ""
# 停用词表加载方法
stopwords = "1000 , 。防控 审查 不 项目 支付 省住 销售 返还 佣"
#stopwords = "防控 能动性 审查 不延误 项目 支付 省住 销售 1000 返还 佣"
for word in sentence:
if word not in stopwords:
text += word + ""
# 补充误删的关键词
text += "何靖"
words = jieba.analyse.extract_tags(text, topK=3, withWeight= False, allowPOS=())
#print(words)
for word in words:
result += word + " "
print(result)
# ********** End **********#
测试用例:
一、
针对集体宿舍人员如何科学防控的问题,中国疾控中心环境所所长施小明表示,要加强日常体温检测,对进入集体宿舍人员进行体温检测,发现体温异常人员要立即将其转移至临时隔离区域,并按相关规定进行处置。同时严控集体宿舍住宿人数超标问题,设置可开启窗户定时通风。
二、
以上信息提示,武汉疫情快速上升态势得到控制,湖北除武汉外,局部爆发的态势也得到控制,湖北以外省份疫情形势积极向好。下一步要从统筹推进疫情防控和经济社会发展出发,紧紧围绕社区防控和医疗救治两个重点,由全面防控向群专结合,精准防控转变。
三、
为推动项目尽快开工建设,省住建厅加大政策支持力度,允许施工图容缺受理审查,帮助业主提前开展施工图审查。各施工图审查机构充分发挥主观能动性,创造条件满足项目建设需求,确保施工图审查不接触、不间断、不延误。同时,加快支付施工图审查购买服务费,疫情期间,各级财政、住建部门购买并支付施工图审查服务费974万元,有效缓解审查机构资金成本压力。
五、
何靖所在的公司一直有一个“老带新”的推荐系统,想赚佣金的同事就参与。不过何靖表示,自己和同事平时工作量已经很饱和,且个人朋友圈子也不属于客户群,所以平时积极性不高。现在疫情来了,集团层面推出了“员工千元预定房源”的活动,员工每人交1000元预定一套房源,这套房源由个人出去销售,成交后,公司除了返还1000元预定金之外,还会支付和销售岗位同等比例的佣金,并额外补偿1000元;未成交,也会返还预定金。
注:这道题我是真没写出来,这个参数太难调了,使用了停用表将高频词删掉才通过的,应该有一套参数可以完美运行的;我这种方式只适合部分用例,通用性不强
第二关 TextRank算法
from jieba import analyse
import jieba.analyse
text = input() # 原始文本
# 任务:使用jieba模块中有关TextRank算法的模块完成对text中前三个关键字的提取并输出
# ********** 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 **********#
八、论坛数据分析*
第一关 情感分析基础
from snownlp import SnowNLP
def count_sno():
#count变量为分析结果大于0.9的数量
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关 帖子好评度分析
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)
注:这道题的比上道题的难点在于对html这个的解析工作,我这里采用的pyquery库进行解析,为了精准拆分还用了比较蠢的方法去实现,可能有更加有效的库去解决这个问题文章来源:https://www.toymoban.com/news/detail-470101.html
博主说
本篇博客是对上次实验内容的补充,老师是分两个阶段发出来的实验内容,之前的实验已经发出博客了,之前实验还没做的可以看头歌平台-人工智能技术应用-实践学习与答案文章来源地址https://www.toymoban.com/news/detail-470101.html
到了这里,关于头歌平台-人工智能技术应用-实践学习与答案2(补充实训部分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!