|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|
Как наиболее рационально подойти к разбиению очень большого текста на отдельные слова?08.07.2020, 18:51. Показов 3413. Ответов 49
Метки нет (Все метки)
Всем здравствуйте!
Задумал написать на Визуальном бейсике программу, которая будет обрабатывать большие (ну очень большие!) тексты, разбивая их на отдельные слова. На ум приходит только такой подход к решению этой задачи: 1. В цикле проходим по всем словам текста, отправляя каждое из них во вложенный цикл. 2. Во вложенном цикле создаём 2 связанных между собой массива - массив (базу данных) всех найденных слов и массив счётчиков количества повторений для каждого слова. 3. Если найденное слово новое, тогда добавляем его в нашу базу данных со значением счётчика, равным единице. Если найденное слово уже встречалось, тогда НЕ добавляем его в базу данных, но значение его счётчика увеличиваем на единицу. Ну а уже в самом конце сортируем нашу базу данных (массив) по алфавиту. Ахиллесова пята здесь это поиск слов в составляемой базе данных. На это уйдёт львиная часть времени. Отсюда вопрос: можно ли как-нибудь оптимизировать этот процесс? Мне на ум приходит, что можно попробовать вставлять в "базу данных" новые слова сразу в алфавитном порядке, а потом начинать поиск (но как?) с первой буквы слова-кандидата. И ведь, наверняка же, оптимальный подход к этой задаче уже давно разработан, поскольку уж очень она вроде бы стандартная. Но я не могу найти. Даже не могу сформулировать строку поиска ![]() Пытался гуглить "VB6 разбить текст на отдельные слова", но там все ответы либо на VB.Net, либо вообще на других языках.
0
|
|
| 08.07.2020, 18:51 | |
|
Ответы с готовыми решениями:
49
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||
| 08.07.2020, 19:20 [ТС] | ||
![]() Я даже не успел перечитать свой пост (для проверки), а ответ уже тут как тут! ![]() Но всё-таки хотелось бы как-нибудь поподробнее ![]() Про "хеш таблицу Dictionary" я вообще слышу первый раз в жизни, а вот с коллекцией... ну да, это интересный подход. А как добиться того, чтобы коллекция хранила ключи упорядоченно? И ещё мне кажется, что массивы всё-таки работают быстрее чем коллекции, поскольку они не являются объектами, или нет? Когда текст маленький, тогда, конечно, пофиг на скорость, но я собираюсь составить очень большой словарь компьютерных терминов. А для этого надо в эту "мясорубку" закидать очень много исходных текстовых файлов. Программа составит для себя массив (список) всех файлов в указанной папке и будет обрабатывать их по очереди, составляя один общий словарь. Добавлено через 7 минут Это я к тому, что исходный текст огромный-преогромный!
0
|
||
|
Модератор
|
||||
| 08.07.2020, 19:50 | ||||
|
1
|
||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||
| 08.07.2020, 21:24 [ТС] | ||||
![]() Но на всякий случай погуглил и, к своему удивлению, выяснил, что это "деревья поиска", ну и там вообще целая наука ![]() А ещё вот такой вопрос. Может быть имеет смысл создать сразу несколько коллекций, - по одной на каждую букву? Это вроде бы должно существенно сократить время поиска. Ну а потом (уже в самом конце) их все объединить в одну общую и распечать в файл.
0
|
||||
|
|
||||
| 08.07.2020, 21:56 | ||||
|
1
|
||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||
| 09.07.2020, 00:25 [ТС] | |||||
|
Наверно только на практике можно будет выяснить, что работает быстрее - коллекция или массив. ![]() Не по теме: На самом деле, это тот случай, когда мне нужен именно результат, а не глубокие познания :) ![]() Пожалуй, при таком подходе удобнее будет работать, чем, как я изначально задумывал, создавать много (для каждой буквы) самостоятельных массивов. Но всё-таки сейчас начну с коллекций, потому что хотя бы просто хочется попробовать, насколько они могут конкурировать в скорости с массивами. И если выигрыш в скорости будет невелик, тогда, да, вернусь к варианту с "картотекой"
0
|
|||||
|
|
|
| 09.07.2020, 05:42 | |
|
Такая дискуссия, будто счет будет идти на многие миллионы!
Всего английских слов около полмиллиона. Из них компьютерной тематики сколько наберётся? Я как то делал программу, которая собирала словарный запас скажем Толстого, и на его основе генерировала свои тексты. Сборка словаря, а это такая штука, где каждому слову соответствует своя пара. например слово очень используется со словами: очень = раздражать,|близко|приближающегося|удобн ая в свою очередь близко близко = к|от ну и так далее. В общем такой словарь создаётся скажем из "Войны и мир" минут за 4-5. в MAP. А потом новый текст создаётся уже за секунду из готовой map. Т.е. доступ в таком объёме слов комп делает мгновенно. Слов то не чисел, существует в мире на так много...
0
|
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||||||||
| 09.07.2020, 16:06 [ТС] | |||||||||||
![]() ![]() Ну да, навскидку-то именно так оно и выглядит. Как сказал сатирик про великий и могучий русский мат, "Слов мало, слов всего пяток, зато какие комбинации!" ![]() Вот так и здесь, "склеивая" отдельные слова в различных сочетаниях, компьютерное словообразование, увы, почти безгранично. Ну вот самые длинные термины из упомянутой выше книги:
![]() Ну собственно-то, и весь замысел этого "мероприятия" состоит в том, что в программу можно загрузить свой словарь, ну и тогда она, возможно, слегка поумнеет ![]() ![]() Как это ни смешно звучит, но у него словарный запас "беднее" чем, например, у библиотеки MSDN ![]() Там же все многочисленные параметры будут восприниматься компьютером, как отдельные самостоятельные термины. А их там "склевают", как хотят, в любых сочетаниях. ![]() Но с ними, да, удобнее работать чем с массивами, и я обязательно устрою между ними "соревнование" ![]() А вот такой ещё вопрос. Вот допустим, уже у меня готова отсортированная коллекция. Как мне её сбросить на диск в виде текстового файла? С массивом это легко, а здесь как? Вот самое длинное слово из процитированных выше состоит из 51 буквы. А есть же очень много коротких слов. Но и для них тогда тоже придётся резервировать столько же байтов памяти. А словарик-то не маленький
0
|
|||||||||||
|
Модератор
|
||||||
| 09.07.2020, 17:02 | ||||||
|
1
|
||||||
|
|
|||||
| 09.07.2020, 17:55 | |||||
|
0
|
|||||
|
|
||
| 09.07.2020, 18:14 | ||
|
ConvertSecurityDescriptorToStringSecurit yDescriptorA ConvertSecurityDescriptorToStringSecurit yDescriptorW Но всё равно, я не понимаю, когда и в чем может помочь список всех этих слов? Для проверки правописания всё же более пригодно разбить их на составляющие + алгоритмы нечеткого поиска? Вспоминаю, что у меня где то была MSDN для VS 6 версии, на 2-х вроде CD дисках, до всеобщего Интернета её на дисках распространяли. Там наверняка большая часть таких слов есть и написана правильно.
2
|
||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||
| 10.07.2020, 19:36 [ТС] | ||||||
|
Вы недавно говорили, что объём доступной памяти можно как-то расширить с помощью WINAPI. Я тогда не особо вникал, потому что не было практической необходимости. Там не слишком сложно для продвинутой домохозяйки? ![]()
0
|
||||||
|
Модератор
|
||||
| 10.07.2020, 20:06 | ||||
|
0
|
||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||||
| 10.07.2020, 20:13 [ТС] | |||||
![]() ![]() А как же тогда слова-то по алфавиту расставить в самом концу? ![]() Как я понял, он здесь главный специалист по VB.
0
|
|||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 10.07.2020, 20:34 [ТС] | |||
![]() И даже уже придумал приблизительный алгоритм, как именно это будет происходить ![]() А если какое-то "склеенное" слово, заложенное в словарь, встретится целиком в распознаваемом тексте, ну тогда даже ещё лучше. Есть неплохой шанс, что OCR, опираясь на пользовательский словарь, правильно его распознает, и дальнейшие пляски с бубном вокруг этого сложного слова уже не потребуются. У меня она тоже есть (полтора гига на диске занимает). Вот её-то родимую и буду парсить ![]() А то ведь я уже собирался скачивать WGET'ом всю современную ![]() Ну или хотя бы ту ёё часть, которая уместится на всех моих носителях
0
|
|||
|
Модератор
|
||
| 10.07.2020, 20:41 | ||
|
0
|
||
| 10.07.2020, 20:41 | |
|
Помогаю со студенческими работами здесь
20
Что делать с многими файлами большого и не очень текста, а точнее как бы по быстрее его загружать под Windows XP !? Разбиение текста на отдельные слова и символы Вытащить из текста все отдельные слова Парсинг текста на отдельные символы или слова Объединить функции selectDate(), setPrev() и setNext() в одну наиболее рационально Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 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.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|