Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Посоветуйте программу для подсчета количества слов в тексте

Автор Devorator linguarum, октября 6, 2013, 13:34

0 Пользователи и 1 гость просматривают эту тему.

Devorator linguarum

Что-нибудь вроде этого онлайнового агрегата:
http://www.docent777.ru/index/podschjot_slov_v_tekste/0-33

Оный не устраивает меня неприятием слов с нерусскими буквами типа ө, ү. И еще тем, что онлайновый, - боюсь, текст целой книги на 1000 страниц в него запихнуть не получится.

Так что какую-нибудь программку бы, озволяющую пересчитывать огромные объемы в уникодовской кодировке. Найдется такая?

Toman

Думаю, для ваших целей лучше всего будет написать её самостоятельно. Так надёжнее будет - не придётся задумываться о том, какие буквы она понимает, а какие нет. Разумеется, для каждого текста надо будет конкретно указывать, какой набор символов считать за буквы, что - за пробельные символы и знаки препинания. Опять же, правила для дефиса и тире, если они в тексте идут или могут идти одним символом. А в чужой программе чего-то наверняка всегда будет не предусмотрено.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Devorator linguarum

Цитата: Toman от октября  6, 2013, 14:05
Думаю, для ваших целей лучше всего будет написать её самостоятельно. Так надёжнее будет - не придётся задумываться о том, какие буквы она понимает, а какие нет. Разумеется, для каждого текста надо будет конкретно указывать, какой набор символов считать за буквы, что - за пробельные символы и знаки препинания. Опять же, правила для дефиса и тире, если они в тексте идут или могут идти одним символом. А в чужой программе чего-то наверняка всегда будет не предусмотрено.
Не хочется заморачиваться с изобретением велосипеда, который наверняка уже в десятках вариантах готовый существует. Тем более, я не программировал уже лет 15, и навыки программирования у меня соответствующие. Программы под Windows делать не умею, поэтому получится у меня работающий под DOSом динозавр, который будет принимать только файлы в формате txt. Так что готовая программа, даже если в ней что-то будет непредусмотрено, наверняка окажется лучше. С дефисами и прочими спорными символами, если понадобится, всегда можно разделаться, поменяв их автозаменой на какую-нибудь кракозябру, которая будет распознаваться так, как нужно.


Devorator linguarum

Цитата: Leo от октября  6, 2013, 14:46
вот хорошая
www.textcount.com
Спасибо! Жаль только, что бесплатная версия тексты длиннее 5000 знаков не принимает.

Bhudh

Цитата: Devorator linguarum от октября  6, 2013, 14:39Программы под Windows делать не умею, поэтому получится у меня работающий под DOSом динозавр, который будет принимать только файлы в формате txt.
Тут, имхо, достаточно скрипта, который будет запускаться в окне браузера.
Функция split() в javascript принимает регэкспы в роли разделителя, так что проблем быть не должно.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

amdf

Ведовьство, потвори, чяродеание, волхъвование, зеленничьство, церковнаа татба, мертвеци сволочать, крест посекут, или на стенах трескы емлють из креста.


Devorator linguarum

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

Leo

Цитата: Devorator linguarum от октября  6, 2013, 15:22
Вордовская статистика мне не подойдет. Нужно не вручную узнавать статистику для каждого отдельного слова, а получать сразу готовый список всех графических слов с указанием количества употреблений.

Может вам тогда традос попробовать ?

Toman

