Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Сообщения - el guahiro

1
Изменение темы Mousepad.
Стандартный текстовый редактор Xubuntu весьма аскетичен. Аскетизьма ему прибавляет невозможность настроить цветовую схему - надо выбирать из имеющихся.    Исправляем это.
В терминале:
mkdir -p ~/.local/share/gtksourceview-3.0/styles
Потом качаем/копируем отсюда темы.
Я скачал тему matrix и чуть изменил её, заменив фон с чёрного на deepblue, сообразно теме моего рабочего стола.
Получилось как-то так:
2
Насчёт full upgrade не торопимся?
Пишут, что обновления с Ubuntu 20.10 до Ubuntu 21.04 не включены, поскольку некоторые системы могут оказаться в не загружаемом состоянии, если они используют EFI версии 1.10.

https://discourse.ubuntu.com/t/hirsute-hippo-release-notes/19221
3
Хорошие обои для xfce https://wallpaperaccess.com/4k-minimalist.
Особенно для девайсов с хорошим разрешением, коих всё больше.
4
Ранее на форуме я писал про настройку тачпада с помощью программы GSynaptics
и был очень неправ.
Пару раз наблюдал у себя как мышь в ноуте "взбесилась" - раз в месяц множественные фантомные нажатия, открытие сотни окон и т.п. Приходилось ноут отключать кнопкой, пока не догадался отключить драйвер Synaptics.

Может кому-то пригодится.
Искренне ваш, el
5
Готовясь к очередному (точнее первому в году) рывку в дебри нашей необъятной, т.е на объект строительства, нашёл у себя два скрипта для сжатия картинок (фоток, сканов) "на месте", без интернета, SMS и регистрации.
picture_SMALLER_2.5x.sh:
#! /bin/bash
#from el guahiro, USSR
IFS=$'\#'
for i in "$@" ; do convert  "$i" --strip -interlace Plane -gaussian-blur 0.05 -quality 85%  "$i".2 ; touch -r "$i" "$i".2 ; mv -v "$i".2 "$i" ; done | zenity --progress --width=400 --height=100 --title="Уменьшаю изображение" --text "работаю." --auto-close --pulsate;notify-send 'Готово!'
picture_SMALLER_4.5x.sh:
#! /bin/bash
#from el guahiro, USSR
IFS=$'\#'
for i in "$@" ; do convert  "$i" -filter Triangle -define filter:support=2 -unsharp 0.25x0.25+8+0.065 -dither None -posterize 136 -quality 50 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -strip  "$i".2 ; touch -r "$i" "$i".2 ; mv -v "$i".2 "$i" ; done |zenity --progress --width=400 --height=100 --title="Уменьшаю изображение" --text "работаю." --auto-close --pulsate;notify-send 'Готово!'
Сжимают, соответственно в 2,5 и 4,5 раза. Пакетная обработка возможна.
Помогает, например, оперативно сжать фотоколлекцию, или чертежи в tiff.
Кто любит GUI, тот может воспользоваться утилитой IMAGINE, есть Appimage, т.е запустится в любой системе.

Засим прощаюсь. Искренне ваш, el
6
Действие ПКМ Thunar "PDF2DOCX".
Thunar custom action PDF2DOCX
Превращает в DOCX только PDF с текстовым слоем. Как создать в PDF этот самый текстовый слой (OCR в один клик) я писал чуть ранее в этой теме.
Команда:
pdftotext -q -nopgbrk -layout %n ; sed -i -r -z 's/--/-/g;s/-\n//g;s/[.]\n/&#/g;s/[;]\n/&#/g;s/[!]\n/&#/g;s/[?]\n/&#/g;s/^[0-9]/#&/g;s/\n/ /g;s/#/\n/g;s/--/-/g;s/  */ /g'  "$(basename -s .pdf %n)".txt ; sed -i -r 's/^[ \t]*//;s/[ \t]*$//;/^\s*$/d' "$(basename -s .pdf %n)".txt ; abiword --to=docx "$(basename -s .pdf %n)".txt; rm "$(basename -s .pdf %n)".txtЧтобы написать это, пришлось побороть исконно присущий человеку страх перед sed.
Команда работает очень быстро. Формирует абзацы автоматически.
Чтобы работало, необходимо установить pdftotext и abiword. В принципе, можно было написать команду и на Libreoffice, но тогда при  открытом в GUI Libreoffice скрипт не работает.
Услопия появления: галка на "Другие файлы", маска: *.pdf;*.PDF
Иконка любая.
Видео как это работает

Искркнне ваш, el
7
Цитата: xub от апреля 06, 2021, 06:17:47Часто приходилось превращать всё в обычный текст
Так я и пишу, что надо всё в обычный текст, потом txt превращаем в docx (или odt) с форматированием при конвертации прямо в консоли> потом чистка автозаменой> потом добрасываем картинки из PDF и таблички, распознанные через Free Online OCR>потом открываем и форматируем загловки>получаем файл, разбитый по нумерации и абзацы, с картинками и табличками. Когда умеешь, то превратить боршюру PDF в 20 листов в доклад формата docx (или odt) - полчаса с перекурами.
и да, в предыдущем посте я дал рецепт ручной чистки текста. Для автоматизации у el guahiro существует команда. Причешу - опубликую.

PS. С проблемами кодировки не сталкивался уже года два. Наверное потому, что допилил всё на уровне ОС.
8
Приводим в порядок текст, вставленный в документ из других программ.
Этот текст написан для продуктивной работы в Libreoffice. Необходим например студентам, чтобы скачанный в сети скан превратить в курсовую.
В моей же работе часто бывает так, что необходимо создать файл доклада или презентации Libreoffice, а в наши руки попал документ, форматирование в котором оставляют желать много лучшего - это либо документ, сконвертированный из MS Word в PDF, либо текст, скопированный из браузера с неподходящей нам разметкой, либо текстовый файл, переносы строк в котором отнюдь не обозначают новых абзацев. Либо это просто текст с распознанного скана с хорошим нужным  текстом.
Как вытаскивать текст из файлов PDF, неоднократно писалось на на этом форуме, в том числе в этой теме. Можно например открыть файл в MasterPdf Editor, Foxit Reader, Evince или Okular и скопировать текст, можно извлечь в командной строке с помощью различных утилит, например pdftotext.
Самым простым решением наверное было бы отправить PDF в Fine Reader. Но Fine Reader под Linux не работает и не собирается. Я отправлял в прошлом году в Fine Reader запрос, мне ответили что разработка под Linux не планируется. Можно купить программу InstallAble2ExtractPro у https://www.investintech.com/. Но она стоит 10 000 рублей на наши деньги, что не мало, если платить из своего кармана. К тому же у меня она в Xubuntuт18.04 не установилась, сказав про неразрешимые зависимости. Не больно то и хотелось.
В итоге аффтор этих строк озадачился автоматизацией процесса создания *.docx или *.odt из PDF, а заодно из *.txt и *.html. Для этого прибегнем к  исправлению текста с помощью функции libreoffice «Найти и Заменить».
Для начала необходимо удалить пробелы в начале и конце строк, заменив при помощи  диалога «Найти и заменить» «^[ \s]+|[ \s]+$» на пустое место. Иногда несколько раз, если пробелов много.
Далее, первая часть из изложенного материала от автора Roman Kuznetsov взята отсюда http://antilibreoffice.blogspot.com/2017/11/blog-post.html:
Замена множества пробелов идущих подряд на один:
a. В диалоге «Найти и заменить» в строку «Найти» вбиваем два пробела   #заменил оригинал от Roman Kuznetsov по результатам тестирования.
b. В строку «Заменить» вбиваем " *" (пробел и звезду без кавычек)
c. Далее раскрываем «Другие параметры» и отмечаем галочкой опцию «Регулярные выражения»
d. Нажимаем на кнопку «Заменить все».
Делаем раза два-три.
Замена знака разрыва строки на знак абзаца:
a. В диалоге «Найти и заменить» в строку «Найти» вбиваем \n
b. В строку «Заменить» также вбиваем \p
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
При обратной замене - поменять выражения
Замена нескольких подряд идущих знаков абзаца (пустые строки) на один знак абзаца:
a. В диалоге «Найти и заменить» в строку «Найти» вбиваем ^$
b. В строку «Заменить» ничего не вбиваем, оставляем её пустой.
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
-----------------
Далее рецепты от el guahiro.
1  Таблицы.
Таблицы хорошо распознаёт сервис Free Online OCR https://www.onlineocr.net/. Кушает не более одной странички за раз.
2  Текст.
Текст нам попадается двух видов: Нумерованные(маркированные) списки и Абзацы. Внутри одного абзаца или списка попадаются лишние знаки абзаца, и их надо убрать.
2.1  Нумерованные/маркированные списки
Выделяем список. В диалоге «Найти и заменить» ставим галку «Только текущее выделение»
a. Далее в диалоге «Найти и заменить» в строку «Найти» вбиваем \p\d
\d здесь обозначает - «любая цифра».
b. В строку «Заменить» вбиваем \n&
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
После этого внутри выделения элементы списка отделяются друг от друга принудительным разрывом строки.
Далее, не снимая выделения:
a. Далее в диалоге «Найти и заменить» в строку «Найти» вбиваем \p
b. В строку «Заменить» вбиваем пробел
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Потом, не снимая выделения, меняем принудительный разрыв строки обратно на абзац:
a. В диалоге «Найти и заменить» в строку «Найти» вбиваем \n
b. В строку «Заменить» также вбиваем \p
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Для макрированного списка приблизительно тот же алгоритм, только в строку «Найти» вбиваем \p и символ маркированного списка (кружочек, квадратик, галочка и т.п.)
2.2 Абзацы
Можно просто выделять абзацы, заменяя знак абзаца на пробел внутри него:
Выделяем абзац. В диалоге «Найти и заменить» ставим галку «Только текущее выделение»
a. Далее в диалоге «Найти и заменить» в строку «Найти» вбиваем \p
b. В строку «Заменить» вбиваем пробел
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Потом переходим к следующему абзацу, десятому...сотому и т.д.
Но если текст большой, то на это уйдёт много времени. Поэтому способ второй - отделяем абзацы друг от друга по признаку: «точка+знак абзаца=конец абзаца». Можно этот способ использовать и для списков.
Выделяем блок абзацев, затем:
a. Далее в диалоге «Найти и заменить» в строку «Найти» вбиваем [.]\p
b. В строку «Заменить» вбиваем .\n
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Аналогично сделать для [!] и [;]
Далее, не снимая выделения:
a. Далее в диалоге «Найти и заменить» в строку «Найти» вбиваем \p
b. В строку «Заменить» вбиваем пробел
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Абзацы сгрупировались как надо, без лишних переносов строк.
Потом, не снимая выделения, меняем принудительный разрыв строки обратно на абзац:
a. В диалоге «Найти и заменить» в строку «Найти» вбиваем \n
b. В строку «Заменить» также вбиваем \p
c. «Регулярные выражения» также должны быть активированы
d. Нажимаем на кнопку «Заменить все».
Иногда надо ещё убрать табуляцию:
Найти: \t
Заменить на: - оставить пустое окошко

