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

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

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

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

Toman

Цитата: Славен от октября  6, 2013, 15:36
Освойте программу приведенную выше, и замените набор букв на тот который вам нужен
Ваша программа считает слова общей кучей, т.е. выдаёт результат в виде одного числа. А насколько я понял из одной фразы топикстартера, на выходе нужен вовсе даже словарь встречаемости с числом вхождений каждой найденной в тексте словоформы. Так что такая простая программа всё же не годится. А как раз для словарей в Перле есть удобное синтаксическое средство - "хеши" - так там называются собственно словари.

Цитата: Devorator linguarum от октября  6, 2013, 15:43
Да зачем такие сложности с границей слова? Критерии стандартные: пробел, конец строки, знаки препинания, кавычки.
Никаких сложностей - я именно это и имел в виду. Я просто к тому, что в существующем виде моя программа и эти критерии игнорирует, а вместо этого берёт подстроки заданной заранее длины, поэтому прямо в этом виде она вам не подойдёт.

Но если интересно, можете посмотреть её, она тоже маленькая (а могла бы быть ещё меньше, если бы не подразумевала каких-то дальнейших планов, суть которых я уже не помню, но уши которых торчат в закомментированном фрагменте):


#!/usr/bin/perl

$max_word_size=4;

while(<STDIN>){
$text.=$_;
}

$len=length($text);

for($s=1;$s<=$max_word_size;++$s){
for($i=0;$i<=($len-$s);++$i){
$subs=substr($text,$i,$s);
# $parent_subs=substr($subs,0,$s-1);
# if($parent_subs eq ''){
# $parent_subs="\'";
# }
# $wl{$parent_subs}.="\t$subs";
++$wc{$subs};
}
}

@hkeys=keys %wc;
@standart_sorted_keys= sort @hkeys;

foreach $k (@standart_sorted_keys){
(length($k)==$max_word_size) && (print $k."\t".$wc{$k}."\n");
}
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Toman

Цитата: Bhudh от октября  6, 2013, 16:02
Простите, а что для Вас "объёмный текст"⁈
Да хотя бы даже одна страница текста.

Цитата: Bhudh от октября  6, 2013, 16:02
Мой транслитератор древнегреческого в латиницу (причём не с одним прогоном) Илиаду+Одиссею только что транслитерировал за 4,5 секунды.
Браузерный, на джаваскрипте? Ну, значит, это я так криво написал, наверное. Или правила транслитерации алгоритмически слишком сложны оказались.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Bhudh

Цитата: Toman от октября  6, 2013, 16:28Браузерный, на джаваскрипте?
Браузерный, на джаваскрипте, не шибко-то оптимизированный.

Spoiler: function ⇓⇓⇓
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Toman

Цитата: Bhudh от октября  6, 2013, 16:34
Браузерный, на джаваскрипте, не шибко-то оптимизированный.
Ой, какой малюсенький, на регекспах-то! Свой я тоже хотел в сообщение запихать - да не смог, ограничение размера сообщения не позволяет.
Могу вставить, для примера, только часть - только из латиницы в кириллицу. Регекспами воспользоваться, конечно, можно было бы. Но не знаю, удобно ли.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Toman

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

Bhudh

Цитата: Toman от октября  6, 2013, 17:40Думаете, был существенно более простой вариант реализовать ту же функциональность?
1) В моём коде ровно та же функциональность. Достаточно поменять строки.
2) Судя по велосипеду коду, Вам ничего неизвестно про оператор in.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Toman

Цитата: Bhudh от октября  6, 2013, 17:51
1) В моём коде ровно та же функциональность. Достаточно поменять строки.
Вы уверены в этом? Впрочем, да, теоретически так сделать, разумеется, можно - но вот только проблема - какова будет длина этих строк? Изначально-то я хотел тоже примерно так поступить - точнее, просто стырить код с сайта //translit.ru, и подсунуть туда свои сочетания вместо ихних. Ан нет, не получилось. Таблица простых замен получилась бы монструозной - ещё больше моего транслитератора (и, вероятно, больше любого текста, подлежащего транслитерации), и для генерации этой таблицы всё равно пришлось бы писать вспомогательную программу.

Цитата: Bhudh от октября  6, 2013, 17:51
2) Судя по велосипеду коду, Вам ничего неизвестно про оператор in.
Для чего вы предлагали бы его применить в этом коде??? Вы предлагаете кодировать фактически булевы переменные посредством существования или несуществования у объекта свойства с некоторым именем??? Но это выглядело бы как какой-то изврат, имхо, трудночитаемый. Или для проверки границ массива? Но и там это не дало бы никакого существенного сокращения кода. Вот если бы надо было составлять словарь (что как раз хочет топикстартер), то операции а-ля перловый хеш бы реально пригодились. Но у меня ж тут нет словарей.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!