Цитата: Devorator linguarum от октября  6, 2013, 14:39
Программы под Windows делать не умею
Цитата: Devorator linguarum от октября  6, 2013, 14:39
поэтому получится у меня работающий под DOSом динозавр
И не надо, ни то, ни другое. Пишите не привязанные к конкретной ОС. Я тоже не умею писать под винду, и не писал под неё, когда под ней работал. Тем не менее, программы для работы с текстами писал и тогда, и, при случае, сейчас. На Перле, хоть и не люблю этот язык - но такие вот нехитрые процедуры с текстом на нём писать быстрее, чем на других языках, кажется. Перл медленный - но для задачи вроде вашей - линейной по длине текста, решаемой за один проход - это не играет существенной роли, если вы не собираетесь прогонять за раз сумасшедшие гигабайты текста.
Цитата: Devorator linguarum от октября  6, 2013, 14:39
который будет принимать только файлы в формате txt
А вот тут вам вряд ли кто поможет. Всякая нормальная программа подсчёта слов будет принимать входной поток только в текстовом формате. Что ж вы ещё хотели? Задача преобразования из чего-то другого в чистый текст - отдельная задача, которую не имеет смысла смешивать с подсчётом. И для этого преобразования существуют отдельные программы, их тьмы.

Цитата: Devorator linguarum от октября  6, 2013, 14:39
С дефисами и прочими спорными символами, если понадобится, всегда можно разделаться, поменяв их автозаменой на какую-нибудь кракозябру
Конкретно дефис/тире можно заменить на пустую строку (т.е. удалить), т.к. это сольёт слова с дефисом в слитные, а в случае тире между словами останутся пробелы, которые не изменят результат подсчёта слов.
Но... хм, так вы и "нерусские буквы", про которые упоминали в начале темы, тоже можете заменить автозаменой на что-нибудь (например, сочетание из русских букв). Тем более, что для подсчёта слов вам не требуется обратимость этого преобразования - так что можно заменять на любое буквосочетание, лишь бы оно оставалось слитным.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Devorator linguarum

Цитата: Leo от октября  6, 2013, 15:23
Цитата: Devorator linguarum от октября  6, 2013, 15:22
Вордовская статистика мне не подойдет. Нужно не вручную узнавать статистику для каждого отдельного слова, а получать сразу готовый список всех графических слов с указанием количества употреблений.

Может вам тогда традос попробовать ?
А что такое традос?

Toman

Цитата: Bhudh от октября  6, 2013, 15:09
Тут, имхо, достаточно скрипта, который будет запускаться в окне браузера.
Функция split() в javascript принимает регэкспы в роли разделителя, так что проблем быть не должно.
Это было бы неплохо, и на джаваскрипте писать не менее легко и приятно, чем на перле (если специально не забуриваться в нечитаемый синтаксис). Но, увы, выполнение джаваскрипта в браузере настолько медленно, что не сравнить даже с интерпретатором перла. У меня есть транслитератор на JS, так на любом сколько-нибудь объёмном тексте браузер виснет, и многократно, останавливая выполнение скрипта, спрашивает, хочу ли я продолжить исполнение. То же самое будет и с подсчётом слов. Слишком муторно для пользователя, да и реально дико медленно.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Leo

Цитата: Devorator linguarum от октября  6, 2013, 15:24
Цитата: Leo от октября  6, 2013, 15:23
Цитата: Devorator linguarum от октября  6, 2013, 15:22
Вордовская статистика мне не подойдет. Нужно не вручную узнавать статистику для каждого отдельного слова, а получать сразу готовый список всех графических слов с указанием количества употреблений.

Может вам тогда традос попробовать ?
А что такое традос?

Есть такая http://www.sdl.com/de/products/sdl-trados-studio/
она очень многофункциональная  (я правда не работал с ней с 2009 года и подзабыл), там есть и бесплатные версии и много вариантов и наворотов. там должно быть и точно вам надо, ибо она подсчитывает fuzzy matches (не помню, как по-русски)

Славен

cat tekst.txt | perl kolichestvo_slov.pl

kolichestvo_slov.pl

#!/usr/bin/perl
#cat tekst.txt | perl kolichestvo_slov.pl
#
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
binmode(STDERR,":utf8");
use utf8;
use strict;
my $kolichestvo_slov;
my $bukvy = "[йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ-]";

while (<>) {

while ($_ =~ /$bukvy+/g) { $kolichestvo_slov++ }

if ($kolichestvo_slov =~ m/0000$/){
print STDERR "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b $kolichestvo_slov";
}

}

