Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Как наиболее рационально подойти к разбиению очень большого текста на отдельные слова?

08.07.2020, 18:51. Показов 3413. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте!

Задумал написать на Визуальном бейсике программу, которая будет обрабатывать большие (ну очень большие!) тексты, разбивая их на отдельные слова. На ум приходит только такой подход к решению этой задачи:

1. В цикле проходим по всем словам текста, отправляя каждое из них во вложенный цикл.
2. Во вложенном цикле создаём 2 связанных между собой массива - массив (базу данных) всех найденных слов и массив счётчиков количества повторений для каждого слова.

3. Если найденное слово новое, тогда добавляем его в нашу базу данных со значением счётчика, равным единице.
Если найденное слово уже встречалось, тогда НЕ добавляем его в базу данных, но значение его счётчика увеличиваем на единицу.
Ну а уже в самом конце сортируем нашу базу данных (массив) по алфавиту.

Ахиллесова пята здесь это поиск слов в составляемой базе данных. На это уйдёт львиная часть времени.
Отсюда вопрос: можно ли как-нибудь оптимизировать этот процесс?
Мне на ум приходит, что можно попробовать вставлять в "базу данных" новые слова сразу в алфавитном порядке, а потом начинать поиск (но как?) с первой буквы слова-кандидата.

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

Пытался гуглить "VB6 разбить текст на отдельные слова", но там все ответы либо на VB.Net, либо вообще на других языках.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2020, 18:51
Ответы с готовыми решениями:

Как рационально подойти к сокращению и упрощению кода?
Добрый день! Прошу подсказать новичку как рационально подойти к сокращению и упрощению (приведение к компактности) в данном ниже...

Как наиболее рационально обратиться к элементам динамического массива через цикл For
Здравствуйте, подскажите пожалуйста, как наиболее рационально обратиться к элементам динамического массива через цикл For? Есть вот такой...

Как наиболее рационально проверять и устанавливать события из разных потоков? (про атомарность)
Привет! Догадываюсь, что события, точнее их хэндлы, созданные по средствам CreateEvent, не относятся к данным, операции над которыми могут...

49
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.07.2020, 18:58
Используй либо коллекцию (которая хранит ключи упорядоченно), либо хеш таблицу Dictionary.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
08.07.2020, 19:20  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Используй либо коллекцию (которая хранит ключи упорядоченно), либо хеш таблицу Dictionary.
Ну и скорость у вас!
Я даже не успел перечитать свой пост (для проверки), а ответ уже тут как тут!

Но всё-таки хотелось бы как-нибудь поподробнее

Про "хеш таблицу Dictionary" я вообще слышу первый раз в жизни, а вот с коллекцией... ну да, это интересный подход. А как добиться того, чтобы коллекция хранила ключи упорядоченно?
И ещё мне кажется, что массивы всё-таки работают быстрее чем коллекции, поскольку они не являются объектами, или нет?

Когда текст маленький, тогда, конечно, пофиг на скорость, но я собираюсь составить очень большой словарь компьютерных терминов. А для этого надо в эту "мясорубку" закидать очень много исходных текстовых файлов. Программа составит для себя массив (список) всех файлов в указанной папке и будет обрабатывать их по очереди, составляя один общий словарь.

Добавлено через 7 минут
Это я к тому, что исходный текст огромный-преогромный!
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.07.2020, 19:50
Цитата Сообщение от Power_Basic Посмотреть сообщение
А как добиться того, чтобы коллекция хранила ключи упорядоченно?
Она и хранит их упорядоченно. Выставляй в качестве ключа слово, а в качестве значения - счетчик. Коллекция - это красно-черное дерево.

Цитата Сообщение от Power_Basic Посмотреть сообщение
И ещё мне кажется, что массивы всё-таки работают быстрее чем коллекции, поскольку они не являются объектами, или нет?
А для чего тебе массивы? Тебе же нужен быстрый доступ по ключу.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Про "хеш таблицу Dictionary" я вообще слышу первый раз в жизни
Project->References->Microsoft Scripting Runtime. Обычно как раз словарь и используют для быстрого доступа по ключу.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
08.07.2020, 21:24  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Она и хранит их упорядоченно. Выставляй в качестве ключа слово, а в качестве значения - счетчик. Коллекция - это красно-черное дерево.
Честно говоря, я сначала подумал, что это какое-то "поэтическое" сравнение, которое вроде бы совсем не вяжется с тематекой форума
Но на всякий случай погуглил и, к своему удивлению, выяснил, что это "деревья поиска", ну и там вообще целая наука

