|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|
Как наиболее рационально подойти к разбиению очень большого текста на отдельные слова?08.07.2020, 18:51. Показов 3864. Ответов 49
Метки нет (Все метки)
Всем здравствуйте!
Задумал написать на Визуальном бейсике программу, которая будет обрабатывать большие (ну очень большие!) тексты, разбивая их на отдельные слова. На ум приходит только такой подход к решению этой задачи: 1. В цикле проходим по всем словам текста, отправляя каждое из них во вложенный цикл. 2. Во вложенном цикле создаём 2 связанных между собой массива - массив (базу данных) всех найденных слов и массив счётчиков количества повторений для каждого слова. 3. Если найденное слово новое, тогда добавляем его в нашу базу данных со значением счётчика, равным единице. Если найденное слово уже встречалось, тогда НЕ добавляем его в базу данных, но значение его счётчика увеличиваем на единицу. Ну а уже в самом конце сортируем нашу базу данных (массив) по алфавиту. Ахиллесова пята здесь это поиск слов в составляемой базе данных. На это уйдёт львиная часть времени. Отсюда вопрос: можно ли как-нибудь оптимизировать этот процесс? Мне на ум приходит, что можно попробовать вставлять в "базу данных" новые слова сразу в алфавитном порядке, а потом начинать поиск (но как?) с первой буквы слова-кандидата. И ведь, наверняка же, оптимальный подход к этой задаче уже давно разработан, поскольку уж очень она вроде бы стандартная. Но я не могу найти. Даже не могу сформулировать строку поиска ![]() Пытался гуглить "VB6 разбить текст на отдельные слова", но там все ответы либо на VB.Net, либо вообще на других языках.
0
|
|
| 08.07.2020, 18:51 | |
|
Ответы с готовыми решениями:
49
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||
| 10.07.2020, 20:59 [ТС] | |||||||
![]()
![]() У меня сейчас наполеоновские планы и соответствующие аппетиты ![]() Добавлено через 2 минуты Добавлено через 10 минут ![]()
0
|
|||||||
|
bite
5011 / 4841 / 852
Регистрация: 13.04.2015
Сообщений: 10,123
|
||
| 10.07.2020, 21:23 | ||
|
Добавлено через 50 секунд Речь о поиске ? Добавлено через 1 минуту Если так, то в словарях и коллекциях искать ничего и не надо, там вы напрямую обращаетесь к элементу по ключу.
0
|
||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 10.07.2020, 21:50 [ТС] | |||
![]() И начнём с того,что не надо приписывать мне чужих слов ![]() Если вы любитель начинать чтение тем форума не с начала, а с конца, то объясню, что речь в этой ветке идёт о СОСТАВЛЕНИИ своего собственного словаря (очень большого словаря) из большого количества текстовых файлов по компьютерной тематике.
0
|
|||
|
Модератор
|
||||||||||
| 10.07.2020, 23:19 | ||||||||||
Сообщение было отмечено Power_Basic как решение
РешениеВот к примеру слегка модифицировал тот код что я предложил выше, добавил этот список основных API функций, добавил все английские слова, все русские слова. Получилось около 2 миллионов слов. Вместе с чтением, парсингом, удалением дубликатов, сортировкой и записью в файл у меня ушло 22 сек. Это без всяких оптимизаций. Поиск в готовой базе мгновенный, также как и добавление в базу:
Добавлено через 51 минуту
2
|
||||||||||
|
|
||||||
| 11.07.2020, 00:21 | ||||||
|
Ведь не хотите чтобы приложение вылетело из-за использования больше 2 ГБ памяти? При этом будет потерян результат работы. Вообще добавление какое-то странное. Где в строке ключ, а где значение?
1
|
||||||
|
Модератор
|
|||||||||
| 11.07.2020, 01:21 | |||||||||
0
|
|||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||||||||
| 11.07.2020, 02:49 [ТС] | ||||||||||||
![]() На самом деле, я на днях уже побывал на том сайте в своих поисках словарей. На английскую страницу, к сожалению, не попал, попал сразу на русскую. А она у меня и тогда, и сейчас выглядит, как показано на приложенном на скриншоте. Ну разумеется, я сразу понял, что какая-то проблема с кодировкой. Скопировал фрагмент "зашифровонного" текста, перетащил в Notepad++. Перепробовал там все кириллические кодировки, все эти КОИ-фигои ![]() И с BOM, и без BOM ![]() И никакого результата ![]() Потом даже посмотрел в шестнадцатеричном виде. Ну просто коды знаков вопроса и всё... Ну, думаю, какой-то фейк или розыгрыш, ну и свалил поскорее с того сайта, пока вирусов не нахватался ![]() А до английского словаря так и не добрался. Шикарный словарь! То что надо! Ну а русский попробую "расшифровать" программой "Штирлиц", если вы мне не выдадите священную тайну, какая там всё-таки кодировка ![]() Честно говоря, я готов "вытерпеть" пару часов, но уж точно не целые сутки ![]() На самом деле, я написал на PowerBasic'е такую программу, подробности которой пересказал в топике. Закинул в неё 8,5 МБ "исходного"материала, - просто сгрёб со своего компа множество HTML-файлов по компьютерной тематике, которые попались под руку. Там и лекции по VB6, и архивы целых компьютерных сайтов, которые когда-то скачивал WGETом. И вся эта "музыка" обрабатывалась у меня ну минут 10, наверно. Отсюда я сделал вывод, что "серьёзные" объёмы вообще потянут на целые сутки. Потом замерил время каждой потенциально затратной (по времени) операции и выяснил, что именно поиски в уже созданной базе данных занимают львиную часть всего времени. И чем больше разрастается база, тем более мизерными выглядят затраты времени на все другие операции по сравнению с задержками на эти поисками. Вот, собственно, это и побудило меня открыть эту ветку. ![]() Готовых решений здесь нет, приходится применять "творческий подход" ![]() Но общий принцип такой: чем больше будет составленная (в конечном итоге) база, тем больше шансов, что она подойдёт для выявления ошибок распознавания более широкого круга компьютерной литературы (по разной тематике). ![]() Эдак я и на кнопку не успею нажать, и процессом насладиться ![]() OCR может распознать такое слово, например, вот так:
Не по теме: Ну и ещё из забавного: наш любимый COM++ в 50% случаев распознаётся как СОМ. На первый взгляд вроде бы никакой разницы :) ![]() А иначе даже просматривать такую орясину будет негде. Ну не в Блокноте же, который уже с двух мегов текста начинает заметно притормаживать. Да и Ворд тоже (примерно с десяти). Короче, граф Лев Толстой со своим относительно бедным лексиконом "отдыхает" ![]() И нервно косит траву босиком
1
|
||||||||||||
|
bite
5011 / 4841 / 852
Регистрация: 13.04.2015
Сообщений: 10,123
|
||
| 11.07.2020, 06:40 | ||
|
0
|
||
|
|
||
| 11.07.2020, 07:25 | ||
|
У вас браузер не умеет правильно отображать win ANSI кириллицу. Надо сразу скачать этот файл на свой диск, а не копипастить! ![]() Облегчаю вам задачу
1
|
||
|
|
|||||||
| 11.07.2020, 11:57 | |||||||
0
|
|||||||
|
Модератор
|
|||
| 11.07.2020, 12:35 | |||
|
Добавлено через 17 секунд
0
|
|||
|
|
||||||||||||||||||||||
| 11.07.2020, 16:16 | ||||||||||||||||||||||
|
Изучайте как работает БД, например почитайте Грубера "Понимание SQL". Устанавливаете БД (есть как служба, например mysql, есть вариант portable - sqlite, можно даже в xls хранить). Затем ищите правильную строку подключения из-под vb6 к выбранной вами БД. Можете поискать по моему нику на форуме "mysql", под vba писал примеры, vb6 тоже самое. Запрос на добавление в таблицу БД (будут колонки Name и Count):
Запрос на добавление нового слова:
2
|
||||||||||||||||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||||||
| 11.07.2020, 22:27 [ТС] | ||||||||||
![]() Вчера уже поздно ночью нагуглил вот такой совет:
Меня на том сайте ввела в заблуждение фраза:
А поскольку я на тот момент пребывал в полной уверенности, что такой (казалось бы) пустяк - простое перечисление большинства английских и русских слов - найти во всём огромном интернете будет не такой уж и сложной задачей, я просто ушёл с того сайта по другим ссылкам, которые нагуглил по своему запросу. А теперь вот выясняется, что это вообще единственный и уникальный источник. Ну дела! ![]() И кстати, да, эти два "словарика" по объёму совсем-совсем не хилые, что меня очень сильно радует ![]() Добавлено через 6 минут ![]() В мои ближайшие планы не входит изучение искусства составления баз данных ![]() В процитированных вами словах под термином "база данных" подразумевался тот массив, который составляется в процессе закидывания в "мясорубку" всё новых и новых текстов в моей VB-программе. Добавлено через 17 минут ![]() Не по теме: Если вы мне предлагаете изучать новый язык, то нет, увольте :) И всё, что помогает мне в достижении поставленной задачи, то приветствуется и принимается с большой искренней благодарностью. А всё, что уводит куда-то в сторону, - к блужданию по заманчивым веткам воображаемого дерева вместо продвижения к цели, то приходится отодвигать в сторону ввиду, опять-таки, невозможности объять необъятное :) Базы данных, как таковые, это замечательная вещь, кто бы спорил. Но вот прямо сейчас и в ближайшей перспективе они мне ну совершенно не нужны, за исключением той задачи, про которую я рассказал выше. Но, в любом случае, за советы и за желание помочь, большое спасибо.
1
|
||||||||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||
| 12.07.2020, 00:56 [ТС] | ||
|
Где-то с полгода тому назад я попытался вставить в текстбокс PowerBasic'а очень большой фрагмент текста. И он прекрасно вставился, но ... был урезан почти на половину. Отсюда я сделал вывод, что во всех таких контрольках существует определённый предел "ёмкости". Ну и в Визуальном бейсике, наверняка, такая же ситуация, и, следовательно, огромную (а она же именно такая!) коллекцию загрузить в листбокс получится только, дай бог, на один процент ![]() Ну а с учётом ваших соображений, этот вариант, действительно, "смешной", о чём и написал сам его "изобретатель" ![]() Но идея всё-таки, согласитесь, оригинальная ![]() Добавлено через 3 минуты Не по теме: vedunasv, вы очень хороший, добрый человек.
0
|
||
|
|
||
| 12.07.2020, 01:45 | ||
|
Power_Basic, мне вас не понять. Сначала вы спрашиваете про оптимальный по скорости вариант.
Я вам составил уже готовые запросы. Язык изучать не нужно. Даже натолкнул, где взять пример использования. Ну вы так сразу в 1-м посте и пишите следующий раз, что вам нужно разжевать до мелочей и выложить готовую прогу с одной кнопочкой. Предельно странные делаете выводы. Больше на ваши темы отвечать желания нет.
2
|
||
| 12.07.2020, 02:48 [ТС] | ||
|
Не по теме:
Я вам сказал спасибо, ну и что ещё от меня требуется, я не понимаю. Ну давайте ещё раз скажу вам спасибо и расстанемся добрыми друзьями :)
0
|
||
| 12.07.2020, 02:48 | |
|
Что делать с многими файлами большого и не очень текста, а точнее как бы по быстрее его загружать под Windows XP !? Разбиение текста на отдельные слова и символы Вытащить из текста все отдельные слова Парсинг текста на отдельные символы или слова Объединить функции selectDate(), setPrev() и setNext() в одну наиболее рационально Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|