Rhyme Dictionary из базы данных произношения CMU
Я ищу бесплатную или рифмованную базу данных с открытым исходным кодом.
Я нашел произношение CMU "база данных" и серию приложений, но я не могу понять их или выяснить, откуда поступают данные.
Мне нужен простой текстовый файл со словом и его фонемами.
Кто-нибудь здесь знает, где я найду один или где я начну выводить такой список из файлов CMU?
3 ответа
cmudict
Командный текст представляет собой текстовый файл, и его формат действительно прост. Во-первых, слово в списке. Тогда есть два пробела. Все, что следует за двумя пробелами, является произношением. Там, где слово может иметь два разных способа произнесения, вы увидите две записи для слова, как
word
word(1)
В начале файла они перечислили символы и знаки препинания. За символом следует английское написание названий символов без пробелов между ними. Затем следует разделитель двух пробелов и код арпабета. Поскольку вы ищете только рифмы, вам не нужно делать ничего особенного с разделом символов, так как вы никогда не будете искать рифму для ...ELLIPSIS
ARPAbet
Информация о том, как коды ARPAbet сопоставляются с IPA, приведена в википедии http://en.wikipedia.org/wiki/Arpabet и каждое сопоставление показывает примеры слов. Довольно легко увидеть, как они связаны друг с другом, и это может помочь вам понять, как читать коды ARPAbet, если вы знакомы с IPA.
Резюме
По сути, если вы уже нашли этот текст, вы уже получили то, что просили: базу данных слов и их произношения. Чтобы найти слова, которые рифмуются, вам нужно разобрать плоский файл в таблицу и выполнить запрос, чтобы найти слова, заканчивающиеся тем же кодом ARPAbet.
Общая Теория Делать вещи в вещи
Часть: Материал
- создать новую базу данных
- создать таблицу в базе данных с тремя полями: index, word, arpabet
- читать файл cmudict построчно
- для каждой строки разделите ее на две части, где находятся два последовательных пробела И
- увеличить счетчик индекса, затем вставить номер индекса, слово и код арпабета
Тогда ммм...
Как только вы поместите данные в любую базу данных, которую вы выберете, вы сможете использовать эту базу данных для поиска корреляции между кодами arpabet. Вы можете найти рифмы, созвучие, созвучие и другие мнемонические устройства. Было бы что-то вроде
Часть: вещь
- получить слово, которое вы хотите найти рифму для
- запросить базу данных для arpabet эквивалента слова
- разбить код arpabet на части, разбивая его везде, где есть пробел
- возьмите последний фрагмент кода и запросите в базе данных слова, чьи коды arpabet в конце соответствуют указанному фрагменту
- Делай модные вещи с рифмами
Ярлыки и спойлеры
Мне стало скучно, и я написал модуль 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
Опять же, оригинальное объяснение с "любовью" абсолютно приведет вас к идее рифмования. Однако, по пути вы, вероятно, столкнетесь с другими проблемами, чтобы рассмотреть. Вот хедз-ап:
- Некоторые слова имеют несколько произношений. В словаре CMU альтернативные произношения помечаются текстом
(1)
,(2)
и т. д. после слова как вGRADUATE(2)
, Если кто-то хочет стишок этих слов, вы должны решить, показывать ли рифмы ВСЕХ совпадающих произношений или предложить пользователю выбрать, какое произношение они действительно имели в виду. - Что вы делаете, когда в произношении есть два или более "1"? Выбрать первый? Выбрать последний? Если вы выберете последний, вы найдете больше рифм, но это не самый естественный выбор стресса.
- Что вы делаете, когда в произношении нет "1"? Это не случается много, но это случается, как:
ACCREDIT AH0 K R EH2 D AH0 T
а такжеAIKIN EY0 K IH0 N
, В этом случае я бы выбрал следующее лучшее напряжение (например, 2, 3, 4 и т. Д., Если 1 отсутствует). Если они все 0, у меня нет хорошего совета. - Некоторые произношения отсутствуют. Это отличное начало, но в нем нет всех слов или вариантов написания слов, которые вы могли бы пожелать. Правописание США предпочтительнее правописания Великобритании.
- Некоторые произношения не то, что вы ожидаете, и вы можете сократить. Например, есть произношение "или", которое звучит как "эр".
- Вы можете сравнить "рифмуемые фонемы" со снятыми отметками стресса. Это имеет значение только для слов, основное ударение которых не на последнем гласном (так что вы не видите проблему на примере "любовь").
Я сейчас активно работаю над чем-то подобным, используя общий подход, предложенный Plate, и расширяя его. Вот мой исходный код.Надеюсь, это поможет!
Вы всегда можете использовать http://www.rhymezone.com/ и искать слово, а затем помещать его совпадения в текстовый файл, если вы используете только небольшое демонстрационное подмножество. Если вы хотите полную базу данных слов. Вы можете подключить словарь к автоматизации пользовательского интерфейса zombieJS, а затем скрести слова и поместить их в свою собственную базу данных. Это позволит вам создать свою собственную базу данных рифм. Хотя, если честно, это довольно сложное дело для вашего первоначального запроса