加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

NLP揭秘:除了宝石,女儿也是灭霸的真爱(大雾)

发布时间:2019-05-15 14:32:03 所属栏目:优化 来源:读芯术
导读:副标题#e# 《复仇者联盟4:终局之战》仍在热映中。在看到大结局的同时,本文将带你通过数据科普的眼光来回顾《复仇者联盟3:无限战争》:看看这群世界上最强的超级英雄们最爱说的词汇是哪些? 这次回顾旅程将从一个新的角度出发自然语言处理。 本文通过使用s
副标题[/!--empirenews.page--]

《复仇者联盟4:终局之战》仍在热映中。在看到大结局的同时,本文将带你通过数据科普的眼光来回顾《复仇者联盟3:无限战争》:看看这群世界上最强的超级英雄们最爱说的词汇是哪些?

这次回顾旅程将从一个新的角度出发——自然语言处理。

本文通过使用spaCy(用于处理和理解大量文本的NLPPython 开源程序库)对复联3的剧本进行分析,并研究以下几个项目:

  • 整部电影中使用最频繁的前十个动词、名词、副词和形容词。
  • 特定角色使用最多的动词和名词。
  • 电影中提及次数排位前30位的命名实体(namedentities)。
  • 各角色之间台词对白的相似性,例如雷神的台词对白和灭霸台词对白的相似性。

看见代码和专业词汇就想睡?今天你可以放心了!为读者着想,本文中使用的词汇和术语都是非技术性的,所以就算是你没有接触过NLP、AI、机器学习或者诸如*insert buzzword here*之类的代码,你都能理解并掌握本文想要传达的信息哦!所以,不看代码也不会影响你对其余内容的理解。

灭霸

灭霸 图片来源:Marvel

处理数据

实验中使用的数据或文本语料库(通常在NLP中称为语料库)是电影脚本。但是,在使用这些数据之前,需要做一下筛选。因为,心理描写、动作描述或者场景描写的文本,以及每句台词前的角色名(仅指示说话人,不作为文本分析的语料库)都不是本次研究的对象。所以,诸如“Thanoscrushes the Tesseract, revealing the blue Space Stone…” (灭霸捏碎了宇宙魔方,获得了蓝色的空间宝石……)之类的句子都被删除了。

此外,作为spaCy数据处理步骤的一部分,“I”(我)、“you”(你)、“an”(一个)这类被标记为停止词(常用的单词,多为冠词、介词、副词或连词)的术语被将不做处理。同时,实验过程中只使用单词的标准形式,也就是词根。举例说明,动词“talk”、“talked”和“talking”是同一个词“talk”(说话)的不同形式,所以这些词的词根就是“talk”。

要在spaCy中处理一段文本,首先需要加载语言模型,然后在文本语料库上调用模型进行文本处理。结果会输出一个涵盖所有已处理文本的Doc文件。

  1. importspacy 
  2.     # load a medium-sized language model 
  3.     nlp = spacy.load("en_core_web_md") 
  4.     with open('cleaned-script.txt', 'r') asfile: 
  5.        text = file.read()    
  6.     doc = nlp(text) 

在spaCy中创建Doc文件

然后就可以获得一个经过处理、有效信息占比极高的语料库。紧接着就可以开始实验了!

整部电影中使用最频繁的前十个动词、名词、副词和形容词

是否可能仅通过了解出现最频繁的动词就推断出电影的整体走向和情节呢?下文的图表证明了这一观点。

NLP揭秘:除了宝石,女儿也是灭霸的真爱(大雾)

“I know” (我了解……)、“you think” (你觉得……)是最常见的短语。

“know” (了解)、“go” (去)、 “come”(来)、“get” (获得)、“think”(思考)、“tell” (告诉)、“kill” (谋杀)、“need” (需要)、“stop” (制止)、和“want” (想要) 。从中能够推断出什么?介于这部电影于2018年上映,相信大部分观众都已经知道它讲述了一个什么样的故事:根据这些动词推断出《复仇者联盟3:无限战争》是关于了解、思考和调查如何去阻止某物或某人。

通过以下代码就能统计各个动词出现次数:

  1. importspacy 
  2. #load a medium-sized language model 
  3. nlp= spacy.load("en_core_web_md")  
  4. withopen('cleaned-script.txt', 'r') as file: 
  5.     text = file.read()   
  6. doc= nlp(text) 
  7. #map with frequency count 
  8. pos_count= {} 
  9. fortoken in doc: 
  10.     # ignore stop words 
  11.     if token.is_stop: 
  12.         continue 
  13.     # pos should be one of these: 
  14.     # 'VERB', 'NOUN', 'ADJ' or 'ADV' 
  15.     if token.pos_ == 'VERB': 
  16.         if token.lemma_ in pos_count: 
  17.             pos_count[token.lemma_] += 1 
  18.         else: 
  19.             pos_count[token.lemma_] = 1 
  20. print("top10 VERBs {}".format(sorted(pos_count.items(), key=lambda kv: kv[1],reverse=True)[:10])) 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读