来自CMU发音数据库的押韵词典

Kev*_*vin 7 dictionary phoneme

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

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

我需要一个带有单词及其音素的简单文本文件.

这里有人知道我在哪里找到一个或我从哪里开始从CMU文件中获取这样的列表?

Kas*_*tor 5

cmudict

cmudict是一个文本文件,它的格式非常简单.首先,列出这个词.然后,有两个空格.两个空格之后的一切都是发音.如果一个单词可能有两种不同的说话方式,你会看到两个单词的条目

word
word(1)
Run Code Online (Sandbox Code Playgroud)

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

ARPAbet

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

摘要

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

做物的一般理论

部分:东西

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

然后嗯......

一旦将数据输入到您选择的任何类型的数据库中,您就可以使用该数据库查找arpabet代码之间的相关性.你可以找到押韵,灵犀,共鸣和其他助记设备.它会像是一样

部分:事情

  1. 得到一个你想要找到押韵的词
  2. 在数据库中查询与该单词等效的arpabet
  3. 通过在有空间的地方拆分arpabet代码将其拆分成碎片
  4. 取最后一段代码,并在数据库中查询其arpabet代码结束与所述片段匹配的单词
  5. 用押韵来做奇特的事

快捷方式和剧透

我感到无聊并编写了一个Node.js模块,其中包含上面列出的"Part:Stuff".如果您已在计算机上安装了Node.js,则可以通过运行npm install cmudict-to-sqlite参见https://npmjs.org/package/cmudict-to-sqlite获取自述文件来获取该模块,或者只需在模块中查找文档.


Pla*_*ate 5

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

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

您可以这样做:

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

LOVE  L AH1 V
Run Code Online (Sandbox Code Playgroud)

这就是说这个词的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
Run Code Online (Sandbox Code Playgroud)

押韵 wooooods!

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

存储韵律数据的假设 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"}
Run Code Online (Sandbox Code Playgroud)

... ETC

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

我也有一些运气将原始发音以不同的“完整”格式存储在数据库中(发音的正向和反向字符串,有重音标记和没有重音标记等),但没有“切碎”成特定的片段,例如押韵- 音素列。

陷阱

再说一遍,最初的“爱”解释绝对会让你陷入押韵的境地。然而,在此过程中您可能会遇到其他需要考虑的问题。这里有一个注意事项:

  1. 有些单词有多种发音。在 CMU 词典中,替代发音在 中的单词后面标有(1)(2)等文本GRADUATE(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”示例中看不到问题)。