Ребят дайте пожалуйста две базы слов русских и английских. В текстовом формате желательно уже в php массиве но не обязательно. Читал подобные темы люди писали "Ты спамер мы тебе не чего не дадим!", так вот я не спамер. Базы слов мне нужны для составления мнемоники вот собственно такую штуку делаю http://z95321ji.beget.tech/mnemonics/. Пока работает только с русским языком, там около 160,000 слов, я базу нашёл в интернёте не знаю где её взяли но там много не существующих слов типо "шш", скриншот: На изображении выше я нашёл только пару знакомых слов Думаю парсить википедию, только вот не знаю как сделать что бы в массиве не было повторяющихся элементов и ресурсов дохрена не жрало. В голову пришло только проверять циклом существование слова в массиве. А если слов будет около 200,000? Это же перед каждым добавлением элемента в массив надо будет проверять 200,000 элементов , это вообще нормально? Как сделать лучше? Может есть другой способ? Зарание благодарен. P.S. Если кому интересно код есть на github могу дать ссылку. P.P.S. Не работает с английским языком, будет ошибка.
Вам прямая дорога использовать базу данных, например MySQL Как альтернатива - почитайте wiki: https://ru.wikipedia.org/wiki/Двоичное_дерево
Не вижу смысла для статистических массивов использовать бызы данные типа mysql. Я файл положил и мне не надо излишне нагружать хостинг запросами к бд, сделал `$arr = require 'file.php'` и уменя уже есть массив $arr, и деревьев тут не надо данные потому как вида `['а', 'б', 'в'...]`. Или всё-таки mysql работает быстрее функции require? Как быстро mysql сделает выборку в 160,000 строк?
Решил я проблему удаления повторяющихся элементов из массива, использовал фукцию array_unique. В википедии получилось найти лишь 50000 уникальных слов. Жаль только попадаются такие недо слова как "фев" - я так понял это февраль. Вот такой регуляркой парсил слова Код (Text): /\b([а-яёА-ЯЁ]+)\b/ui , надо как то сделать что бы она не брала слова после которых стоит точка, к примеру есть строка "д.н.э." - до нашей эры, а регулярка думает что это слова и у меня в массиве проскальзывает такия фигня как "д", "н", "э".
Вам нужно выбрать 160000 строк в оперативку, или выбрать из них одну конкретную или несколько? При работе с файлом вы будете эту самую оперативку тратить нещадно. А БД вам будет почти бесплатно выборки выдавать.
@Fell-x27 Нужно выбрать все строки, а потом уже искать подходящие к числу введёному в форму это всё конечно на php. А строки ищатся по принципу телефонной клавиатуры число 1 = абв, 2 = гдеё и т.д. Ну как t9 режим в тефонах раньше был, потыкал по цыфрам и тебе предлагают слово. --- Добавлено --- Можно такое сделать с помощью mysql? --- Добавлено --- Я собственно нашёл вот такую задачу http://acm.timus.ru/problem.aspx?space=1&num=1002, как хорошо было бы это попробовать реализовать, может быть даже чему то новому но учился бы. Только я решил делать своё буквенное-цыфровое сопастовление, ещё с русским языком ну красивой формой аля bootstrap. Ну а так принцып тот же, там по подробнее расписано что и как должно работать, я так не смогу наверное объяснить.
Вы, просто-напросто, не знаете, как работает база данных. Не нужно выбирать из нее ВСЕ, чтобы потом сравнивать на пхп. Вы можете попросить у нее СРАЗУ нужное значение. "база, отдай мне строку, где в таком-то столбце есть вот такое вот слово, спасибо". И она вернет только то, что нужно. Ничего лишнего. Не хранить ничего в таком виде, а приводить к нему уже готовый текст? Или у вас на входе будет цифровая каша, из которой вам надо слово собрать как с тем же Т9? Тогда вам мало просто данные выбирать. Тут логика нужна хитрая.
Да цифровая каша, там скриншёт результатов работы в первом сообщение по числу 5252 мне собрала слова "мама" и "папа", а остальноя каша из букв вылезла потому как словарь с левого сайта скачал с кучай мусора. Ссылка вначале можно зайти какое-нибудь число ввести может что то соберёт. Это точно, но я не какой логики с базой не могу придумать так как я не чего не знаю о том какие мне слова нужны. Только если выбирать слова по длинне, хотя один хрен выборка огромная получается.
А я придумал. Храните в базе в одном столбце слово, в другом - цифровую кашу, посчитанную с него. Вот и все. А потом просите у базы "база, дай мне все слова, цифровая каша которых равна той, что ввел пользователь". И получите сразу список всех слов. Максимально быстро, ничего не высчитывая и не перебирая. Сразу результат. Единственное, что да, надо будет при записи слов в базу, для каждого из них посчитать "цифровой код". Но это надо сделать один раз, и, само по себе это крайне просто. Даже регулярки не нужны.
Лучше сразу делайте с базой. Лучше сразу делать как правильно, чтобы потом не переделывать. Там ничего сложного нет. Потратьте пару вечеров, разберитесь.
@Fell-x27 Ай, не получится мне прейдётся парсер останавливать потом всё заного начинать, я его демоном сделал он должен найти 500,000 слов или 2 часа проработать а потом сам умрёт. Один чёрт всё переделывать надо так как я ещё вчера скрипт написал, хотя там не много около 100 строк, думаю за 10 минут всё пирепишу
Ой брось, ну спарсил ты из итернетов полмильона слов. Ну так иди по ним в цикле, считай для каждого "цифровой код" и пиши их в базу. Ничего не надо выбрасывать, все результаты предыдущие в дело пойдут. И да, неужто в интернете нет словарей открытых? Чтоб прям бери и иди построчно, поглощай слова.