Как я могу создать список слов, которые фонетически звучат одинаково, по одному входному слову?

Когда вы ошибаетесь в слове в Google (например, «яблоки»), он предлагает уже знакомое вам предложение «Вы имели в виду: яблоки».

Исключая способность Google угадывать ваши намерения на основе релевантности результатов поиска, как я могу составить список слов, которые звучат одинаково?

Слова не обязательно должны быть английскими, а также не должны существовать. Так, например, если я введу «дырка», я верну список, включающий такие слова, как: «целый», «хола», «шлюха», «роль», «моляр» и т. д.

Я предполагаю, что в Интернете может быть что-то, что может расширить этот список, но я ничего не смог найти. Если сайта нет и если это можно сделать с помощью Perl, есть ли модуль CPAN, который может помочь мне в этом?


person CheeseConQueso    schedule 01.02.2012    source источник
comment
Если вы можете разбить слова на фонемы, это становится наиболее распространенной проблемой подстрок. Однако разбить слова на фонемы — очень сложная задача.   -  person Flexo    schedule 02.02.2012


Ответы (2)


Вы можете начать с изучения модуля Text::Soundex. Это простой алгоритм, который отображает слова в 4-байтовые коды. Я давно получил Soundex от Sedgewick (ex Knuth), использовал его для генерации более длинных ключей (не усеченных) и предложил списки исправлений для 0 и 1-буквенных замен. Я применил это к большим базам данных переписи и почтовых данных.

person Erik Olson    schedule 01.02.2012

Если вы действительно ищете слова, которые звучат одинаково, а не просто поисковые подсказки — вы можете посмотреть на фонетические алгоритмы. Soundex и Metaphone/Double Metaphone — два очень распространенных, и для каждого из них существуют реализации на любом популярном языке.

Эти алгоритмы сокращают слово до «ключа», указывающего на его произношение. Если вы взяли корпус слов для начала и построили структуру данных, сопоставляющую эти ключи со словами, которые их оценивают, вы можете взять произвольную строку, оценить ее до ее «ключа», а затем найти другие слова, которые оцениваются так же. ключ в вашей структуре данных (возможно, хеш-таблица списков или что-то подобное).

Это не идеально, потому что вам нужно будет найти большой набор слов, чтобы заполнить ваш набор данных, но это сработает.

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

Надеюсь, это было полезно.

person acoffman    schedule 01.02.2012
comment
спасибо за руководство по Soundex... я действительно обнаружил, что это функция Oracle и PHP и, возможно, многих других языков. Я не понимаю данные, которые он возвращает. См. примеры здесь techonthenet.com/oracle/functions/soundex.php яблоки возвращает A142, а appplus также возвращает A142. Что означает A142? - person CheeseConQueso; 02.02.2012
comment
@CheeseConQueso Возвращаемая комбинация букв и цифр не обязательно имеет самостоятельный смысл - алгоритм сводит слова к этим ключам, поэтому два слова, которые оцениваются как один и тот же ключ, имеют одинаковое произношение. Вот почему для того, чтобы сделать то, что вы предлагаете, используя фонетический алгоритм, вам нужно создать доступное для поиска хранилище данных ключа -› (список слов, которые оцениваются по этому ключу), поэтому, когда вы получаете яблоки, вы запускаете его через свой алгоритм — получите A142, а затем найдите в своем хранилище данных слова, которые также оцениваются как A142. Эта помощь? - person acoffman; 02.02.2012
comment
о ... есть идеи, где найти таблицу soundex, которую я могу импортировать в таблицу в моей БД? Если нет, то какие ключевые слова я должен ввести в Google, чтобы найти больше информации? Спасибо за вашу помощь - person CheeseConQueso; 02.02.2012
comment
Это то, в чем я не уверен на 100%. Когда мы использовали его на работе, мы нашли несколько списков слов и словарей английского языка и построили собственное сопоставление. - person acoffman; 02.02.2012