prog:chast-slovar
Как составить частотный словарь
Если одной строкой, то получается вот так.
cat words.txt| sed s/" "/"\n"/g|sort|sed 's/[[:upper:]]/\l&/g'|sed s/[^a-zа-я-]//g|uniq -c -d| sort -n| awk 'length($2) > 4'|tail -n 1000| sort -n -r
- В words.txt содержатся тексты. Вообще, конечно, можно вместо words.txt использовать *.txt для чтения всех txt-файлов в текущей директории, или dir/*.txt для чтения всех txt в директории dir.
- Далее потоковый текстовый редактор sed делает перенос каждого слова на новую строку, чтобы можно было составить сам словарь.
- Затем происходит сортировка данных, весь текст приводится к нижнему регистру и вырезаются все знаки пунктуации - таким образом становится довольно легко узнать, какие же слова все-таки повторяются.
- После этого за работу берется программа uniq, выбирающая из данных только повторяющиеся слова и пишущая количество повторов.
- Далее снова происходит сортировка данных, но на этот раз уже по частоте встречаемости, которую как раз подсчитала uniq.
- Затем awk'ом вырезаются все слова, длинна которых составляет менее 4 символов, так как обычно это слова вроде «да, нет, как, и, или» и т.п. Учитывать подобные слова в частотном словаре бессмысленно.
- В завершающей стадии работы этого однострочного скрипта командой tail выводятся только топ-1000 слов, а sort зеркально разворачивает список, чтобы самые популярные слова были написаны сверху.
Вот и все. Если в вашей командной строке нет проблем с русской локалью, то приведенный выше скрипт сработает как здесь и описано :) Но в случае, если какие-то проблемы все-таки есть, то можно использовать вот такой вариант скрипта:
cat words.txt| sed s/" "/"\n"/g|sort| sed s/"[[:punct:]]"//g|uniq -c -d| sort -n| awk 'length($2) > 4'|tail -n 20| sort -n -r
Как видно, этот вариант отличается лишь тем, что вместо выдергивания всех символов кроме знаков пунктуации, вырезаются непосредственно знаки пунктуации, а сами буквы остаются нетронутыми. По сути все тоже самое, только не происходит переход в нижний регистр, что делает этот вариант менее приемлемым.
В заключении - скрипт:
- frw.sh
#!/bin/sh URL="intel-ussur.ru" MAXWORD=100 w3m -dump -T text/html ${URL} | \ sed s/" "/"\n"/g | \ sort | \ sed 's/[[:upper:]]/\l&/g' | \ sed s/[^a-zа-я-]//g | \ uniq -c -d | \ sort -n | \ awk 'length($2) > 4' | \ tail -n ${MAXWORD} | \ sort -n -r
prog/chast-slovar.txt · Последнее изменение: 2024/05/02 13:20 — 127.0.0.1