print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b Итого: $kolichestvo_slov слов.\n";

Devorator linguarum

Цитата: Toman от октября  6, 2013, 15:23
Цитата: Devorator linguarum от октября  6, 2013, 14:39
Программы под Windows делать не умею
Цитата: Devorator linguarum от октября  6, 2013, 14:39
поэтому получится у меня работающий под DOSом динозавр
И не надо, ни то, ни другое. Пишите не привязанные к конкретной ОС. Я тоже не умею писать под винду, и не писал под неё, когда под ней работал. Тем не менее, программы для работы с текстами писал и тогда, и, при случае, сейчас. На Перле, хоть и не люблю этот язык - но такие вот нехитрые процедуры с текстом на нём писать быстрее, чем на других языках, кажется. Перл медленный - но для задачи вроде вашей - линейной по длине текста, решаемой за один проход - это не играет существенной роли, если вы не собираетесь прогонять за раз сумасшедшие гигабайты текста.
Цитата: Devorator linguarum от октября  6, 2013, 14:39
который будет принимать только файлы в формате txt
А вот тут вам вряд ли кто поможет. Всякая нормальная программа подсчёта слов будет принимать входной поток только в текстовом формате. Что ж вы ещё хотели? Задача преобразования из чего-то другого в чистый текст - отдельная задача, которую не имеет смысла смешивать с подсчётом. И для этого преобразования существуют отдельные программы, их тьмы.

Цитата: Devorator linguarum от октября  6, 2013, 14:39
С дефисами и прочими спорными символами, если понадобится, всегда можно разделаться, поменяв их автозаменой на какую-нибудь кракозябру
Конкретно дефис/тире можно заменить на пустую строку (т.е. удалить), т.к. это сольёт слова с дефисом в слитные, а в случае тире между словами останутся пробелы, которые не изменят результат подсчёта слов.
Но... хм, так вы и "нерусские буквы", про которые упоминали в начале темы, тоже можете заменить автозаменой на что-нибудь (например, сочетание из русских букв). Тем более, что для подсчёта слов вам не требуется обратимость этого преобразования - так что можно заменять на любое буквосочетание, лишь бы оно оставалось слитным.
В общем, такой путь решения я в качестве запасного уже обдумывал. Назаменять нерусские буквы на диграфы, нарезать большие объемы текста на куски приемлемой длимны и прогнать хоть через тот онлайновый счетчик, ссылку на который я в первом посте давал.

Или написать-таки в паскале или бейсике безвиндоузного динозара и загонять в него тексты, предварительно пересохраненные в txt хоть через ворд.

С Перлом никогда не работал, поэтому использование его исключается. Осваивать новый язык программирования ради написания одной маленькой программы смысла нет.

Toman

А, чёрт, кажется, я неправильно понял задачу. Т.е. вам нужен не подсчёт слов (неважно каких), а подсчёт числа конкретных графических словоформ? Но с критерием границы слова, соответствующим письменности языка. Тогда джаваскрипт точно отпадает напрочь, т.к. эта задача уже значительно тяжелее вычислительно, и браузер на ней просто вообще убьётся.
А Перл как раз подойдёт, наверное - я сам делал на нём такую программу (но только без критерия границы слова - она составляла словарь встречаемости тупо из подстрок определённой длины, а не из слов в буквальном смысле). Но принципиальной разницы нет, с точки зрения сложности. Перл справится.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Славен

Цитата: Devorator linguarum от октября  6, 2013, 15:32
С Перлом никогда не работал, поэтому использование его исключается. Осваивать новый язык программирования ради написания одной маленькой программы смысла нет.

Цитата: Toman от октября  6, 2013, 15:34Но с критерием границы слова, соответствующим письменности языка.

Освойте программу приведенную выше, и замените набор букв на тот который вам нужен в строке:

my $bukvy = "[йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ-]";

