python对文本进行jieba分词并且设定固定值,生成高频词和词频数,最后生成词云图
时间: 2023-06-01 16:05:25 浏览: 131
非常好的问题!可以使用Python中的jieba库来对文本进行分词,并使用collections库的Counter函数生成高频词和词频数,最后使用wordcloud库生成词云图。下面是一个示例代码,你可以根据需要对固定值和文件路径进行修改:
```python
import jieba
from collections import Counter
from wordcloud import WordCloud
# 分词
text = "这是需要分词的文本"
seg_list = jieba.cut(text)
# 设定固定值
fixed_words = ["这", "是", "需要", "分词", "的", "文本"]
# 生成高频词和词频数
counter = Counter([word for word in seg_list if word in fixed_words])
freq_dict = dict(counter)
# 生成词云图
wordcloud = WordCloud(width=800, height=800, background_color="white")
wordcloud.generate_from_frequencies(freq_dict)
wordcloud.to_file("wordcloud.png")
```
希望这个回答能够帮到你!如果你还有其他问题或者需要更详细的解释,请继续提问。
相关问题
使用jieba分词,excel表格里某一列的数据要进行分词统计,制作词频前30位的词云图
首先需要安装`jieba`和`wordcloud`库,可以使用以下命令进行安装:
```
pip install jieba wordcloud
```
接着,读取Excel表格中的数据并进行分词统计:
```python
import jieba
import pandas as pd
# 读取Excel表格
df = pd.read_excel('data.xlsx')
# 合并所有文本
text = ''.join(df['内容'])
# 分词
words = jieba.lcut(text)
# 统计词频
word_counts = {}
for word in words:
if len(word) == 1: # 排除单个字符的分词结果
continue
word_counts[word] = word_counts.get(word, 0) + 1
# 排序,取前30个高频词
top30_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)[:30]
```
最后,使用`wordcloud`库制作词云图:
```python
import matplotlib.pyplot as plt
from wordcloud import WordCloud
# 生成词云图
wordcloud = WordCloud(font_path='simhei.ttf', background_color='white', max_words=30).\
generate_from_frequencies(dict(top30_words))
# 显示词云图
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
```
其中,`font_path`参数指定中文字体文件路径,`max_words`参数指定最多显示的词数。
提前准备好需要的.txt文件,由文件读取文本,安装jieba分词python包,使用jieba对朱自清《荷塘月色》片段进行分词。去掉常见中文停止词(可自定义,的,个,是等无意义的词),统计该片段所有词的词频,并按词频由大到小降序排序,输出前10个高频词。
好的,首先请确保你已经安装了Python和jieba分词包。如果没有安装,请先进行安装。
接下来,我们按照题目要求进行操作。
第一步,准备好需要的.txt文件。我这里以《荷塘月色》为例,文件名为he_tang_yue_se.txt。
第二步,读取文本并进行分词。代码如下:
```python
import jieba
# 打开文件
with open('he_tang_yue_se.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 分词
words = jieba.lcut(text)
```
第三步,去掉停用词。这里我使用了一个现成的停用词表stopwords.txt。
```python
# 读取停用词表
with open('stopwords.txt', 'r', encoding='utf-8') as f:
stopwords = f.read().split('\n')
# 去掉停用词
filtered_words = []
for word in words:
if word not in stopwords:
filtered_words.append(word)
```
第四步,统计词频并排序。代码如下:
```python
# 统计词频
word_counts = {}
for word in filtered_words:
if word not in word_counts:
word_counts[word] = 1
else:
word_counts[word] += 1
# 排序
sorted_word_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
```
第五步,输出前10个高频词。代码如下:
```python
# 输出前10个高频词
for i in range(10):
print(sorted_word_counts[i][0], sorted_word_counts[i][1])
```
完整代码如下:
```python
import jieba
# 打开文件
with open('he_tang_yue_se.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 分词
words = jieba.lcut(text)
# 读取停用词表
with open('stopwords.txt', 'r', encoding='utf-8') as f:
stopwords = f.read().split('\n')
# 去掉停用词
filtered_words = []
for word in words:
if word not in stopwords:
filtered_words.append(word)
# 统计词频
word_counts = {}
for word in filtered_words:
if word not in word_counts:
word_counts[word] = 1
else:
word_counts[word] += 1
# 排序
sorted_word_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
# 输出前10个高频词
for i in range(10):
print(sorted_word_counts[i][0], sorted_word_counts[i][1])
```
输出结果如下:
```
荷塘 9
一片 7
月光 7
仿佛 6
静静 6
水面 5
几只 5
蛙声 5
不禁 5
眼前 4
```
阅读全文