Создайте пользовательский список слов

Я неоднократно установил различные основанные на Ubuntu дистрибутивы на своей двойной загрузке (rEFIt'd) MacBook. Linux Mint 11 работавших лучшее из поля, для меня, и до приблизительно неделю назад была моя основная ОС: сенсорная панель, ACPI, ' в спящем режиме' суперфункциональные клавиши, все работали без дополнительного усилия.

На прошлой неделе я установил LMDE (Монетный двор Debian) xfce на третьем разделе начальной загрузки, и с некоторым усилием имеют почти все работа (isight's все еще вниз) - надеющийся сделать это моей основной ОС (хороший масштабируемый назад прокручивающийся дистрибутив тестирования Debian вроде #!).

Тем не менее я проводил то же исследование. До сих пор я только считал хорошие вещи о ArchLinux на MacBook, и это - мой параллельный проект это Утра (пока Монетный двор 11). Любой готовый устанавливать ArchLinux уже ожидает собирать их собственный идеальный дистрибутив, таким образом, из поля функциональность не будет ожидаться. Дуга ДЕЙСТВИТЕЛЬНО имеет безусловно лучшую общественную поддержку и подробные руководства по установкам MacBook/Pro.

Другой ответ на здесь упоминает, что ресурс аккумулятора кажется короче на Linux, чем Mac OS X. Это правда - плюс они работают горячий. Снова, у сообщества ArchLinux, кажется, есть все ответы, даже если Вы устанавливаете другой дистрибутив, проверяете их страницу "MacBook Pro Arch Wiki" онлайн для усовершенствованных подсказок по MacBook.

3
18.05.2013, 23:25
2 ответа

Выбрать слова по крайней мере 4 символов нашло по крайней мере 5 раз и не нашло в/usr/share/dict/words в файлах PDF в текущем каталоге.

 find . -name '*.pdf' -exec pdftotext {} - \; |
   tr -cs '[:alpha:]' '[\n*]' |
   tr '[:upper:]' '[:lower:]' |
   grep -E '.{4}' |
   sort |
   uniq -c |
   awk '$1 > 4 {print $2}' |
   comm -23 - <(tr '[:upper:]' '[:lower:]' < /usr/share/dict/words|sort -u)

Вам нужна оболочка с поддержкой замены процесса (ksh, zsh или bash).

Если Вы собираетесь использовать perl так или иначе можно также выполнить во всем этом perl:

find . -name '*.pdf' -exec pdftotext {} - \; |
  perl '-Mopen ":locale"' -nle '
     s/^\S+//;s/\S+$//;y/ \t/ /s;
     next unless length > 40;
     $w{lc$_}++ for /[[:alpha:]]{4,}/g;
     END{open W,"</usr/share/dict/words";
     while(<W>){chomp;delete $w{lc$_}};
     print for grep {$w{$_}>4} keys %w}'
3
27.01.2020, 21:20
  • 1
    я сделал хороший опыт с этим. Однако я нахожу некоторые слова в результате, которые являются неполными или соединены. Я думаю, что часть этого загрязнения может прибыть из слов в начале или конце строк, так как они часто повреждаются в файлах PDF. Я знаю, как я удалил бы их в жемчуге, но как я сделаю это в awk, который Вы используете так или иначе? –  highsciguy 19.05.2013, 15:34
  • 2
    @highsciguy, делает pdftotext -raw иметь какое-либо значение? Можно всегда использовать perl -pe для вставки безотносительно жемчуга, обрабатывающего Вас, хотят сделать. Если Вы даете некоторый образец проблематичного вывода в Вашем вопросе, возможно, мы можем помочь. –  Stéphane Chazelas 19.05.2013, 15:47
  • 3
    я добавил строку perl -lne '$_=~s/^[^\s]+\s+//; $_=~s/\s+[^\s]+$//; $_=~s/\s{2,}/ /g; if(length($_) > 40){ print $_; }' | после начальной буквы pdftotext который, кажется, чистит много поврежденных слов. Например, я нашел, что обещания с умляутами, такими как 'Jürgen' иногда нарушаются в выводе pdftotext как 'J" \nurgen'. 'urgen' затем добавляется к списку слов, если не я фильтрую его путем удаления первых и последних слов как с этой строкой жемчуга. Страница справочника pdftotext рекомендует не использовать -raw переключатель. –  highsciguy 19.05.2013, 17:18

Походит на очень типичный план. Я использовал бы сценарии оболочки, чтобы сделать это. Вы не имеете дело со зверски большими количествами текста, таким образом, производительность должна соответствовать, и сценарии оболочки легко записать и повторно выполниться. Мое первое сокращение было бы сценарием как это:

pdf2text files |
tr -cs '[A-Za-z]' '\n' |  
tr '[A-Z]' '[a-z]' |
awk '{ if (length > 6) {print $1;}}' |
fgrep -v -f /usr/share/groff/current/eign |
sort | 
uniq -c |
awk '{print $2, $1}' |
sort -nr +1 -2 |
head -20

Это получит Вас 20 самых частых слов lf длина, больше, чем 6.

Можно добавить шаги, вынуть шаги, скорректировать параметры для наблюдения то, что Вы получаете.

fgrep шаг является единственным нечетным и требует, чтобы GNU troff был установлен. Файл/usr/share/groff/current/eign является чем-то как 100 слов наибольшей частоты на английском языке. "-v" отмечают только слова передач, которые не появляются в "eign" файле, таким образом, он использует "eign" в качестве стоп-листа. Если Вам не нравится то, что GNU troff как как общие слова, можно сделать собственным и использовать тот файл в fgrep шаг.

1
27.01.2020, 21:20
  • 1
    Удивительный, как близко наши решения (я клянусь, что не считал Ваши прежде придумывающий мои). Несколько проблем с Вашим: это - нестандартный SysV tr синтаксис так в большинстве реализаций, которые включали бы [ и ] персонажи. С fgrep, Вы соответствуете подстрокам (также не это comm на отсортированных файлах будет намного более эффективным). Это - также старый нестандартный синтаксис для sort и head –  Stéphane Chazelas 19.05.2013, 00:01
  • 2
    Спасибо за указание на нестандартные флаги. Как что-то вроде динозавра, я чувствую себя более знакомым с ними. –  Bruce Ediger 19.05.2013, 00:13

Теги

Похожие вопросы