Цитата Сообщение от The trick Посмотреть сообщение
А для чего тебе массивы? Тебе же нужен быстрый доступ по ключу.
Ну в принципе, да.

Цитата Сообщение от The trick Посмотреть сообщение
Project->References->Microsoft Scripting Runtime. Обычно как раз словарь и используют для быстрого доступа по ключу.
Спасибо, попробую разобраться.

А ещё вот такой вопрос. Может быть имеет смысл создать сразу несколько коллекций, - по одной на каждую букву? Это вроде бы должно существенно сократить время поиска. Ну а потом (уже в самом конце) их все объединить в одну общую и распечать в файл.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.07.2020, 21:41
Цитата Сообщение от Power_Basic Посмотреть сообщение
А ещё вот такой вопрос. Может быть имеет смысл создать сразу несколько коллекций, - по одной на каждую букву? Это вроде бы должно существенно сократить время поиска. Ну а потом (уже в самом конце) их все объединить в одну общую и распечать в файл.
Не стоит.
1
Эксперт по электронике
6846 / 3270 / 338
Регистрация: 28.10.2011
Сообщений: 12,773
Записей в блоге: 7
08.07.2020, 21:56
Цитата Сообщение от Power_Basic Посмотреть сообщение
2. Во вложенном цикле создаём 2 связанных между собой массива - массив (базу данных) всех найденных слов и массив счётчиков количества повторений для каждого слова.
Лучше один массив структур.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ахиллесова пята здесь это поиск слов в составляемой базе данных. На это уйдёт львиная часть времени.
Отсюда вопрос: можно ли как-нибудь оптимизировать этот процесс?
Как вариант ассоциативный массив основанный на красно-чёрном дереве или похожем алгоритме.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Мне на ум приходит, что можно попробовать вставлять в "базу данных" новые слова сразу в алфавитном порядке, а потом начинать поиск (но как?) с первой буквы слова-кандидата.
Можете создать массив букв с которых начинаются слова а в нем массив слов (массив массивов). Тогда быстрее будет поиск т. к. потребуется искать только в части слов (начинающихся с той же буквы) а не среди всех.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
09.07.2020, 00:25  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Не стоит.
Спасибо, понял.

Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic
2. Во вложенном цикле создаём 2 связанных между собой массива - массив (базу данных) всех найденных слов и массив счётчиков количества повторений для каждого слова.
Лучше один массив структур.
Ну да, пожалуй так оно логичнее, да и поаккуратнее будет выглядеть общий код относительно кода с двумя отдельными связанными массивами.

Наверно только на практике можно будет выяснить, что работает быстрее - коллекция или массив.

Цитата Сообщение от locm Посмотреть сообщение
Как вариант ассоциативный массив основанный на красно-чёрном дереве или похожем алгоритме.
Ну нет, нырять в такие глубины теории прямо сейчас я точно не готов

Не по теме:

На самом деле, это тот случай, когда мне нужен именно результат, а не глубокие познания :)
И даже не столько программа нужна, сколько большая база компьютерных и "около-компьютерных" слов и терминов.

