13

我非常喜欢发现可以很快被说唱的句子。例如,“要读一点维基百科”或“不想带着一瓶麦芽在阴沟里倒下”。(乔治·沃茨基)

我想用 Python 编写一个程序,它可以让我找到可以发音的单词(或单词组合),这样发音时听起来非常快。

我最初认为音节与字母比率高的单词会是最好的,但在编写 Python 程序来查找这些单词时,我只检索到听起来并不快的非常简单的单词(例如“iowa”)。

所以我不知道是什么让单词听起来很快。是词素与字母的比例吗?它是交替的元音 - 辅音对的数量吗?

你们将如何设计一个python程序来解决这个问题?

4

2 回答 2

8

这只是在黑暗中的一次尝试,因为我不是语言学家(尽管我已经写了一个语音合成器),这里有用的指标是组成每个单词的音素数量,因为音素本身会无论使用如何,都是相同的大致持续时间。有一个英语方言的国际音标图表,以及一个很好的英语音韵

cmudict项目提供了一个很好的开源语音词典,它有大约130k 个单词

这是一个非常快速的查找程序:

#!/usr/bin/python

import re

words={}

for line in open("cmudict.0.7a",'ro').readlines():
    split_idx = line.find(' ')
    words[line[0:split_idx]] = line[split_idx+1:-1]

user_input = raw_input("Words: ")

print
for word in user_input.split(' '):
    try:
        print "%25s %s" % (word, words[word.upper()])
    except:
        print "%25s %s" % (word, 'unable to find phonems for word')

跑的时候..

Words: I support hip hop from the underground up

                    I  AY1
              support  S AH0 P AO1 R T
                  hip  HH IH1 P
                  hop  HH AA1 P
                 from  F R AH1 M
                  the  DH AH0
          underground  AH1 N D ER0 G R AW2 N D
                   up  AH1 P

如果你想获得关于这个的超级花哨的裤子,总有Python Natural Language Toolkit可能对你有一些有用的花絮。

此外,一些现实世界使用.. 虽然公平地说,我将 'stylin' 固定为 'styling'.. 但留下 'tellin' 以揭示未知单词的不足。. 你可能会尝试查找以in'subbing结尾的单词撇号的 g 然后NG从查找中删除音素..

                  Yes  Y EH1 S
                  the  DH AH0
               rhythm  R IH1 DH AH0 M
                  the  DH AH0
                rebel  R EH1 B AH0 L
              Without  W IH0 TH AW1 T
                    a  AH0
                pause  P AO1 Z
                  I'm  AY1 M
             lowering  L OW1 ER0 IH0 NG
                   my  M AY1
                level  L EH1 V AH0 L
                  The  DH AH0
                 hard  HH AA1 R D
               rhymer  R AY1 M ER0
                where  W EH1 R
                  you  Y UW1
                never  N EH1 V ER0
                 been  B IH1 N
                  I'm  AY1 M
                   in  IH0 N
                  You  Y UW1
                 want  W AA1 N T
              styling  S T AY1 L IH0 NG
                  you  Y UW1
                 know  N OW1
                 it's  IH1 T S
                 time  T AY1 M
                again  AH0 G EH1 N
                    D  D IY1
                  the  DH AH0
                enemy  EH1 N AH0 M IY0
               tellin unable to find phonems for word
                  you  Y UW1
                   to  T UW1
                 hear  HH IY1 R
                   it  IH1 T
                 They  DH EY1
              praised  P R EY1 Z D
              etc...

如果这是您打算花一些时间做的事情,我很乐意提供帮助。我认为将“世界上第一个说唱 IDE”放在我的简历上会很有趣。如果已经存在的话,世界上第一个基于 Python 的说唱 IDE。:p

于 2012-02-27T11:41:02.853 回答
2

我想说从你给出的例子或你喜欢的其他例子开始,然后对你对它们的所有想法进行某种分析是个好主意:例如音素与字母的比率等;任何听起来合理并且您可以计算的东西。样本越多越好。希望这能让您很好地了解您已经喜欢的线条和单词具有哪些属性,这应该会引导您朝着正确的方向前进。

否则,我的外行人的猜测是短元音(显然)和硬辅音,如“t”、一些“p”、硬“g”等,将是最好的——它们使线条听起来断断续续和快速。

(想将此作为评论留下,因为它不是真正的答案,但它太长了:)

于 2012-02-27T14:12:58.367 回答