На этом всё, надеюсь, и уверен, многим поможет. Искренне ваш, el
9
Поскольку форум всё же про Xubuntu, указанный выше уважаемым qqq скрипт под Xubuntu будет иметь следующий вид:
#!/bin/bash
IFS=$'\#'
filename=$1

if [ "${filename##*.}" = "docx" ]; then
docx2txt < $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "odt" -o "${filename##*.}" = "ods" -o "${filename##*.}" = "odp" ]; then
odt2txt --width=80 $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "doc" ]; then
antiword -f -w 0 $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "rtf" -o "${filename##*.}" = "ppt" ]; then
catdoc $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "xls" ]; then
xls2csv $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "xlsx" ]; then
xlsx2csv $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "txt" -o "${filename##*.}" = "md" ]; then
cat $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "png" -o "${filename##*.}" = "jpg" ]; then
w3m $filename
fi

if [ "${filename##*.}" = "html" ]; then
html2text $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "pdf" ]; then
pdftotext -q -layout $filename - |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi
Какие утилиты надо доставить, можно понять из команд. Измождённый за неделю обалдуями-проектировщиками el guahiro сделать этого уже не в силах. Как-нибудь сами.

Искренне ваш, el
10
Цитата: qqq от апреля 02, 2021, 14:02:23Вот что получилось:
Я бы добавил после less:
| sed '/\S/!d; s/  / /g;s/  / /g; s/  / /g; s/,,/ /g'так вывод будет компактней.
А так скрипт годный. Для некоторых ситуаций (например, когда открытие офисного файла в стандартном редакторе фиксируется  и нежелательно) даже очень.
Правда была раньше для предпросмотров уже программка, я о ней писал на этом форуме, называется  Gloobus , с 2013г не поддерживается, но может и сейчас запустится на Альтах, на Астре с её древней пакетной базой запустится точно...... 
Но велосипед мы / Вы изобрели хороший, с возможностью дальнейшего прогресса. :)
11
Цитата: qqq от марта 31, 2021, 15:23:45В моем примере - это doc, docx, odt.
Предлагаю расширить скрипт, взяв утилиты вывода содержимого файлов в терминал, основываясь на готовую наработку от el - скрипт ищи_pro2:
#!/bin/bash
# Created by el guahuro, elguahiro@gmail.com.
#This script performs a recursive search for the contents of files in all popular office formats.
echo -e "\n
Поиск слова во всех файлах этой папки, введите запрос \n
Результаты поиска по введенному далее запросу \n"
echo -e "\033[1m\033[38;5;11m"Чтобы открыть найденный файл, выдели название этого файла и закрой терминал"\033[0m"


echo -e "\033[37;1;41m  "СЛОВО:" \033[0m"
read response

find . -iname "*.doc" |
while read i ; do catdoc "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.docx" |
while read i ; do docx2txt < "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.xls" |
while read i ; do xls2csv "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.xlsx" |
while read i ; do xlsx2csv "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.pdf" |
while read i ; do pdftotext -q -layout "$i" - | less |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.odt" |
while read i ; do odt2txt "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.odp" |
while read i ; do odt2txt "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.ods" |
while read i ; do odt2txt "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.rtf" |
while read i ; do catdoc "$i" |
rg -i "$response" && echo -e "\033[37;1;41m  "$(realpath "$i")"\033[0m" ; done

find . -iname "*.csv" |
while read i ; do enconv "$i"; done

rg -i "$response"

echo -e "\033[1m\033[38;5;11m"Время поиска $SECONDS секунд"\033[0m"

Сей скрипт был написан аффтором в глубокой тоске по поводу отсутствия нормального полнотекстового поиска в Linux, ежедневно тестируется уже длительное время и показывает результаты, лучшие от аналогов. К тому же не требует индексации ФС.
Работа вариантов скрипта описана здесь и здесь
Видео по работе скрипта:
12
Распознавание скриншота экрана  (фрагмента экрана) "на лету" - с отправкой текста в буфер обмена.
Screenshot OCR "on the fly" - with sending the text to the clipboard
Делаем хоткей на команду (Настройки>Клавиатура>Комбинации клавиш):
bash -c 'xclip -selection clipboard -t image/png -o > /tmp/0.png ; mogrify -resize 400% -modulate 110,110,100 -median 1 -blur 0x0.4 -unsharp 0x12+2+0 -density 300 /tmp/0.png; tesseract /tmp/0.png /tmp/0 -l eng+rus --psm 6 &> /dev/null ; cat /tmp/0.txt | xsel -bi'Как использовать:
1. Делаем скриншот любым доступным способом
2. Нажимаем хоткей, который мы назначили на команду
3. В буфере обмена через секунду-другую появляется распознанный текст со скриншота.

Должно быть установлено: imagemagick, tesseract с языковыми пакетами; xclip

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

Искренне ваш, el
13
Цитата: qqq от марта 29, 2021, 10:03:51Не получается из docx2txt направлять выхлоп в терминал
В мане утилиты есть замечание про перенаправление. Прочитав его, с учётом ограничений Thunar пишем скрипт docx2term.sh:
#!/bin/bash
IFS=$'\#'
for i in $@;  do docx2txt < "$i" ; done
done
Потом создаём действие ПКМ Thunar на команду:
xfce4-terminal -H -e "docx2term.sh %n"
Условие появления: Другие, *.docx
14
Превратности российского капитализма. В то время, когда многие мои коллеги находится без работы, тех кто работает, в частности меня, грузят до физического предела. В воскресенье - сижу, разбираю чертежи по новому объекту. Понимаю, что что разработчики проектной документации не профессионалы (с моей точки зрения). У меня критерий такой: Если направляют чертежи, конвертированные с DWG или любого другого цифрового формата то нормально - парни экономит бумагу и рабочее время своего персонала. Если приходят чертежи в виде сканов ранее распечатанных на бумаге - это не профессионалы, так как не экономят  бумагу и рабочее время своего персонала. Заодно не экономят моё время, т.к. чтобы писать отзывы и цитировать, приходится не копировать, а перепечатывать текст, а это уже лишнее время.
Наконец, дойдя до белого каления, пытаюсь написать команду на  хоткей. Задумка такая: скопировать часть текста в буфер обмена> из буфера обмена передать в tesseract> полученный текст передать обратно в буфер обмена. Возможно, с использованием промежуточных конструкций типа:
xclip -sel clip -o > /tmp/1.jpg
Но время поджимает. Пока придумал копировать и вставлять в поиск Яндекс-картинок. Сервис при этом распознаёт clipboard. Но это не по-линуксовому и зависишь от интернета, а он не везде на объектах есть, особенно на новых и отдалённых.
С ходу написать  команду на  хоткей не получается. Вопрос к xub и остальным знатокам, есть какие-то идеи?
15
Цитата: qqq от марта 26, 2021, 08:43:35Хочу сделать просмотр odt файлов из thunar'a.
Команда:
xfce4-terminal -H -e   "odt2txt %n"Маска: Другие, *.odt
файл открывается в терминале.
Можно реализовать для прочтения всех популярных типов файлов через while и утилиты, открывающие эти mimetypes в терминале.

Если получится, выпейте за моё здоровье. Выходные же!

PS. Дельная затея. Быстрее просматривать получается, особенно наверное для слабых машин. Браво, qqq!