Как вы знаете, у меня уже написана и превосходно (тьфу-тьфу-тьфу) работает программа по озвучиванию текстов. И как раз недавно мне здесь на форуме порекомендовали очень полезную книгу:
Объём свободной памяти ОЗУ?
Ну вот и захотелось её озвучить и слушать. Но проблема в том, что она в формате PDF, и ни в каком другом формате мне её найти не удалось :(

Пришлось использовать сразу несколько программ для распознавания текста. Почему несколько? Да потому что у них у всех свои "косяки", для коррекции которых как раз и нужен большой словарь.
Вроде бы пустяк, но во всей сети найти невозможно :(
Нет, есть много толковых словарей с объяснением компьютерных терминов. А простой базы слов нету :(

Пребывая в поисках, обнаружил несколько запросов такого же содержания. А вразумительный ответ нашёл только один: "вот тебе ссылка, скачивай оттуда кучу словарей, потом пропарсишь и сделаешь себе то, что хочешь".
Ну вот я и следую этому совету волей-неволей :)



Цитата Сообщение от locm Посмотреть сообщение
Можете создать массив букв с которых начинаются слова а в нем массив слов (массив массивов). Тогда быстрее будет поиск т. к. потребуется искать только в части слов (начинающихся с той же буквы) а не среди всех.
Тоже интересный вариант. Что-то вроде картотеки
Пожалуй, при таком подходе удобнее будет работать, чем, как я изначально задумывал, создавать много (для каждой буквы) самостоятельных массивов.

Но всё-таки сейчас начну с коллекций, потому что хотя бы просто хочется попробовать, насколько они могут конкурировать в скорости с массивами. И если выигрыш в скорости будет невелик, тогда, да, вернусь к варианту с "картотекой"
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.07.2020, 05:42
Такая дискуссия, будто счет будет идти на многие миллионы!
Всего английских слов около полмиллиона. Из них компьютерной тематики сколько наберётся?
Я как то делал программу, которая собирала словарный запас скажем Толстого, и на его основе генерировала свои тексты.
Сборка словаря, а это такая штука, где каждому слову соответствует своя пара. например слово очень используется со словами:
очень = раздражать,|близко|приближающегося|удобн ая
в свою очередь близко
близко = к|от
ну и так далее.
В общем такой словарь создаётся скажем из "Войны и мир" минут за 4-5. в MAP. А потом новый текст создаётся уже за секунду из готовой map.
Т.е. доступ в таком объёме слов комп делает мгновенно. Слов то не чисел, существует в мире на так много...
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
09.07.2020, 09:52
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну нет, нырять в такие глубины теории прямо сейчас я точно не готов
Коллекция как раз и является ассоциативным массивом основанном на красно-черном дереве.

Цитата Сообщение от Power_Basic Посмотреть сообщение
что работает быстрее - коллекция или массив.
Обычный массив тут вообще не нужен.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
09.07.2020, 16:06  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Такая дискуссия, будто счет будет идти на многие миллионы!
Боюсь что именно многие миллионы

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Всего английских слов около полмиллиона. Из них компьютерной тематики сколько наберётся?
Иллюзия!
Ну да, навскидку-то именно так оно и выглядит.

Как сказал сатирик про великий и могучий русский мат, "Слов мало, слов всего пяток, зато какие комбинации!"

Вот так и здесь, "склеивая" отдельные слова в различных сочетаниях, компьютерное словообразование, увы, почти безгранично.

Ну вот самые длинные термины из упомянутой выше книги:

ConvertSecurityDescriptorToStringSecurit yDescriptor
ConvertStringSecurityDescriptorToSecurit yDescriptor
MmAllocateContiguousMemorySpecityCacheNo de
KiDynamicHeteroCpuPolicyImportantPriorit y
PoFxIssueComponentPerfStateChangeMultipl e
KiDynamicHeteroCpuPolicyImportantShort
SystemCombinePhysicalMemoryInformation
IoPagingWriteLowPriorityBumpedCount
ScPerformPageCombiinennervicelmages
CLLSDDAppCicationActivttionMtntgee
IoPagingReadLowPriorityBumpedCount
JibOObectCpuRateeoiOroiloniorattio
SetFileOmppeetimnNotificitinnMmdes
KeRevertToUserGroupAffinityThread
KiDynamicHeteroCpuPolicyImportant
SepCachedHandlesEntryBnoIsolation
И да, некоторые "слова" здесь написаны с ошибками, но это так их OCR распознал. Его ругайте, не меня
Ну собственно-то, и весь замысел этого "мероприятия" состоит в том, что в программу можно загрузить свой словарь, ну и тогда она, возможно, слегка поумнеет

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я как то делал программу, которая собирала словарный запас скажем Толстого, и на его основе генерировала свои тексты.
С Толстым проще
Как это ни смешно звучит, но у него словарный запас "беднее" чем, например, у библиотеки MSDN
Там же все многочисленные параметры будут восприниматься компьютером, как отдельные самостоятельные термины. А их там "склевают", как хотят, в любых сочетаниях.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Слов то не чисел, существует в мире на так много...
Согласен, отдельных, "нормальных" слов не так уж и много

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Сборка словаря, а это такая штука, где каждому слову соответствует своя пара. например слово очень используется со словами:
очень = раздражать,|близко|приближающегося|удобн ая
в свою очередь близко
близко = к|от
ну и так далее.
На самом деле, мне сейчас тоже хочется сделать для себя такой словарь. Как выяснилось, OCR и с русскими словами тоже иногда косячит.

Цитата Сообщение от The trick Посмотреть сообщение
Коллекция как раз и является ассоциативным массивом основанном на красно-черном дереве.
Я вчера немного почитал про коллекции и вспомнил, почему я отказался от них ещё с самого начала. Они же на Вариантах построены, а их все ругают за относительную медлительность и относительную прожорливость в отношении памяти.
Но с ними, да, удобнее работать чем с массивами, и я обязательно устрою между ними "соревнование"

А вот такой ещё вопрос.
Вот допустим, уже у меня готова отсортированная коллекция. Как мне её сбросить на диск в виде текстового файла?
С массивом это легко, а здесь как?

Цитата Сообщение от The trick Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
что работает быстрее - коллекция или массив.
Обычный массив тут вообще не нужен.
Нет, ну здесь уже мне хочется отойти немного от практики в область теории и выяснить для себя на будущее, действительно ли коллекции намного медлительнее чем массивы или нет. Если выяснится, что они примерно соизмеримы, ну тогда и буду их постоянно использовать в своей дальнейшей практике.


Цитата Сообщение от locm Посмотреть сообщение
Можете создать массив букв с которых начинаются слова а в нем массив слов (массив массивов). Тогда быстрее будет поиск т. к. потребуется искать только в части слов (начинающихся с той же буквы) а не среди всех.
Я немного поразмышлял на эту тему. Получается, что "внешний" массив будет содержать "внутренние" массивы тоже в виде Вариантов, да? А как это повлияет на общую скорость?


Цитата Сообщение от Power_Basic Посмотреть сообщение
Цитата Сообщение от locm Посмотреть сообщение
Лучше один массив структур.
Ну да, пожалуй так оно логичнее, да и поаккуратнее будет выглядеть общий код относительно кода с двумя отдельными связанными массивами.
Нет, всё-таки я вспомнил, почему с самого начала отказался от структур. Там же нельзя использовать динамические строки и надо уже с самого начала объявлять размер каждой строки. А какой размер мне выбрать?
Вот самое длинное слово из процитированных выше состоит из 51 буквы. А есть же очень много коротких слов. Но и для них тогда тоже придётся резервировать столько же байтов памяти. А словарик-то не маленький
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
09.07.2020, 17:02
Цитата Сообщение от Power_Basic Посмотреть сообщение
Я вчера немного почитал про коллекции и вспомнил, почему я отказался от них ещё с самого начала. Они же на Вариантах построены, а их все ругают за относительную медлительность и относительную прожорливость в отношении памяти.
На текущей задаче это практически не будет иметь значения. Для программы которая отработает 1 раз (парсинг текста) это неважно. Важно именно быстрый доступ по ключу. Еще быстрее будет работать хеш таблица.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Вот допустим, уже у меня готова отсортированная коллекция. Как мне её сбросить на диск в виде текстового файла?
С массивом это легко, а здесь как?
Проходишь по коллекции и сохраняешь пары ключ значение. Формат VB6 коллекции описан тут.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Нет, ну здесь уже мне хочется отойти немного от практики в область теории и выяснить для себя на будущее, действительно ли коллекции намного медлительнее чем массивы или нет. Если выяснится, что они примерно соизмеримы, ну тогда и буду их постоянно использовать в своей дальнейшей практике.
Да здесь вообще массивы не нужны. Я не понимаю при чем тут массивы вообще? У тебя ассоциативный массив, что другое. Конечно эту задачу можно решить и на обычных массивах, но так во-первых никто не делает (т.к. очень неэффективно), во-вторых задача выглядит как доступ к значению по ключу. При чем тут обычный массив?

Цитата Сообщение от Power_Basic Посмотреть сообщение
Я немного поразмышлял на эту тему. Получается, что "внешний" массив будет содержать "внутренние" массивы тоже в виде Вариантов, да? А как это повлияет на общую скорость?
Ну это тоже самое дерево. Только зачем останавливаться на одном уровне? В плане потребления памяти это конечно не очень эффективно, зато в скорости доступа очень быстро.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Нет, всё-таки я вспомнил, почему с самого начала отказался от структур. Там же нельзя использовать динамические строки и надо уже с самого начала объявлять размер каждой строки. А какой размер мне выбрать?
Вот самое длинное слово из процитированных выше состоит из 51 буквы. А есть же очень много коротких слов. Но и для них тогда тоже придётся резервировать столько же байтов памяти. А словарик-то не маленький
Почему нельзя использовать динамические строки? Можно.
1
Эксперт по электронике
6846 / 3270 / 338
Регистрация: 28.10.2011
Сообщений: 12,773
Записей в блоге: 7
09.07.2020, 17:55
Цитата Сообщение от Power_Basic Посмотреть сообщение
Боюсь что именно многие миллионы
Тогда нужно хорошо подумать над требуемым объемом памяти. Если допустим будет 10 миллионов слов со средней длиной 20 символов это потребует 200 МБ в случае 1 байт на символ и без учета накладных расходов. В реальности требуемый объем памяти может превысить 2 ГБ, что больше допустимого для x86 процесса и стоит задуматься о создании x64 приложения. В компе должно быть достаточно памяти.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Вот допустим, уже у меня готова отсортированная коллекция.
Возможно ее не получится отсортировать, т. к. построена на основе дерева, а не списка или массива.

Цитата Сообщение от Power_Basic Посмотреть сообщение
действительно ли коллекции намного медлительнее чем массивы или нет.
Это зависит от задачи. В данном случае массив вероятнее будет более медленным.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Я немного поразмышлял на эту тему. Получается, что "внешний" массив будет содержать "внутренние" массивы тоже в виде Вариантов, да?
Это зависит от формата массива массивов в VB. По нормальному должны быть конкретные типы, а не вариант.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.07.2020, 18:14
Цитата Сообщение от Power_Basic Посмотреть сообщение
ConvertSecurityDescriptorToStringSecurit yDescriptor
Ну да, согласен, тем более, что ещё и так:

ConvertSecurityDescriptorToStringSecurit yDescriptorA
ConvertSecurityDescriptorToStringSecurit yDescriptorW

Но всё равно, я не понимаю, когда и в чем может помочь список всех этих слов? Для проверки правописания всё же более пригодно разбить их на составляющие + алгоритмы нечеткого поиска?

Вспоминаю, что у меня где то была MSDN для VS 6 версии, на 2-х вроде CD дисках, до всеобщего Интернета её на дисках распространяли. Там наверняка большая часть таких слов есть и написана правильно.
2
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
10.07.2020, 19:36  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
На текущей задаче это практически не будет иметь значения. Для программы которая отработает 1 раз (парсинг текста) это неважно.
Ну всё-таки не один раз. Предполагается, что я буду время от времени подкидывать в эту "мясорубку" всё новые и новые тексты. Накопленная база слов будет неуклонно расти, и поиск по ней будет отнимать у процессора всё больше и больше времени.

Цитата Сообщение от The trick Посмотреть сообщение
Проходишь по коллекции и сохраняешь пары ключ значение. Формат VB6 коллекции описан тут.
Спасибо, попробую разобраться.

Цитата Сообщение от The trick Посмотреть сообщение
Ну это тоже самое дерево. Только зачем останавливаться на одном уровне? В плане потребления памяти это конечно не очень эффективно, зато в скорости доступа очень быстро.
Но память же тоже имеет важное значение. Из своих восьми гигов я могу использовать только три.

Вы недавно говорили, что объём доступной памяти можно как-то расширить с помощью WINAPI. Я тогда не особо вникал, потому что не было практической необходимости. Там не слишком сложно для продвинутой домохозяйки?

Цитата Сообщение от The trick Посмотреть сообщение
Цитата Сообщение от Power_Basic
Нет, всё-таки я вспомнил, почему с самого начала отказался от структур. Там же нельзя использовать динамические строки и надо уже с самого начала объявлять размер каждой строки.
Почему нельзя использовать динамические строки? Можно.
Ну тогда это существенное преимущество Визуального бейсика перед PowerBasic'ом, в котором такое невозможно:

PowerBASIC's User-Defined Type is similar to a C struct or Pascal record. The elements of a User-Defined Type may include any of PowerBASIC's data types, with the exception of dynamic (variable-length) strings, field strings, and arrays of dynamic strings.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
10.07.2020, 20:06
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну всё-таки не один раз. Предполагается, что я буду время от времени подкидывать в эту "мясорубку" всё новые и новые тексты. Накопленная база слов будет неуклонно расти, и поиск по ней будет отнимать у процессора всё больше и больше времени.
Это не имеет значения. Разбор 1000000 слов и разбор 1000020 слов, по времени будет практически идентичен.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Но память же тоже имеет важное значение. Из своих восьми гигов я могу использовать только три.
Ну тут компромисс, либо скорость, либо память. Самый оптимальный вариант в этом случае - хеш таблица.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Вы недавно говорили, что объём доступной памяти можно как-то расширить с помощью WINAPI. Я тогда не особо вникал, потому что не было практической необходимости. Там не слишком сложно для продвинутой домохозяйки?
Да много как можно сделать. Только для текущей задачи это не имеет значения - объемы данных не те.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
10.07.2020, 20:13  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Тогда нужно хорошо подумать над требуемым объемом памяти. Если допустим будет 10 миллионов слов со средней длиной 20 символов это потребует 200 МБ в случае 1 байт на символ и без учета накладных расходов. В реальности требуемый объем памяти может превысить 2 ГБ, что больше допустимого для x86 процесса и стоит задуматься о создании x64 приложения. В компе должно быть достаточно памяти.
К сожалению, создание x64 приложений мне пока не по зубам, а словарь нужен уже прямо сегодня, а лучше бы даже ещё вчера

Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic
Вот допустим, уже у меня готова отсортированная коллекция.
Возможно ее не получится отсортировать, т. к. построена на основе дерева, а не списка или массива.
Вот это сюрприз!
А как же тогда слова-то по алфавиту расставить в самом концу?

Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic
действительно ли коллекции намного медлительнее чем массивы или нет.
Это зависит от задачи. В данном случае массив вероятнее будет более медленным.
Это вы сейчас сравниваете поиск по ключу в коллекции с проходом массива обычным циклом FOR... NEXT?

Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic
Я немного поразмышлял на эту тему. Получается, что "внешний" массив будет содержать "внутренние" массивы тоже в виде Вариантов, да?
Это зависит от формата массива массивов в VB. По нормальному должны быть конкретные типы, а не вариант.
Ну значит придётся мне снова у The trick'а консультироваться
Как я понял, он здесь главный специалист по VB.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
10.07.2020, 20:27
Power_Basic, посмотри эту простейшую реализацию хеш-таблицы.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
10.07.2020, 20:34  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Но всё равно, я не понимаю, когда и в чем может помочь список всех этих слов? Для проверки правописания всё же более пригодно разбить их на составляющие + алгоритмы нечеткого поиска?
Ну вот на составляющие-то и буду по словарю разбивать
И даже уже придумал приблизительный алгоритм, как именно это будет происходить
А если какое-то "склеенное" слово, заложенное в словарь, встретится целиком в распознаваемом тексте, ну тогда даже ещё лучше. Есть неплохой шанс, что OCR, опираясь на пользовательский словарь, правильно его распознает, и дальнейшие пляски с бубном вокруг этого сложного слова уже не потребуются.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Вспоминаю, что у меня где то была MSDN для VS 6 версии, на 2-х вроде CD дисках, до всеобщего Интернета её на дисках распространяли. Там наверняка большая часть таких слов есть и написана правильно.
Во, спасибо за идею!
У меня она тоже есть (полтора гига на диске занимает). Вот её-то родимую и буду парсить
А то ведь я уже собирался скачивать WGET'ом всю современную
Ну или хотя бы ту ёё часть, которая уместится на всех моих носителях
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
10.07.2020, 20:41
Цитата Сообщение от Power_Basic Посмотреть сообщение
Вот её-то родимую и буду парсит
Используй dumpbin и просто перечисляй все экспортированные функции из нужных либ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2020, 20:41
Помогаю со студенческими работами здесь

Что делать с многими файлами большого и не очень текста, а точнее как бы по быстрее его загружать под Windows XP !?
Ситуация такая: ПК с WinXP Pro (x86) и 2ГБ оперативки. Есть много различных текстов. Я мог бы их отправить в doc, docx но тогда нужно...

Разбиение текста на отдельные слова и символы
Необходимо разбить текст, на отдельные символы и слова. К примеру, есть текстовый файл с кодом какой то небольшой программы на с#, его...

Вытащить из текста все отдельные слова
Задача в том, чтобы вытащить из текстового файла слова и отсортировать их по частоте встречаемости. Вторую часть программы могу сделать:)...

Парсинг текста на отдельные символы или слова
Есть вот такой текст 1024,32,"Agree",2,4,0,176,0,1,,2013-02-13 01:49:36,2013-02-13...

Объединить функции selectDate(), setPrev() и setNext() в одну наиболее рационально
<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=windows-1251"> <TITLE>Календарь</TITLE> <STYLE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru