Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753

Как найти совпадающие слова в файлах с Portacle?

16.09.2020, 22:48. Показов 5362. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Опишу задачу, используя регулярное выражение для примера. А Вы объясните, пожалуйста, пошагово и с кодом, как выполнить нужное в Portacle.

Надо поискать в папке (а если можно, то и во вложенных тоже) файлы, соответствующие запросу, и чтобы можно было выводить найденные файлы на экран по одному для просмотра, и чтобы фон всех совпадающих слов подсвечивался одновременно.
Вместо (ПРОПУСК ТЕКСТА) надо что-то придумать, чтобы этот фрагмент выпадал из результата, возвращаемого регуляркой. Надо искать файлы, которые одновременно содержат обе части, написанные до (ПРОПУСК ТЕКСТА) и после.
Как вариант, можно для второй последовательности, делать поиск в найденном.
Надо, чтобы подсвечивалось не только два совпадения, а все, которые есть в документе. Размер обрабатываемых файлов - одна или несколько страниц.
Пример регулярного выражения:
кашел|кашл(ПРОПУСК ТЕКСТА)насморк|ринит|синусит|сопл|выделе н.+нос|нос.*выделен |гайморит
Вместо двух частей, как в этом регулярном выражении, может быть больше (меньше то же возможно, только это маловероятно).
Регулярку не стал делать, чтобы искало все слово вместе с окончанием (некоторые слова показаны здесь укороченными для совпадения с разными падежами), планирую доделать потом.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2020, 22:48
Ответы с готовыми решениями:

Как найти самые длинные слова во всех файлах?
Как найти самые длинные слова во всех файлах.В моем случае я ищу каждого файла отдельно, но как вместе не понимаю, причем нужно...

Найти совпадающие слова в тексте
Подскажите в чем ошибка ? Всегда выводится первое слово #include <stdio.h> #include <conio.h> #include <string.h> ...

В предложении найти все слова совпадающие с маской
Всем доброго времени суток! Очень нужна ваша помощь т.к. я совсем не силен в Регулярных выражениях. Пытался изучать, но тщетно. :cry: ...

44
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 06:03
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import logging
import re
from tkinter import Frame
from tkinter.scrolledtext import ScrolledText
 
log = logging.getLogger(__name__)
 
DEFAULT_FONT = 'roboto', '12'
TAG_BLUE = 'tag_blue'
 
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title('')
        self.master.minsize(300, 200)
 
        # menu = Menu(self.master)
        # self.master.configure(menu=menu)
        #
        # menu_file = Menu(menu)
        # menu_file.add_command(label='Импорт', command=self.on_import)
        # menu.add_cascade(label='Файл', menu=menu_file)
 
        width = 73
 
        self.text = ScrolledText(self, bg='white', height=31, width=width, undo=True, wrap='word')
        self.text['font'] = DEFAULT_FONT
        self.text.tag_configure(TAG_BLUE, background='#aaf')
        self.text.focus_set()
        # self.text.bind('<Key>', self.on_key_text)
        self.text.grid_configure(row=0, column=0)  # , rowspan=2)
 
        self.grid_configure()
        self.do_open()
 
    def destroy(self):
        # todo
        log.info('destroy')
        super().destroy()
 
    def do_open(self):
        with open('../you-can/source/01.txt') as f:
            for line in f.read().split('\n'):
                self.text.insert('end', line)
                i = self.text.index('insert').split('.', 1)[0]
                for m in re.finditer(r'(hate|luck|tea)', line, flags=re.I):
                    b, e = f'{i}.{m.start(0)}', f'{i}.{m.end(0)}'
                    log.debug('%s %s', b, e)
                    self.text.tag_add(TAG_BLUE, b, e)
                self.text.insert('end', '\n')
        log.debug(self.text.tag_ranges(TAG_BLUE))
 
 
if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    App().mainloop()
Миниатюры
Как найти совпадающие слова в файлах с Portacle?  
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 08:11  [ТС]
Рыжий лис, а как искать этим скриптом в папке, а не в отдельном файле?

Как подумал, в Portacle надо открыть Tools-Search files (Grep). Это так? Если да, то что вписать в строку запроса?

Файлы сейчас лежат по пути /home/ia/Desktop/Новая папка/Макаров . Надо ли переделать путь на английский?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 08:17
Уже писал же.
Python
1
2
for root, dirs, files in os.walk('/home/ia/Desktop/Новая папка/Макаров'):
    print(root, dirs, files)
Ты сам-то хоть пару строчек кода самостоятельно напиши.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 08:36  [ТС]
Я не знаю как. Сейчас изучаю другую тему. Приведите, пожалуйста, полный код, то есть подставьте эти две строчки в нужное место.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 08:48
Тебе не 10 лет - если тебе что-то надо, то напиши сам. Не знаешь как - изучай.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 09:01  [ТС]
А как он вообще работает? Если это одно регулярное выражение hate|luck|tea, то второго не видно совсем. А если надо будет добавить третье или ещё несколько?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 09:12
В том-то и дело, что твоя задача дробится на подзадачи:
1) рекурсивно пройтись про каталогу, открывать последовательно файлы.
2) быстро пробежаться по содержимому файлу и проверить наличие ключевых слов. Если их нет - отбросить файл, взять новый.
3) теперь уже есть список файлов, в которых есть вхождения слов. На этом можно и закончить, то тебе же интересен GUI. Находим позицию вхождения слова в тексте и отрисовываем, аккуратно ставя "выделения" слов. Теоретически, будет удобнее написать консольное приложение.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 09:15  [ТС]
Надо, чтобы было вхождение из разных регулярных выражений, а не из одного.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 09:34
Нафига тебе регулярки? Если и так всё ищется

Python
1
2
3
4
5
6
7
>>> text = '''
... I finish the last of my tea. The others are lingering over theirs, shooting furtive glances between them as they silently debate the best way to talk me out of my decision, but my mind is made up. "I'll be fine, girls. Really." I rise from my seat and circle the table giving each one of them the most comforting hug I can manage. Lifting my bags up onto my back, I pay for the tea and then head for an empty field behind the restaurant followed by the others. I’ve already prepped the spell that I read out of Star Swirl’s notes, the one-way ticket to wherever and whenever he ended up. Getting back will be up to me, but I have a few options that should work.
... '''
>>> 'tea' in text
True
>>> text.find('tea')
25
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 09:41  [ТС]
Вот заготовленный набор синонимов и схожих понятий по насморку насморк|ринит|синусит|сопл|выделен.+нос| нос.*выделен |гайморит

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Нафига тебе регулярки? Если и так всё ищется
Не понял, что именно Вам не понятно и как вашим примером надо заменять этот заготовленный набор синонимов?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 09:56
Цитата Сообщение от supmener Посмотреть сообщение
насморк|ринит|синусит|сопл|выделен.+нос| нос.*выделен |гайморит
Допустим, ок. А второе ключевое слово какое? Ты начинаешь надоедать свои поиском неизвестно чего неизвестно где.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 09:59  [ТС]
В этом примере кашел|кашл.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 10:14
1) открываешь файл, читаешь его содержимое.
2) проверяешь первой регуляркой
3) проверяешь второй регуляркой
4) ...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os
import re
 
#for root, dirs, files in os.walk('/home/ia/Desktop/Новая папка/Макаров'):
for root, dirs, files in os.walk('.'):
    for filename in files:
        if not filename.endswith('.txt'):
            continue
        full_filename = os.path.join(root, filename)
        print('\nopen filename:', full_filename)
        with open(full_filename, 'rt') as f:
            text = f.read()
        if len(re.findall(r'(насморк|ринит|синусит|сопл|выделен.+нос|нос.*выделен|гайморит)', text, flags=re.I)) == 0:
            print('not found1!')
            continue
        if len(re.findall(r'(кашел|кашл)', text, flags=re.I)) == 0:
            print('not found2!')
            continue
        print('ok')
    break
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 10:24  [ТС]
Это готовый полнофункциональный скрипт для работы или это заготовка части кода для него?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 10:38
Запустить не пробовал?
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 10:41  [ТС]
А как запускать? Надо в папку с обрабатываемыми файлами положить? Если да, то запускать из консоли или щелкая мышью по нему?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 10:43
Святая Селестия... А как ты раньше запускал питоновские скрипты? Так и запускай. Лучше - из консоли.

Положить скрипт можно в любое место, так как пути используются абсолютные
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
os.walk('/home/ia/Desktop/Новая папка/Макаров'):
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.09.2020, 10:47  [ТС]
А почему у Вас строчка с этим путем закомментирована?

Добавлено через 1 минуту
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А как ты раньше запускал питоновские скрипты?
Раньше из Geany. Там выскакивало окно и не закрывалось.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.09.2020, 10:47
Так расскоментируй.

Можно и через geany запускать - непринципиально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.09.2020, 10:47
Помогаю со студенческими работами здесь

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

В тексте найти слова, совпадающие по трем последним символам
Пользователь вводит строку – осмысленное текстовое сообщение, слова которого разделяются пробелами и знаками препинания. Найти в тексте...

найти и удалить слова совпадающие с начальным отрезком латинского алфавита!
Срочно при срочно надо сдать задачу!!!Помогите Дана не пустая последовательность слов из строчных букв между соседними словами запятая за...

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

Найти в файлах ключевые слова
Здравствуйте, нужно поискать слова из файла в других файлах, при этом файлов у нас много, и пути к этим файлам записаны в файле patch.txt,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru