查找可以最快说出的单词和单词组合

时间:2012-02-27 03:38:08

标签: python algorithm word nlp linguistics

我非常喜欢发现可以很快敲击的句子。例如,"要读一点维基百科"或者"不想用一瓶麦芽卷在阴沟里。" (George Watsky)

我想用Python编写一个程序,使我能够找到可以清晰表达的单词(或单词组合),使其在说话时听起来非常快。

我最初认为具有高音节比率的单词将是最好的,但是在编写Python程序来查找这些单词时,我只检索了非常简单的单词,这些单词听起来并不快(例如"衣阿华&#34)。

所以我真的让人听起来很快。这是语素与字母的比率吗?它是交替的元音 - 辅音对的数量吗?

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

2 个答案:

答案 0 :(得分:7)

由于我不是语言学家(虽然我已经编写了语音合成器),但这只是一个黑暗中的刺,这里有用的指标是构成每个语法的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可能有一些有用的花絮。

此外,一些现实世界使用 ..虽然公平,但我修复了#styl;'来样式' ..但是离开' 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的rapping IDE。 :P

答案 1 :(得分:2)

我想说从你给出的例子或其他你喜欢的例子开始,并对你的所有想法进行某种分析是个好主意:例如:音素与信件的比例等;无论听起来合理,你都可以计算出来。样品越多越好。希望这会让你很好地了解你已经享受的线条和单词的属性,这应该引导你朝着正确的方向前进。

否则,我的外行人的猜测是短元音(显然)和硬辅音如't',某些'p','hard'等等,将是最好的 - 它们会让线条听起来断断续续地快速射击。

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