【算法】用哈希表分词统计 Bob Dylan 的歌词

阅读: 评论:0

【算法】用哈希表分词统计 Bob Dylan 的歌词

【算法】用哈希表分词统计 Bob Dylan 的歌词

1. 概述

鲍勃迪伦是美国的一位伟大的诗人,一个伟大的曲作者,他颇具创造力的作品为美国文化甚 至整个世界的文化做出很多贡献。本文用 NLTK 提取鲍勃迪伦的歌词中的名词,将他的歌词 进行分词统计存储在一个哈希表中,并用 matplotlib 将出现词频率高的歌词进行可视化。

2. 问题分析

  1. 在实验的过程中,我们先从 github 中下载鲍勃迪伦的歌词,再在 python 中将歌词文件读入, 用 NLTK 中的函数将之中的名词提取。
  2. 在得到所有的名词列表后,使用哈希表来对歌词进行词频统计。
  3. 用哈希表来存储词频是一种很高效的方式,他是根据关键码值可直接访问的数据结构。
    在 python 中可以用字典将其实现。当我们要查找该单词的词频时,时间复杂度为 O(1)。
  4. 在词频统计之后,我们取出字典中名词出现频率最高的前 18 个名词,用 matlibplot 库将其图表打印出来。

3. 实验代码

// An highlighted block
import nltk 
import os 
import matplotlib.pyplot as plt path = "/Users/python/Desktop/BTH004 算法分析/中方/code/pycode/bobdylan/txt" #文件夹目录 
files= os.listdir(path) #得到文件夹下的所有文件名称 
nouns = [] for file in files: #遍历文件夹 position = path+'/'+ file#print (position) with open(position, "r",encoding='utf-8') as f: #打开文件 lines = f.read() sentences = nltk.sent_tokenize(lines) 	#print("1") for sentence in sentences: #print("1") for word,pos in nltk.pos_tag(nltk.word_tokenize(str(sentence))):if (pos == 'NN' or pos == 'NNP' or pos == 'NNS' or pos == 'NNPS'): #print(word)nouns.append(word)#print(nouns) 
#统计词频 
result = {} 
nounsdict = {} 
for key in nouns: if key in nounsdict: nounsdict[key] = nounsdict[key]+1 		else:nounsdict[key] = 1 #print(type(dict)) 
del nounsdict['*'] 
del nounsdict['“'] 
del nounsdict['>'] 
del nounsdict['”'] 
del nounsdict['–'] 
del nounsdict['<'] 
nounsdict= sorted(nounsdict.items(), key=lambda asd:asd[1], reverse = True) 
nounsdict = nounsdict[0:20] print(nounsdict) 
keys = [] 
y = [] for i in range(len(nounsdict)): 		keys.append(nounsdict[i][0]) y.append(nounsdict[i][1]) 
x=range(len(keys)) plt.figure() 
plt.bar(keys ,y) 
icks(x,keys,rotation=45) 
plt.xlabel("words") 
plt.ylabel("frequency") 
plt.title("the word’s frequency statistic of Bob Dylan song") plt.show()

4. 实验结果

在第一次的实验代码中,将得到结果按照词频排序,得到以下结果。此时我们发现,得到的 结果有很多冠词、介词等,我们需要对数据进行清洗。

于是我们重新编写代码,引入 python 的 nltk 自然语言处理包,将歌词中的名词提取出来。 进行词频统计,并存入哈希表。用 matplotlib 包将其可视化,我们得到了下面的结果。


鲍勃迪伦的音乐是他真诚表达人生观和态度的工具,他的歌词中大面积地出现爱,世界、心、 时间等词汇,歌颂着爱、孤独与自由。他的愤怒温柔而有力,他的歌词美好又平静。诺贝尔文学奖用行动证明,最震撼人心极具文学表现力和时代影响力的歌词一样是最伟大的诗歌、 最伟大的文学作品。

5. 实验总结

在实验的过程中,碰到了一些问题,比如:

  1. 关于 python 读文件的操作
    解决方案: 使用了 python 下的 os 库

  2. 得到的数据多是助动词、介词、冠词,相对参考价值较小
    解决方案: 对数据进行提取,改变分词策略,只提取歌词中的名词。

  3. 无法使用 nltk 下的 download()函数
    解决方案: 可以存在一些代理服务器的问题,手动下载文件并放置在相对路径下,问题解决。

实验心得:
本次实验用了很多 python 的内置库,让我对于 python 的使用更加熟悉了。另外,不同的 库有着不同的功能,觉得很有意思。
哈希表可以提供快速的插入和查找操作,不论哈希表中有多少数据,都具有接近常量的操作 时间级,不仅速度快,而且实现也非常容易。

参考和致谢

【娱乐向】如何统计 David Bowie 的歌词词频
.
使用 python 从 NLTK 中提取名词短语 .html.
bob_dylan_lyrics 鲍勃迪伦歌词集 .

本文发布于:2024-02-04 11:47:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170706461455279.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分词   算法   歌词   用哈希表   Bob
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23