【问题标题】:Rhyme Dictionary from CMU pronunciation database来自 CMU 发音数据库的押韵词典
【发布时间】:2013-04-04 22:27:51
【问题描述】:

我正在寻找一个免费或开源的押韵数据库。

我找到了 CMU 发音“数据库”及其一系列应用程序,但我无法理解它们或弄清楚数据的来源。

我只需要一个包含单词及其音素的简单文本文件。

这里有人知道我在哪里可以找到一个或从哪里开始从 CMU 文件中导出这样一个列表吗?

【问题讨论】:

    标签: dictionary phoneme


    【解决方案1】:

    cmudict

    cmudict 是一个文本文件,它的格式非常简单。首先,列出单词。然后,有两个空格。两个空格后面的都是发音。如果一个词可能有两种不同的发音方式,您会看到两个词条,例如

    word
    word(1)
    

    他们在文件的开头列出了符号和标点符号。符号后面是所述符号名称的英文拼写,它们之间没有空格。然后是两个空格分隔符和 arpabet 代码。由于您只是在寻找押韵,因此您不必对符号部分做任何特别的事情,因为您永远不会寻找...ELLIPSIS的押韵

    ARPAbet

    维基百科http://en.wikipedia.org/wiki/Arpabet 中列出了有关 ARPAbet 代码如何映射到 IPA 的信息,每个映射都显示示例单词。很容易看出两者之间的关系,如果您熟悉 IPA,这可能有助于您了解如何阅读 ARPAbet 代码。

    总结

    基本上,如果您已经找到了 cmudict,那么您已经得到了您想要的东西:单词及其发音的数据库。要查找押韵的单词,您必须将平面文件解析为表格并运行查询以查找以相同 ARPAbet 代码结尾的单词。

    做事的一般理论

    部分:东西

    1. 创建一个新数据库
    2. 在数据库中创建一个包含三个字段的表:index、word、arpabet
    3. 逐行读取cmudict文件
    4. 对于每一行,将其分成两部分,其中找到两个连续的空格并且
    5. 增加索引计数,然后插入索引号、单词和arpabet代码

    然后嗯...

    一旦您将数据输入到您选择的任何类型的数据库中,您就可以使用该数据库来查找 arpabet 代码之间的相关性。你可以找到押韵、谐音、谐音和其他助记符。它会像

    部分:事物

    1. 找一个你想找韵的词
    2. 在数据库中查询单词的 arpabet 等效项
    3. 将 arpabet 代码拆分为多个片段,只要有空格就将其分解
    4. 获取最后一段代码,并在数据库中查询其 arpabet 代码结尾与该段匹配的单词
    5. 用押韵做一些花哨的事情

    捷径和剧透

    我感到无聊,写了一个 Node.js 模块,其中涵盖了上面列出的“Part: Stuff”。如果您的机器上安装了 Node.js,您可以通过运行 npm install cmudict-to-sqlite 获取模块

    【讨论】:

      【解决方案2】:

      使用 CMU 发音词典的韵律逻辑

      好的。假设您想使用CMU Pronouncing Dictionary 数据(示例文件:cmudict-0.7b)构建所有与“LOVE”押韵的单词的列表。

      你可以这样做:

      首先,你需要学习“LOVE”的发音。您会在字典中找到这一行,其中“LOVE”和“L AH1 V”用两个空格隔开:

      LOVE  L AH1 V
      

      这是说LOVE这个词的发音类似于L AH1 V

      然后,找到具有主要重音的元音音素。换句话说,在那个发音中寻找数字“1”。直接在 1 左侧的文本是具有主要重音的元音 (AH)。该文本及其右侧的所有内容都是您的“押韵音素”(因为没有更好的术语)。所以 LOVE 的押韵音素是AH1 V

      我们已经完成了一半!现在我们只需要找到发音以AH1 V 结尾的其他单词。如果您正在使用 Notepad++,请使用“正则表达式”的搜索模式尝试在当前文档中查找所有模式 AH1 V$。这将匹配如下行:

      Line 392: ABOVE  AH0 B AH1 V
      Line 10266: BELOVE  B IH0 L AH1 V
      Line 30204: DENEUVE  D IH0 N AH1 V
      Line 30205: DENEUVE(1)  D IY0 N AH1 V
      Line 34064: DOVE  D AH1 V
      Line 48177: GLOVE  G L AH1 V
      Line 49053: GOV  G AH1 V
      ... etc
      

      押韵呜呜呜!

      有很多方法可以实现这一点,也有很多极端情况,但这大致是许多电子押韵词典在寻找完美押韵时所采用的方法。

      存储押韵数据的假设 SQL 方法

      显然,如果您每次有人想要押韵时都扫描字典,那么性能将是一个问题。如果这是一个问题,您可以尝试以不同的方式存储或索引数据。

      虽然它在磁盘空间上不是最有效的,但我在将这些内容存储在带有索引列的 SQL 表中时有过很好的体验。

      对于一个简单的概念示例,您可以计算字典中所有单词的“韵律音素”,然后将它们插入到列为 { WordText, RhymePhonemes } 的“韵律”表中。例如,您可能会看到如下记录:

      {"ABOVE", "AH1 V"}
      {"DOVE", "AH1 V"}
      {"OUTLIVE", "IH1 V"}
      {"GRADUATE", "AE1 JH AH0 W AH0 T"}
      {"GRADUATE", "AE1 JH AH0 W EY2 T"}
      

      ...等

      然后,要查找押韵,您可以发出如下查询:

      SELECT OTHER.WordText
      FROM Rhymes INPUT
           INNER JOIN Rhymes OTHER ON OTHER.RhymePhonemes = INPUT.RhymePhonemes
      WHERE INPUT.WordText = 'love' AND
            OTHER.WordText <> INPUT.WordText
      ORDER BY OTHER.WordText
      

      如果您打算打印一本将所有发音相似的单词组合在一起的字典,这也会派上用场。

      当然还有很多其他方法可以存储/搜索不同权衡的数据,但希望这可以帮助您入门。

      我还幸运地将原始发音以不同的“完整”格式存储在数据库中(发音的正向和反向字符串,带有重音符号和没有重音符号等),但没有“切碎”成特定的片段就像一个押韵音素专栏。

      陷阱

      再一次,“爱”的原始解释绝对会让你进入押韵的范围。但是,在此过程中,您可能会遇到其他需要考虑的问题。这是一个提醒:

      1. 有些单词有多种发音。在 CMU 词典中,备用发音在 GRADUATE(2) 中的单词后面标有 (1)(2) 等文本。如果有人想要这些单词的韵律,您必须决定是显示所有匹配发音的韵律,还是让用户选择他们真正想要的发音。
      2. 当发音有两个或多个“1”时,你会怎么做?选第一个?选最后一个?如果你选择最后一个,你会发现更多的押韵,但这可能不是最自然的重音选择。
      3. 读音没有“1”怎么办?它不会发生很多,但它会发生,例如:ACCREDIT AH0 K R EH2 D AH0 TAIKIN EY0 K IH0 N。在这种情况下,我会选择下一个最佳压力(例如,如果 1 不存在,则选择 2、3、4 等)。如果它们都是 0,我没有什么好的建议。
      4. 缺少一些发音。这是一个很好的开始,但它没有您可能想要的所有单词或单词拼写。美式拼写优于英式拼写。
      5. 有些发音不是您所期望的,您可能需要删减。例如,“or”的发音听起来像“er”。
      6. 您可能想比较去掉重音符号后的“押韵音素”。这仅适用于主要重音不在最后一个元音上的单词(因此您在“love”示例中看不到问题)。

      【讨论】:

        【解决方案3】:

        我现在正在积极研究类似的事情,使用 Plate 建议的一般方法,并对其进行扩展。 Here's my source code.希望对你有帮助!

        【讨论】:

          【解决方案4】:

          如果您只使用一个小的演示子集,您总是可以使用http://www.rhymezone.com/ 并搜索一个单词,然后将其韵律匹配放入一个文本文件中。如果你想要一个完整的单词数据库。您可以将字典连接到zombieJS UI 自动化,然后屏幕抓取单词并将它们放入您自己的数据库中。这将允许您创建自己的押韵数据库。虽然说实话,这对您最初的要求来说是一项艰巨的任务

          【讨论】:

          • 我不想为了获得本地数据库而不得不从这些家伙的带宽中敲出废话。
          • 你不需要刮掉它。 RhymeZone 背后的人有自己的 api:datamuse.com/api 每天最多可以免费调用 1​​00,000 次 api 调用,没有速率限制。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多