Toman

Цитата: arseniiv от октября  6, 2013, 18:23
элемент in массив, не?
Индекс_элемента in массив. Ну и что нам с него толку? Массив[индекс_элемента] даёт (в конкретно моём случае - где нет значимых нулей или пустых строк в массиве) такой же годный логический результат на предмет того, есть ли в массиве (ненулевой) элемент под таким-то номером.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

arseniiv

Ладно, другое.

function makePredicate(list) {
  var d = {};
  var len = list.length;
  for (i = 0; i < len; i++)
    d[list] = true;
  function predicate(elem) {
    return d[elem];
  }
  return predicate;
}


Использование:

var isCapital = makePredicate("ABCDEFG...")
// ...
... isCapital(c) ...


Это работает, по крайней мере, быстрее, чем циклы по массивам.

Toman

Цитата: Bhudh от октября  6, 2013, 19:00
Для массива оператор in не сработает.
По вашей же ссылке прямым текстом написано, что сработает. Вообще, НЯП, в джаваскрипте каких-то отдельных массивов нет, они такие же "объекты", как и прочие. Просто в качестве ключей при создании используются целые числа.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Bhudh

Цитата: Toman от октября  6, 2013, 19:08По вашей же ссылке прямым текстом написано, что сработает.
А, это я не так выразился. Не сработает поиск значения как ключа, бо ключ там как раз число.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Bhudh

Цитата: Toman от октября  6, 2013, 19:08Вообще, НЯП, в джаваскрипте каких-то отдельных массивов нет, они такие же "объекты", как и прочие.
Не совсем такие же.
Конструктор Array() что-то там переопределяет, ту же toString(), к примеру.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Toman

Цитата: arseniiv от октября  6, 2013, 19:06
Это работает, по крайней мере, быстрее, чем циклы по массивам.
Вот в частности за это я не люблю джаваскрипт. Всё-таки нормальные массивы должны быть. И если бы они были, перебор сравнительно короткого массива на равенство строк имел бы шансы быть не медленнее, чем поиск по ключу. А так, когда даже доступ к каждому элементу массива работает через тот же поиск по ключу - конечно, перебор массива будет медленнее, чем один поиск по ключу.
С одной стороны, такое вот единообразие всех объектов - оно вроде и красиво (и за это мне джаваскрипт нравится), но вот даже не портя этого, можно было бы организовать правильный быстрый доступ по целочисленным ключам без какого-либо поиска - тогда существенных потерь времени на это не было бы. Даже если в 3 раза медленнее поиска по ключу - но всё-таки не в 100 раз медленнее.
Конечно, если бы у меня была привычка в джаваскрипте работать с объектами как с перловскими хешами/словарями и воспринимать их в первую очередь именно как словари, я бы, вполне возможно, так и сделал. Но такой привычки, по крайней мере, в то время, когда был написан этот скрипт (а это было примерно время моего первого появления на ЛФ), у меня не было.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Славен

Text::Statistics::Cyrillic creates a seven column CSV file output with one line each token per text given as input a corpus that files names follows ' 1 (1). txt', '1 (2). txt', ..., '1 (n).txt' or 1 \(([1-9]|[1-9][0-9]+)\)\.txt Columns stores statistical information: (1) number of word forms in document d; (2) number of tokens in d; (3) Id number of d, ie., n; (4) frequency of term t in d; (5) corpus frequency of t ; (6) document frequency of t (number of documents where t occurs at least once); (7) t, UTF8 latin coded token-string

https://metacpan.org/module/Text::Statistics::Cyrillic

yatea - Perl script for extracting terms from a corpus of texts and providing a syntactic analysis in a head-modifier representation.

https://metacpan.org/module/THHAMON/Lingua-YaTeA-0.622/bin/yatea


Morugesso

Автор, если еще актуально  :-\, есть программа которой сама пользуюсь - SimWordSorter, она вытаскивает из текста частоту используемых слов, делает отчет по ним,  правда она меня полностью не удовлетворяет, так как хотелось бы чтобы поиск производился по корню слова, однако, как видно, таких программ еще не придумали. Но в принципе, это решаемо посредством автосортировки отчетных данных в экселе. Есть еще программа для писателей ywriter5 - там тоже есть функция подсчета повторяемости слов

Rwseg

Цитата: Morugesso от декабря  1, 2013, 12:40
так как хотелось бы чтобы поиск производился по корню слова, однако, как видно, таких программ еще не придумали.
Для этого существуют лемматизаторы.

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

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

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

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

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