import jieba.posseg as pseg import jieba import paddle path = r'D:/明朝collection.txt' with open(path, 'r', encoding='utf-8') as f: text = f.read() jieba.enable_paddle() words = pseg.cut(text, use_paddle=True) counts = {} for word, flag in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(500): word, flag,count = items[i] print("{0:<5}{1:>5}".format(word, count)) print(flag)
时间: 2024-04-09 14:27:05 浏览: 136
这段代码在之前的基础上添加了对分词结果的词性标注,并输出了每个词语的词性。
首先,导入了`paddle`模块以支持PaddlePaddle。
接下来,打开名为"明朝collection.txt"的文本文件,并将其内容读取到变量text中。
然后,通过调用`jieba.enable_paddle()`启用了PaddlePaddle深度学习框架来提高分词效果。
然后,使用`pseg.cut()`函数对文本进行分词,并传入参数`use_paddle=True`以使用PaddlePaddle进行分词。分词结果保存在变量words中。
接下来,定义了一个字典counts来记录每个词语出现的次数。遍历分词结果words,对于长度为1的词语跳过,对于长度大于1的词语,在counts中累加其出现次数。
然后,将counts转换为列表items,并根据词频进行降序排序。
最后,通过循环打印出现频率最高的500个词语及其出现次数和词性。
请注意,运行此代码需要确保已经安装jieba库和paddle库,并且已经下载并配置好相应的模型文件。
相关问题
import requests from bs4 import BeautifulSoup import jieba.analyse import jieba.posseg as pseg from snownlp import SnowNLP import matplotlib.pyplot as plt # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 获取网页内容 def get_html(url): resp = requests.get(url, headers=headers) resp.encoding = resp.apparent_encoding html = resp.text return html # 获取新闻列表 def get_news_list(url): html = get_html(url) soup = BeautifulSoup(html, 'html.parser') news_list = soup.find_all('a', class_="news_title") return news_list # 对文本进行情感分析 def sentiment_analysis(text): s = SnowNLP(text) return s.sentiments # 对文本进行关键词提取 def keyword_extraction(text): keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True, allowPOS=('n', 'vn', 'v')) return keywords # 对新闻进行分析 def analyze_news(url): news_list = get_news_list(url) senti_scores = [] # 情感分数列表 keyword_dict = {} # 关键词词频字典 for news in news_list: title = news.get_text().strip() link = news['href'] content = get_html(link) soup = BeautifulSoup(content, 'html.parser') text = soup.find('div', class_='article').get_text().strip() # 计算情感分数 senti_score = sentiment_analysis(text) senti_scores.append(senti_score) # 提取关键词 keywords = keyword_extraction(text) for keyword in keywords: if keyword[0] in keyword_dict: keyword_dict[keyword[0]] += keyword[1] else: keyword_dict[keyword[0]] = keyword[1] # 绘制情感分数直方图 plt.hist(senti_scores, bins=10, color='skyblue') plt.xlabel('Sentiment Score') plt.ylabel('Number of News') plt.title('Sentiment Analysis') plt.show() # 输出关键词词频排名 keyword_list = sorted(keyword_dict.items(), key=lambda x: x[1], reverse=True) print('Top 10 keywords:') for i in range(10): print('{}. {} - {:.2f}'.format(i+1, keyword_list[i][0], keyword_list[i][1])) if __name__ == '__main__': url = 'https://www.sina.com.cn/' analyze_news(url)
这是一段Python代码,用于对新闻进行情感分析和关键词提取。它使用了requests库来获取网页内容,使用BeautifulSoup库来解析HTML文档,使用jieba库来进行中文分词和关键词提取,使用SnowNLP库来进行情感分析,使用matplotlib库来绘制情感分数直方图。在主函数中,它调用了get_news_list()函数来获取新闻列表,然后对每篇新闻进行情感分析和关键词提取,并将情感分数和关键词词频存储到列表和字典中。最后,它绘制情感分数直方图,输出关键词词频排名。
import pandas as pd import re import jieba.posseg as psg import numpy as np data = pd.read_excel('D:/SHUJUWAJUE/data/reviews.xlsx', index_col = u'nickname') # 读取数据,指定“日期”列为索引列 # 去重,去除完全重复的数据 reviews = pd.read_csv("D:/SHUJUWAJUE/data/reviews.xlsx") reviews = reviews[['content','id']].drop_duplicates() content = reviews['content'] # 去除英文、数字等 # 由于评论主要为京东华为手机mate40Pro的评论,因此去除这些词语 strinfo = re.compile('[0-9a-zA-Z]|京东|京东商城|美的|热水器|电热水器|') content = content.apply(lambda x: strinfo.sub('', x)) print(content)这段代码'utf-8' codec can't decode byte 0xa7 in position 14: invalid start byte发生以上报错怎么办
这个报错通常是因为文件编码格式不正确导致的。根据代码中的路径 'D:/SHUJUWAJUE/data/reviews.xlsx',这是一个 Excel 文件,因此可以尝试指定 `read_excel()` 方法中的 `encoding` 参数,如下所示:
```
data = pd.read_excel('D:/SHUJUWAJUE/data/reviews.xlsx', index_col=u'nickname', encoding='utf-8')
```
如果仍然报错,可以尝试其他编码格式,比如 `gbk`、`gb2312` 等。同时,也可以通过文本编辑器打开 Excel 文件,查看文件编码格式是否正确。
阅读全文