揭开电影剧本的对话以计算角色所说的话
Uncover a dialogue of a movie script to count the words spoken by characters
我正在做一个关于电影中女性意义的项目。
因此,我正在分析电影剧本以获得主要男性 character/main 女性角色的口语比例。
我在过滤 NAMES 和
指导说明。
我考虑过正则表达式,但我不喜欢它。
例如:
Mia works, photos of Hollywood icons on the wall behind her, as --
CUSTOMER #1
This doesn't taste like almond milk.
MIA
Don't worry, it is. I know sometimes it --
CUSTOMER #1
Can I see the carton?
Mia hands it over. The Customer looks.
CUSTOMER #1 (CONT'D)
I'll have a black coffee.
我不知道如何处理语音文本后的空白新行。
有什么想法可以将完整的电影剧本缩减为仅有的对话剧本,以便我可以计算字数并处理数据吗?
from nltk.tokenize import word_tokenize
f = open("/...//La_la_land_script.txt", "r")
script = f.read()
我正在将电影脚本加载到 python
def deletebraces (str):
klammerauf = str.find('(')
klammerzu = str.find(')')
while (klammerauf != -1 and klammerzu != -1):
if (klammerauf<klammerzu):
str = str[:klammerauf] + str[klammerzu+1:]
klammerauf = str.find('(')
klammerzu = str.find(')')
return str
此函数删除所有括号
def removing(list):
for i in list:
if i == '?':
list.remove('?')
if i == '!':
list.remove('!')
if i == '.':
list.remove('.')
if i == ',':
list.remove(',')
if i == '...':
list.remove('...')
return list
此函数删除所有其他符号
def countingwords(list):
woerter = 0
for i in list:
woerter = woerter + 1
return woerter;
这个函数统计字数
script = deletebraces(script)
def wordsspoken(script, name):
a = 0
e = 0
all = -len(name)-1
if script.find(name)==-1:
print("This character does not speak")
检查是否存在名字为
的角色
else:
while(a != -1 and e != -1):
a = script.find(name+'\n ') + len(name)
print(a)
temp = script[a:]
t = temp.split("\n")
text = t[1]
print(text)
textlist = word_tokenize(text)
removing(textlist)
more = countingwords(textlist)
all = all + more
script = script[a+e:]
a = script.find(name +'\n ')
temp = script[a:]
e = temp.find(' \n')
这里我尝试揭开,但根本不起作用
print(name + " sagt " + str(all) + " Wörter.")
f.close()
name = input("Enter name:")
wordsspoken(script, name)
name1 = input("Enter another name:")
wordsspoken(script, name1)
在脚本格式中,缩进承载了大部分信息。标记化可能会减少白色 space,导致您需要的信息丢失。
在标记化之前,我会使用缩进将舞台方向与对话分开。如果该行从第一列开始,则为舞台方向。如果它从一行的中间开始并且全部大写,那么它就是即将说话的角色的名字。角色名称后缩进的行(但没有角色名称那么多)是对话。
对话有时会嵌入一些次要的舞台指示(例如,指示角色是在窃窃私语还是大喊大叫)。这些通常比对话本身缩进得更深,并用括号括起来。
Post-制作脚本(例如编辑器、声音编辑器、出版等)通常对这些规则非常严格,因此缩进会非常可靠。早期的草稿和规格脚本也经常有错误,但好莱坞在一个脚本软件包上非常标准化,所以我希望任何现代的东西仍然非常可靠。请注意,半小时的情景喜剧剧本通常是双 spaced,但在其他方面遵循与电视剧和电影相同的格式规则。
正如@AdrianMcCarthy 指出的那样,您文件中的空白包含解析语音所需的所有信息。这是 Python 中完成任务的一种方法:
import codecs
# script.txt contains the sample text you posted
with codecs.open('script.txt', 'r', 'utf8') as f:
# read the file content
f = f.read()
# store all the clean text that's accumulated
spoken_text = ''
# split the file into a list of strings, with each line a member in the list
for line in f.split('\n'):
# split the line into a list of words in the line
words = line.split()
# if there are no words, do nothing
if not words:
continue
# if this line is a person identifier, do nothing
if len(words[0]) > 1 and all([i.isupper() for i in words[0]]):
continue
# if there's a good amount of whitespace to the left, this is a spoken line
if len(line) - len(line.lstrip()) > 4:
spoken_text += line.strip() + ' '
print(spoken_text)
我正在做一个关于电影中女性意义的项目。 因此,我正在分析电影剧本以获得主要男性 character/main 女性角色的口语比例。
我在过滤 NAMES 和 指导说明。
我考虑过正则表达式,但我不喜欢它。
例如:
Mia works, photos of Hollywood icons on the wall behind her, as --
CUSTOMER #1
This doesn't taste like almond milk.
MIA
Don't worry, it is. I know sometimes it --
CUSTOMER #1
Can I see the carton?
Mia hands it over. The Customer looks.
CUSTOMER #1 (CONT'D)
I'll have a black coffee.
我不知道如何处理语音文本后的空白新行。 有什么想法可以将完整的电影剧本缩减为仅有的对话剧本,以便我可以计算字数并处理数据吗?
from nltk.tokenize import word_tokenize
f = open("/...//La_la_land_script.txt", "r")
script = f.read()
我正在将电影脚本加载到 python
def deletebraces (str):
klammerauf = str.find('(')
klammerzu = str.find(')')
while (klammerauf != -1 and klammerzu != -1):
if (klammerauf<klammerzu):
str = str[:klammerauf] + str[klammerzu+1:]
klammerauf = str.find('(')
klammerzu = str.find(')')
return str
此函数删除所有括号
def removing(list):
for i in list:
if i == '?':
list.remove('?')
if i == '!':
list.remove('!')
if i == '.':
list.remove('.')
if i == ',':
list.remove(',')
if i == '...':
list.remove('...')
return list
此函数删除所有其他符号
def countingwords(list):
woerter = 0
for i in list:
woerter = woerter + 1
return woerter;
这个函数统计字数
script = deletebraces(script)
def wordsspoken(script, name):
a = 0
e = 0
all = -len(name)-1
if script.find(name)==-1:
print("This character does not speak")
检查是否存在名字为
的角色 else:
while(a != -1 and e != -1):
a = script.find(name+'\n ') + len(name)
print(a)
temp = script[a:]
t = temp.split("\n")
text = t[1]
print(text)
textlist = word_tokenize(text)
removing(textlist)
more = countingwords(textlist)
all = all + more
script = script[a+e:]
a = script.find(name +'\n ')
temp = script[a:]
e = temp.find(' \n')
这里我尝试揭开,但根本不起作用
print(name + " sagt " + str(all) + " Wörter.")
f.close()
name = input("Enter name:")
wordsspoken(script, name)
name1 = input("Enter another name:")
wordsspoken(script, name1)
在脚本格式中,缩进承载了大部分信息。标记化可能会减少白色 space,导致您需要的信息丢失。
在标记化之前,我会使用缩进将舞台方向与对话分开。如果该行从第一列开始,则为舞台方向。如果它从一行的中间开始并且全部大写,那么它就是即将说话的角色的名字。角色名称后缩进的行(但没有角色名称那么多)是对话。
对话有时会嵌入一些次要的舞台指示(例如,指示角色是在窃窃私语还是大喊大叫)。这些通常比对话本身缩进得更深,并用括号括起来。
Post-制作脚本(例如编辑器、声音编辑器、出版等)通常对这些规则非常严格,因此缩进会非常可靠。早期的草稿和规格脚本也经常有错误,但好莱坞在一个脚本软件包上非常标准化,所以我希望任何现代的东西仍然非常可靠。请注意,半小时的情景喜剧剧本通常是双 spaced,但在其他方面遵循与电视剧和电影相同的格式规则。
正如@AdrianMcCarthy 指出的那样,您文件中的空白包含解析语音所需的所有信息。这是 Python 中完成任务的一种方法:
import codecs
# script.txt contains the sample text you posted
with codecs.open('script.txt', 'r', 'utf8') as f:
# read the file content
f = f.read()
# store all the clean text that's accumulated
spoken_text = ''
# split the file into a list of strings, with each line a member in the list
for line in f.split('\n'):
# split the line into a list of words in the line
words = line.split()
# if there are no words, do nothing
if not words:
continue
# if this line is a person identifier, do nothing
if len(words[0]) > 1 and all([i.isupper() for i in words[0]]):
continue
# if there's a good amount of whitespace to the left, this is a spoken line
if len(line) - len(line.lstrip()) > 4:
spoken_text += line.strip() + ' '
print(spoken_text)