gpt4 book ai didi

python 重新。排除一些结果

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:32 29 4
gpt4 key购买 nike

我是 RE 的新手,我正在尝试获取歌词并分离出歌词标题、和声和主唱:

下面是一些歌词的例子:

[Intro]
D.A. got that dope!

[Chorus: Travis Scott]
Ice water, turned Atlantic (Freeze)
Nightcrawlin' in the Phantom (Skrrt, Skrrt)...

经文标题包括方括号和它们之间的任何单词。它们可以通过

成功隔离
r'\[{1}.*?\]{1}'

和声与诗句标题相似,但介于 () 之间。他们已成功隔离:

r'\({1}.*?\){1}'

对于主唱,我用过

r'\S+'

这确实隔离了主唱,但也隔离了诗歌标题和伴唱。我无法弄清楚如何使用简单的 RE 仅隔离主要人声。

这是一个 python 脚本,它可以得到我想要的输出,但我想用 REs 来做(作为一个学习练习)并且无法通过文档弄清楚。

import re

file = 'D:/lyrics.txt'
with open(file, 'r') as f:
lyrics = f.read()

def find_spans(pattern, string):
pattern = re.compile(pattern)
return [match.span() for match in pattern.finditer(string)]

verses = find_spans(r'\[{1}.*?\]{1}', lyrics)
backing_vocals = find_spans(r'\({1}.*?\){1}', lyrics)
main_vocals = find_spans(r'\S+', lyrics)

exclude = verses
exclude.extend(backing_vocals)

not_main_vocals = []
for span in exclude:
start, stop = span
not_main_vocals.extend(list(range(start, stop)))

main_vocals_temp = []
for span in main_vocals:
append = True
start, stop = span
for i in range(start, stop):
if i in not_main_vocals:
append = False
continue
if append == True:
main_vocals_temp.append(span)
main_vocals = main_vocals_temp

最佳答案

试试这个 Demo :

pattern = r'(?P<Verse>\[[^\]]+])|(?P<Backing>\([^\)]+\))|(?P<Lyrics>[^\[\(]+)'

您可以使用 re.finditer隔离组。

breakdown = {k: [] for k in ('Verse', 'Backing', 'Lyrics')}
for p in pattern.finditer(song):
for key, item in p.groupdict().items():
if item: breakdown[key].append(item)

结果:

{
'Verse':
[
'[Intro]',
'[Chorus: Travis Scott]'
],
'Backing':
[
'(Freeze)',
'(Skrrt, Skrrt)'
],
'Lyrics':
[
'\nD.A. got that dope!\n\n',
'\nIce water, turned Atlantic ',
"\nNightcrawlin' in the Phantom ",
'...'
]
}

为了进一步详细说明该模式,它使用命名组来分隔三个不同的组。使用 [^\]+]和类似的只是意味着找到所有不是的东西] (同样地,当 \) 意味着一切不是 ) 时)。在歌词部分,我们排除了所有以 [ 开头的内容和 ( . link to the demo on regex101如果您需要,我会更详细地解释这些组件。

如果您不关心主要歌词中的换行符,请使用 (?P<Lyrics>[^\[\(\n]+) (不包括 \n )将你的歌词变成没有换行符:

'Lyrics': [
'D.A. got that dope!',
'Ice water, turned Atlantic ',
"Nightcrawlin' in the Phantom ",
'...'
]

关于 python 重新。排除一些结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829700/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com