[ID CC-CC2022] Короткие слова для грепа, для разных языков

  • Автор темы Автор темы veretragna
  • Дата начала Дата начала

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Здравствуйте.
Давно пользуюсь grep для присвоения атрибута No Break коротким словам в тексте, чтобы они никогда не висели в конце строки. Пересматривая тексты, параллельно формирую свой небольшой словарь коротких слов на разных языках, чтобы потом их использовать в других проектах.
Но любой словарь неполон, каждый раз приходится дополнять словари, это раздражает.
Кроме того, мне нельзя grep'ом выделять все слова длиной до 3 букв, только по заранее определенному списку слов, все остальное я просматриваю вручную после автоматики.

Вопрос: можно ли где-то посмотреть список всех коротких слов определенного языка, например, длиной до 3 букв? Возможно, где-то есть такие ресурсы, беглое гугление ничего не дало. Это позволило бы мне выбрать подходящие слова, скопировать в свой словарь и забыть об этой проблеме.
Для английского я пока обхожусь вот такой строкой
is|a|it|an|of|to|as|an|the|and|or|by
 
Для примера, как это работает, вдруг кому пригодится:
  • если в проекте можно использовать греп-стиль, то:
    • создаем стиль символа с произвольным именем и основным атрибутом символа No Break;
    • в стиле абзаца создаем вложенный греп-стиль, параметр Apply Style - выбираем наш созданный стиль символа, параметр To text - вставляем вот такой греп
    • (?i)(?<= )(is|a|it|an|of|to|as|an|the|and|or|by)( |\. |, )+
  • если нельзя использовать греп-стиль, то через Ctrl+F просто проходимся по документу этим же грепом:
    • Find What - вставляем строку грепа
    • Change to: пустая строка
    • Change format: или выбираем свежесозданный стиль символа с атрибутом No Break, или ставим галочку No Break во вкладке Basic character format
 
Я сделал в sZam 5 наборы для нескольких языков.
Рекомендую покупку у автора.
 
А смысл?
Можно же искать один-три словарных символа на границе слова с пробелом после.
Исключение дефиса в начале исключит отголоски 1-го, 21-й и т. п.
Код:
(?<!-)\b\w{1,3}\b\s
 
Последнее редактирование:
  • Спасибо
Реакции: Serbel
Я сделал в sZam 5 наборы для нескольких языков.
Рекомендую покупку у автора.
А в этом скрипте есть готовые наборы слов?
Нужны наборы слов, сам скрипт не требуется, при необходимости пишу все необходимое сам
Вроде того, но здесь как-то многовато мусорных слов типа ki, ea, которые никогда не попадаются в нормальных текстах. Однако, спасибо за ссылку, некоторые двухбуквенные слова для английского можно почерпнуть
А смысл?
Можно же искать один-три словарных символа на границе слова с пробелом после.
Игнорирование дефиса в начале исключит отголоски
Код:
(?<!-)\b\w{1,3}\b\s
Нельзя применять атрибут ко всему подряд, только по правилу белого списка - только указанные слова; тексты тоже очень разные, и языков много (27 языков, в основном европейские)
 
Идея: есть вариант раздербанить какой-то словарь спеллчекинга для OpenOffice, например. Вдруг там есть такие списки. Может, кто пробовал?
 
Нельзя применять атрибут ко всему подряд, только по правилу белого списка - только указанные слова; тексты тоже очень разные, и языков много (27 языков, в основном европейские)
Сами себе создаёте проблемы. Дерзайте. Проще идти от черного списка исключений.
 
Сами себе создаёте проблемы. Дерзайте. Проще идти от черного списка исключений.
Приходится работать в ограниченных рамках, поэтому подходит только вайтлист.

По теме: таки да, словари OpenOffice содержат все распространенные слова языка. А уж распарсить такой словарь и достать из него только слова от 1 до 3 букв, думаю, не составит труда - словарь выглядит как обычный текст.
Edit: поделюсь итогами, когда сделаю список на примере какого-то одного языка
 
Последнее редактирование:
Языков у меня 27, придется играться со словарями.

Предварительные результаты - русский словарь разобрался скриптом, выдает почти 500 слов длиной до 3 букв. Мусора много, но терпимо, можно перебрать, если делать набор слов для частого использования на дальнюю перспективу.
 
Итак, вот такой метод работает:
  1. Качаем словарь нужного языка из репозитория Апача, скачанный файл имеет расширение .oxt;
  2. Любым архиватором вытаскиваем из него файл .dic;
  3. Пропускаем полученный словарь через скрипт внизу (язык AutoIt, понадобится скачать пакет языка)
  4. Удаляем мусорные слова, формируем списки.
Скрипт выделяет только слова длиной до 3 символов включительно, без служебных тегов словаря и в нижнем регистре.


Код:
$FilePath = FileOpenDialog("Выберите словарь OpenOffice для извлечения коротких слов", @ScriptDir, "Файлы словарей OpenOffice (*.dic)")
If $FilePath = "" then Exit

$h = FileOpen($FilePath, 0)
$hO = FileOpen("parsed.txt", 2)

While 1
    $Line = FileReadLine($h)
    If $Line = "" then ExitLoop
    If StringLen($Line) < 4 and StringIsLower($Line) and Not StringInStr($Line, "/") then FileWriteLine($hO, $Line);
WEnd

FileClose($h)
FileClose($hO)
 
Последнее редактирование:
OpenOffice идет лесом, словари Hunspell есть и в самом индизе, причем коллекция намного полнее.
Искать здесь:
C:\Program Files\Adobe\Adobe InDesign CC 2019\Resources\Dictionaries\LILO\Linguistics\Providers\Plugins2\AdobeHunspellPlugin\Dictionaries
 
не замечал чтобы в английской литературе кто-то прибивал короткие слова
 
По процедуре, в рамках которой работаю я, короткие слова нужно переносить, если выравнивание не по ширине