![Как найти слова, которые находятся рядом с другими словами?](https://rvso.com/image/1419577/%D0%9A%D0%B0%D0%BA%20%D0%BD%D0%B0%D0%B9%D1%82%D0%B8%20%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D1%8F%D1%82%D1%81%D1%8F%20%D1%80%D1%8F%D0%B4%D0%BE%D0%BC%20%D1%81%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%BC%D0%B8%20%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D0%BC%D0%B8%3F%20.png)
Я собираюсь создать словарь, в котором пользователи смогут находить каждое слово, которое находится рядом друг с другом по произношению и букве слова.
Например, когда пользователь искалоколомой сайт возвращает другие слова, близкие к этому, напримеррядом,груша,дорогая,сзади,здесь
Как это сделать?
как этот сайт:рифмозона
решение1
Я думаю, что это терпимо сложно. Это раздел естественного языкового программирования (а не другой NLP, нейролингвистический Pap). Вам нужно уметь сопоставлять "here" и "hear" - поэтому вам нужно разбить элементы и сопоставить их с фонетическим эквивалентом (h-"ere" и h-"ere" для обоих). А некоторые написания имеют вариантную фонетику (cough, plough, through) или даже худшие омонимы (there, they're, their group), и они могут быть регионально разными (например, в Великобритании длинная или короткая "a" в garage, graph и glass). Когда вы создаете фонетические эквиваленты, они не всегда являются единственным числом.
Как только у вас появятся фонетические эквиваленты, вы можете использовать различные эвристики, чтобы минимизировать разницу между ними. Для поэзии вам, вероятно, придется чрезмерно подчеркнуть вес окончаний — рифмовка в основном зависит от окончаний слов. Вам также могут понадобиться аллитерационные ряды для поэзии — для благозвучной аллитерации, вероятно, понадобится другой вес.
Я бы присоединился к одному из бесплатных онлайн-университетских курсов по НЛП — их сейчас несколько. Гораздо лучше базируются на современных методах анализа языка. :)
решение2
Вы можете использовать сравнение строк одинаковой длины и допускать наличие одного (или двух) несовпадающих символов.
Однако, глядя на ваш сайт, я бы посоветовал сопоставить слова по их фонетическому представлению, а затем выполнить поиск по ним, рассматривая строки как массивы символов и начиная сравнение с конца.
Чтобы построить по вашему примеру: near -> \'nir\ pear -> \'per\ dear -> \'dir\ rear -> \'rir\ или \'rer\ here -> \'hir\
(Здесь я скопировал фонетическую запись из онлайн-словаря Merriam-Webster)
Боюсь, что сопоставление должно быть сделано в виде справочной таблицы и не может быть составлено, поскольку в английском языке не очень строгие правила произношения...
В любом случае, как только вы сопоставили свои слова, вы можете сравнить их последнюю фонему: в этом случае вам, возможно, захочется поискать слова, которые заканчиваются на «ir» (что исключит «pear» в данном случае).
Этот метод не выглядит особенно эффективным: если бы я мог использовать немного дискового пространства, я бы сохранил поисковые запросы для будущего использования: поэтому, когда во второй раз выполняется поиск всех слов, рифмующихся со словом «near», приложение просто загружает сохраненный поиск, поскольку словари обычно не развиваются слишком быстро.