За последние 24 часа нас посетили 22494 программиста и 1133 робота. Сейчас ищут 775 программистов ...

Бызы слов русских и английских

Тема в разделе "PHP для новичков", создана пользователем Васяня, 5 дек 2016.

  1. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Ребят дайте пожалуйста две базы слов русских и английских. В текстовом формате желательно уже в php массиве но не обязательно.

    Читал подобные темы люди писали "Ты спамер мы тебе не чего не дадим!", так вот я не спамер. Базы слов мне нужны для составления мнемоники вот собственно такую штуку делаю http://z95321ji.beget.tech/mnemonics/. Пока работает только с русским языком, там около 160,000 слов, я базу нашёл в интернёте не знаю где её взяли но там много не существующих слов типо "шш", скриншот:
    [​IMG]
    На изображении выше я нашёл только пару знакомых слов :D

    Думаю парсить википедию, только вот не знаю как сделать что бы в массиве не было повторяющихся элементов и ресурсов дохрена не жрало. В голову пришло только проверять циклом существование слова в массиве. А если слов будет около 200,000? Это же перед каждым добавлением элемента в массив надо будет проверять 200,000 элементов :cool:, это вообще нормально? Как сделать лучше? Может есть другой способ?

    Зарание благодарен.

    P.S. Если кому интересно код есть на github могу дать ссылку.
    P.P.S. Не работает с английским языком, будет ошибка.
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
  3. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Не вижу смысла для статистических массивов использовать бызы данные типа mysql. Я файл положил и мне не надо излишне нагружать хостинг запросами к бд, сделал `$arr = require 'file.php'` и уменя уже есть массив $arr, и деревьев тут не надо данные потому как вида `['а', 'б', 'в'...]`.

    Или всё-таки mysql работает быстрее функции require? Как быстро mysql сделает выборку в 160,000 строк?
     
  4. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Решил я проблему удаления повторяющихся элементов из массива, использовал фукцию array_unique. В википедии получилось найти лишь 50000 уникальных слов. Жаль только попадаются такие недо слова как "фев" - я так понял это февраль.

    Вот такой регуляркой парсил слова
    Код (Text):
    1. /\b([а-яёА-ЯЁ]+)\b/ui
    , надо как то сделать что бы она не брала слова после которых стоит точка, к примеру есть строка "д.н.э." - до нашей эры, а регулярка думает что это слова и у меня в массиве проскальзывает такия фигня как "д", "н", "э".
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Вам нужно выбрать 160000 строк в оперативку, или выбрать из них одну конкретную или несколько? При работе с файлом вы будете эту самую оперативку тратить нещадно. А БД вам будет почти бесплатно выборки выдавать.
     
  6. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @Fell-x27 Нужно выбрать все строки, а потом уже искать подходящие к числу введёному в форму это всё конечно на php. А строки ищатся по принципу телефонной клавиатуры число 1 = абв, 2 = гдеё и т.д. Ну как t9 режим в тефонах раньше был, потыкал по цыфрам и тебе предлагают слово.
    --- Добавлено ---
    Можно такое сделать с помощью mysql?
    --- Добавлено ---
    Я собственно нашёл вот такую задачу http://acm.timus.ru/problem.aspx?space=1&num=1002, как хорошо было бы это попробовать реализовать, может быть даже чему то новому но учился бы. Только я решил делать своё буквенное-цыфровое сопастовление, ещё с русским языком ну красивой формой аля bootstrap. Ну а так принцып тот же, там по подробнее расписано что и как должно работать, я так не смогу наверное объяснить.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Вы, просто-напросто, не знаете, как работает база данных. Не нужно выбирать из нее ВСЕ, чтобы потом сравнивать на пхп. Вы можете попросить у нее СРАЗУ нужное значение. "база, отдай мне строку, где в таком-то столбце есть вот такое вот слово, спасибо". И она вернет только то, что нужно. Ничего лишнего.
    Не хранить ничего в таком виде, а приводить к нему уже готовый текст? Или у вас на входе будет цифровая каша, из которой вам надо слово собрать как с тем же Т9? Тогда вам мало просто данные выбирать. Тут логика нужна хитрая.
     
  8. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Да цифровая каша, там скриншёт результатов работы в первом сообщение по числу 5252 мне собрала слова "мама" и "папа", а остальноя каша из букв вылезла потому как словарь с левого сайта скачал с кучай мусора. Ссылка вначале можно зайти какое-нибудь число ввести может что то соберёт.

    Это точно, но я не какой логики с базой не могу придумать так как я не чего не знаю о том какие мне слова нужны. Только если выбирать слова по длинне, хотя один хрен выборка огромная получается.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А я придумал. Храните в базе в одном столбце слово, в другом - цифровую кашу, посчитанную с него. Вот и все. А потом просите у базы "база, дай мне все слова, цифровая каша которых равна той, что ввел пользователь". И получите сразу список всех слов. Максимально быстро, ничего не высчитывая и не перебирая. Сразу результат.

    Единственное, что да, надо будет при записи слов в базу, для каждого из них посчитать "цифровой код". Но это надо сделать один раз, и, само по себе это крайне просто. Даже регулярки не нужны.
     
  10. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @Fell-x27 Спасибо за совет, как нособираю достаточно слов из сети обязательно их в базу залью.
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Лучше сразу делайте с базой. Лучше сразу делать как правильно, чтобы потом не переделывать. Там ничего сложного нет. Потратьте пару вечеров, разберитесь.
     
  12. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @Fell-x27 Ай, не получится мне прейдётся парсер останавливать потом всё заного начинать, я его демоном сделал он должен найти 500,000 слов или 2 часа проработать а потом сам умрёт. Один чёрт всё переделывать надо так как я ещё вчера скрипт написал, хотя там не много около 100 строк, думаю за 10 минут всё пирепишу ;)
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ой брось, ну спарсил ты из итернетов полмильона слов. Ну так иди по ним в цикле, считай для каждого "цифровой код" и пиши их в базу. Ничего не надо выбрасывать, все результаты предыдущие в дело пойдут. И да, неужто в интернете нет словарей открытых? Чтоб прям бери и иди построчно, поглощай слова.