Rhyme Dictionary из базы данных произношения CMU

Я ищу бесплатную или рифмованную базу данных с открытым исходным кодом.

Я нашел произношение CMU "база данных" и серию приложений, но я не могу понять их или выяснить, откуда поступают данные.

Мне нужен простой текстовый файл со словом и его фонемами.

Кто-нибудь здесь знает, где я найду один или где я начну выводить такой список из файлов CMU?

3 ответа

cmudict

Командный текст представляет собой текстовый файл, и его формат действительно прост. Во-первых, слово в списке. Тогда есть два пробела. Все, что следует за двумя пробелами, является произношением. Там, где слово может иметь два разных способа произнесения, вы увидите две записи для слова, как

word
word(1)

В начале файла они перечислили символы и знаки препинания. За символом следует английское написание названий символов без пробелов между ними. Затем следует разделитель двух пробелов и код арпабета. Поскольку вы ищете только рифмы, вам не нужно делать ничего особенного с разделом символов, так как вы никогда не будете искать рифму для ...ELLIPSIS

ARPAbet

Информация о том, как коды ARPAbet сопоставляются с IPA, приведена в википедии http://en.wikipedia.org/wiki/Arpabet и каждое сопоставление показывает примеры слов. Довольно легко увидеть, как они связаны друг с другом, и это может помочь вам понять, как читать коды ARPAbet, если вы знакомы с IPA.

Резюме

По сути, если вы уже нашли этот текст, вы уже получили то, что просили: базу данных слов и их произношения. Чтобы найти слова, которые рифмуются, вам нужно разобрать плоский файл в таблицу и выполнить запрос, чтобы найти слова, заканчивающиеся тем же кодом ARPAbet.

Общая Теория Делать вещи в вещи

Часть: Материал

  1. создать новую базу данных
  2. создать таблицу в базе данных с тремя полями: index, word, arpabet
  3. читать файл cmudict построчно
  4. для каждой строки разделите ее на две части, где находятся два последовательных пробела И
  5. увеличить счетчик индекса, затем вставить номер индекса, слово и код арпабета

Тогда ммм...

Как только вы поместите данные в любую базу данных, которую вы выберете, вы сможете использовать эту базу данных для поиска корреляции между кодами 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 для README или просто посмотрите в модуле документы.

Rhyme Logic с использованием словаря произношения CMU

ХОРОШО. Предположим, вы хотите использовать данные словаря произношения CMU (файл примера: cmudict-0.7b), чтобы составить список всех слов, которые рифмуются с "LOVE".

Вот как вы можете это сделать:

Во-первых, вам нужно выучить произношение "ЛЮБОВЬ". Вы найдете эту строку в словаре, где "LOVE" и "L AH1 V" разделены двумя пробелами:

LOVE  L AH1 V

Это говорит о том, что слово LOVE произносится как L AH1 V,

Затем найдите гласную фонему с первичным ударением. Другими словами, ищите число "1" в этом произношении. Текст непосредственно слева от 1 является гласным звуком, который имеет первичное ударение (AH). Этот текст и все, что справа от него, являются вашими "рифмованными фонемами" (из-за отсутствия лучшего термина). Таким образом, рифмы фонемы для любви 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

Это также пригодится, если вы планируете напечатать словарь, в котором все похожие по звучанию слова сгруппированы вместе.

Есть, конечно, множество других способов хранения / поиска данных различных компромиссов, но, надеюсь, это поможет вам начать.

Мне также посчастливилось сохранить необработанное произношение в базе данных в различных "полных" форматах (прямые и обратные строки произношения, с метками напряжения и без меток напряжения и т. Д.), Но не "нарезать" на отдельные фрагменты, такие как рифма. колонка

Gotchas

Опять же, оригинальное объяснение с "любовью" абсолютно приведет вас к идее рифмования. Однако, по пути вы, вероятно, столкнетесь с другими проблемами, чтобы рассмотреть. Вот хедз-ап:

  1. Некоторые слова имеют несколько произношений. В словаре CMU альтернативные произношения помечаются текстом (1), (2)и т. д. после слова как в GRADUATE(2), Если кто-то хочет стишок этих слов, вы должны решить, показывать ли рифмы ВСЕХ совпадающих произношений или предложить пользователю выбрать, какое произношение они действительно имели в виду.
  2. Что вы делаете, когда в произношении есть два или более "1"? Выбрать первый? Выбрать последний? Если вы выберете последний, вы найдете больше рифм, но это не самый естественный выбор стресса.
  3. Что вы делаете, когда в произношении нет "1"? Это не случается много, но это случается, как: ACCREDIT AH0 K R EH2 D AH0 T а также AIKIN EY0 K IH0 N, В этом случае я бы выбрал следующее лучшее напряжение (например, 2, 3, 4 и т. Д., Если 1 отсутствует). Если они все 0, у меня нет хорошего совета.
  4. Некоторые произношения отсутствуют. Это отличное начало, но в нем нет всех слов или вариантов написания слов, которые вы могли бы пожелать. Правописание США предпочтительнее правописания Великобритании.
  5. Некоторые произношения не то, что вы ожидаете, и вы можете сократить. Например, есть произношение "или", которое звучит как "эр".
  6. Вы можете сравнить "рифмуемые фонемы" со снятыми отметками стресса. Это имеет значение только для слов, основное ударение которых не на последнем гласном (так что вы не видите проблему на примере "любовь").

Я сейчас активно работаю над чем-то подобным, используя общий подход, предложенный Plate, и расширяя его. Вот мой исходный код.Надеюсь, это поможет!

Вы всегда можете использовать http://www.rhymezone.com/ и искать слово, а затем помещать его совпадения в текстовый файл, если вы используете только небольшое демонстрационное подмножество. Если вы хотите полную базу данных слов. Вы можете подключить словарь к автоматизации пользовательского интерфейса zombieJS, а затем скрести слова и поместить их в свою собственную базу данных. Это позволит вам создать свою собственную базу данных рифм. Хотя, если честно, это довольно сложное дело для вашего первоначального запроса

Другие вопросы по тегам