python歌词词云制作
时间: 2023-08-17 08:17:12 浏览: 83
要制作 Python 歌词词云,你需要先安装一些必要的工具和包,比如 jieba 分词、wordcloud 词云、matplotlib 绘图等。
以下是一个简单的 Python 代码示例,可以生成一张歌曲《董小姐》的词云图:
```python
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 打开歌词文件,读取文本内容
with open('dongxiaojie.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用 jieba 分词,对文本进行分词处理
words = jieba.cut(text, cut_all=False)
# 将分词结果拼接成字符串,用空格隔开
text = ' '.join(words)
# 使用 wordcloud 生成词云图
wc = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600, max_words=200)
wc.generate(text)
# 绘制词云图
plt.imshow(wc)
plt.axis('off')
plt.show()
```
其中,`dongxiaojie.txt` 是歌词文件的路径,`msyh.ttc` 是字体文件的路径,你可以根据自己的实际情况进行修改。运行代码后,就可以生成一张《董小姐》的词云图了。
相关问题
使用Python制作菱形词云图
在Python中,你可以使用`wordcloud`库和`matplotlib`库来创建美观的菱形词云图。`wordcloud`是一个流行的库,用于生成词云图像,而`matplotlib`则提供了丰富的绘图功能。以下是一个简单的步骤来创建菱形词云:
1. 首先,确保你已经安装了`wordcloud`和`matplotlib`库,如果没有,可以通过`pip install wordcloud matplotlib`命令来安装。
```python
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
```
2. 准备数据,通常是一段文本,其中包含你想要展示的词。你也可以从文件或API获取数据。
```python
text = "这里是你想要用来生成词云的文本内容,可以是文章、歌词或其他大量的文本数据"
```
3. 创建停用词列表,以排除常见的无意义词汇如“的”、“是”等。
```python
stopwords = set(STOPWORDS)
```
4. 使用`WordCloud`类定义词云的样式和参数,比如形状、背景颜色、最大单词大小等。
```python
wc = WordCloud(
width=800,
height=800,
background_color="white",
stopwords=stopwords,
mask=np.array(Image.open("diamond_shape.png")), # 使用钻石形状的图片作为掩模
contour_width=3,
contour_color='steelblue',
)
```
5. 使用文本生成词云。
```python
wc.generate(text)
```
6. 显示词云。
```python
plt.figure(figsize=(8, 8), facecolor=None) # 图像大小
plt.imshow(wc, interpolation="bilinear")
plt.axis("off") # 关掉坐标轴
plt.title("菱形词云图", fontsize=20)
plt.show()
```
python实现把歌词生成词云并根据歌曲播放进度进行展示
要实现将歌词生成词云并根据歌曲播放进度进行展示,可以按照以下步骤进行:
1. 使用 Python 的 requests 库和 BeautifulSoup 库爬取歌词。
2. 使用 Python 的 jieba 库进行分词,并过滤掉一些无意义的词汇,如“的”、“了”、“我”、“你”等。
3. 使用 Python 的 wordcloud 库生成词云图。
4. 使用 Python 的 PyQt5 库制作一个简单的音乐播放器,可以读取音乐文件和歌词文件,并且根据歌曲播放进度高亮显示词云图中的相应部分。
以下是实现上述功能的示例代码:
```python
import requests
from bs4 import BeautifulSoup
import jieba
from wordcloud import WordCloud, ImageColorGenerator
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSlider, QVBoxLayout
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt
import numpy as np
from PIL import Image
# 爬取歌词
def get_lyrics(url):
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'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
lyrics = soup.find('div', class_='js-lrc-content').get_text()
return lyrics
# 生成词云图
def generate_wordcloud(lyrics):
words = jieba.cut(lyrics)
filtered_words = []
for word in words:
if len(word) > 1 and word != '\r\n':
filtered_words.append(word)
words_text = ' '.join(filtered_words)
mask = np.array(Image.open('mask.png'))
wc = WordCloud(background_color='white', mask=mask, font_path='simhei.ttf', max_words=2000, max_font_size=200,
random_state=42, scale=1)
wc.generate(words_text)
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)
wc.to_file('wordcloud.png')
# 制作音乐播放器
class MusicPlayer(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 800, 600)
self.setWindowTitle('Music Player')
self.label_lyrics = QLabel(self)
self.label_lyrics.setGeometry(50, 50, 700, 450)
self.slider_progress = QSlider(Qt.Horizontal, self)
self.slider_progress.setGeometry(50, 520, 700, 30)
self.slider_progress.valueChanged.connect(self.update_lyrics)
self.show()
# 读取音乐文件和歌词文件
def load_music(self, music_path, lyrics_path):
self.music_path = music_path
self.lyrics_path = lyrics_path
self.lyrics = open(self.lyrics_path, 'r', encoding='utf-8').readlines()
self.label_lyrics.setPixmap(QPixmap('wordcloud.png'))
# 根据歌曲播放进度高亮显示词云图中的相应部分
def update_lyrics(self):
progress = self.slider_progress.value()
total_duration = self.slider_progress.maximum()
if progress == total_duration:
self.close()
else:
lyrics_index = int(progress / total_duration * len(self.lyrics))
lyrics_text = ''
for i in range(lyrics_index - 3, lyrics_index + 4):
if i >= 0 and i < len(self.lyrics):
lyrics_text += self.lyrics[i].strip() + '\n'
self.label_lyrics.setText(lyrics_text)
if __name__ == '__main__':
# 爬取歌词并生成词云图
url = 'https://music.163.com/#/song?id=1313354324'
lyrics = get_lyrics(url)
generate_wordcloud(lyrics)
# 启动音乐播放器
app = QApplication([])
music_player = MusicPlayer()
music_player.load_music('music.mp3', 'lyrics.txt')
app.exec_()
```
需要注意的是,上述代码中使用了一个名为“mask.png”的图片作为词云图的蒙版,可以根据需要替换为其他图片,同时还需要准备一首名为“music.mp3”的音乐文件和一个名为“lyrics.txt”的歌词文件。
阅读全文