【问题标题】:Find words and combinations of words that can be spoken the quickest找到可以最快说出的单词和单词组合
【发布时间】:2012-03-16 14:45:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 呵呵,好问题,但不幸的是我不知道如何回答:(我唯一的观察是那些和类似的句子有很高的字母ptkbdgwth。但我想它们在句子中的分布方式同样重要..
  • 试试在这里问你的问题怎么样:linguistics.stackexchange.com 它不像 stackoverflow 那样活跃,但你可能会在那里得到更好的答案。一旦你得到算法,我们可以帮助你编写 Python 代码:)
  • 这是一个很酷的问题。虽然我当然没有答案,但在我的脑海中,我可能会认为结尾有更多音节的单词可能更容易快速说唱。然而,Busta Rhymes 似乎可以以光速 rap 任何东西。正如 Julien Bourdon 在上面指出的那样,一个很好的起点是为此深入研究语言学。不过,我会密切注意这一点,因为我想知道。
  • 写软件帮你说唱?这将黑帮带到了一个全新的水平!
  • 我会写下你已经想出的押韵列表,并研究它们的任何模式。某些元音可能更适合某些辅音。此外,您必须意识到英语有一套非常宽松的拼写规则,因此您应该根据短语音素而不是拼写方式。

标签: python algorithm word nlp linguistics


【解决方案1】:

这只是在黑暗中的一次尝试,因为我不是语言学家(尽管我已经写了一个语音合成器),这里有用的指标是组成每个单词的 phonemes 的数量,因为无论使用如何,音素本身都将具有相同的大致持续时间。有一个International Phonetic Alphabet chart for english dialects,还有一个不错的phonology of English

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

下面是一个查找程序的快速介绍:

#!/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' 结尾的单词,方法是将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

【讨论】:

  • 或者,世界上最新鲜的说唱IDE!
  • 太棒了! @Patel,我将在这方面工作很长时间,因为我感兴趣,所以我会联系你寻求帮助!
  • 我可以想到一些事情,比如引入押韵词典和词库(希望有开源版本)。我很想知道你是怎么做的——所以请联系我或在博客上发帖。互联网需要更多基于说唱的算法项目!
  • 对于它的价值 - 我遇到了一个也使用 cmudict 的押韵实用程序。sourceforge.net/projects/rhyme/files
  • 要获得奖励积分,请窃取 TomTom GPS Snoop Dogg 语音.. youtube.com/watch?v=Kgjy-k5mOqA
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2016-07-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多