Границы как раз и будут все те знаки которые не буквы. В примере в конце указан дефис, можно убрать его, но в данной строке он обязательно должен стоять в конце после остальных букв если нужен.

Devorator linguarum

Цитата: Toman от октября  6, 2013, 15:34
А, чёрт, кажется, я неправильно понял задачу. Т.е. вам нужен не подсчёт слов (неважно каких), а подсчёт числа конкретных графических словоформ? Но с критерием границы слова, соответствующим письменности языка.
Да зачем такие сложности с границей слова? Критерии стандартные: пробел, конец строки, знаки препинания, кавычки. Алфавиты - только кириллица и латиница с дополнительными диакритизированными буквами. Деванагари или японскую кану обрабатывать не планируется.

Toman

Цитата: Devorator linguarum от октября  6, 2013, 15:32
Или написать-таки в паскале или бейсике безвиндоузного динозара
А, ну в этом смысле на перле будет такой же "безвиндоузный". Т.е. консольная программа, вызываемая из командной строки (или пакетного файла/шелл-скрипта).

Цитата: Devorator linguarum от октября  6, 2013, 15:32
предварительно пересохраненные в txt хоть через ворд
Предварительно пересохранять в текст в любом случае придётся, другого разумного пути.

Цитата: Devorator linguarum от октября  6, 2013, 15:32
С Перлом никогда не работал, поэтому использование его исключается. Осваивать новый язык программирования ради написания одной маленькой программы смысла нет.
Почему же только одной? Вполне вероятно, пригодится ещё неоднократно. И я же не предлагаю осваивать его полностью (чего я и сам ни за что не подумаю делать: с точки зрения полного освоения Перл - пожалуй, один из самых сложных языков среди практически применяемых, м.б. даже вообще самый сложный - хотя м.б. с ним в сложности соперничает Вижуал Бейсик, но его я совершенно не знаю), я предлагаю воспользоваться лишь его простейшими средствами, в рамках которых его синтаксис более-менее нормальный, не слишком шокирующий. Хотя... хотя да, это он для "сишников" более-менее привычный, а вы-то, получается, скорее "паскальщик"...
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Devorator linguarum

В общем, чтобы было понятнее, конкретный пример: нужно посчитать количество употреблений всех разных графических слов в "Войне и мире" на калмыцком языке. Или на чукотском. Морфологию учитывать не нужно, так что нүдн и нүднд будут считаться за разные слова.

Devorator linguarum

Цитата: Toman от октября  6, 2013, 15:44
Хотя... хотя да, это он для "сишников" более-менее привычный, а вы-то, получается, скорее "паскальщик"...
Я вообще "бейсикщик". В паскале тоже приходилось работать, так что с ним справлюсь, но это уже не от хорошей жизни, а если в бейсике средств не хватает.

Славен

Цитата: Devorator linguarum от октября  6, 2013, 15:48
В общем, чтобы было понятнее, конкретный пример: нужно посчитать количество употреблений всех разных графических слов в "Войне и мире" на калмыцком языке. Или на чукотском. Морфологию учитывать не нужно, так что нүдн и нүднд будут считаться за разные слова.

Подсчитывать символы или слова? Вообще количество слов или сколько раз каждое слово присутствует в тексте? Все это разные задачи. Определитесь.

Bhudh

Цитата: Toman от октября  6, 2013, 15:28У меня есть транслитератор на JS, так на любом сколько-нибудь объёмном тексте браузер виснет
:o
Простите, а что для Вас "объёмный текст"⁈
Мой транслитератор древнегреческого в латиницу (причём не с одним прогоном) Илиаду+Одиссею только что транслитерировал за 4,5 секунды.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Bhudh

Цитата: Славен от октября  6, 2013, 15:55Вообще количество слов или сколько раз каждое слово присутствует в тексте?
Цитата: Devorator linguarum от октября  6, 2013, 15:22получать сразу готовый список всех графических слов с указанием количества употреблений
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр