Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Посоветуйте статистическую функцию ? Есть большой текст (Война и   Найти похожие ветки 

 
Кен   (2003-07-12 02:50) [0]

мир), нужно подсчитать сколько раз какое слово в нём повторяется. Могу такую функцию написать и сам, но текст большой, поэтому боюсь, что будет сильно тормозить.


 
MSSQL2k   (2003-07-12 03:38) [1]

...можно попробывать с БД.
Нужна одна табличка+1 поле.
В это поле накидываем все имеющиеся слова, а там потом селектом с функцией COUNT + группировка.
:)


 
Кен   (2003-07-12 03:58) [2]

> ...можно попробывать с БД.
> Нужна одна табличка+1 поле.
> В это поле накидываем все имеющиеся слова, а там потом селектом
> с функцией COUNT + группировка.
> :)

А без БД ? Просто чтобы текстовый файл был.


 
Кен   (2003-07-12 06:39) [3]

Попытался сделать это через ListBox и его свойство Sorted, так оказалось, что у ListBox количество строк не больше 64000. Нет ли какого нибудь ListBox, с неограниченным количеством строк ?


> MSSQL2k (12.07.03 03:38)
> ...можно попробывать с БД.
> Нужна одна табличка+1 поле.
> В это поле накидываем все имеющиеся слова, а там потом селектом
> с функцией COUNT + группировка.
> :)

Где бы мне посмотреть примеров по работе с базами ?


 
Кен   (2003-07-12 07:53) [4]

Поискал на Torry крупноразмерный ListBox и ненашёл ...
Ну не отстой ли это ? Почему нельзя было сделать ListBox размером хотя бы в один миллион строк ?

Ведь мы то с вами знаем слов больше чем 64000. А тут их даже записать невозможно. Какой уж тут искусственный интеллект.


 
Sha   (2003-07-12 10:20) [5]

Хеш-функции проходил?


 
Anatoly Podgoretsky   (2003-07-12 13:29) [6]

Более 64000?
Огласите весть список.
Видимо ты путаешь слова со словоформами.


 
panov   (2003-07-12 16:11) [7]

Зайди на http://www.alglib.chat.ru/
Там есть функции, реализующие быстрый алгоритм поиска текста в файлах.


 
Aldor   (2003-07-12 19:29) [8]

Не понятно, необходимо найти количество вхождений каких-то определенныъ слов или всех?


 
Тих   (2003-07-12 21:46) [9]

www.analyst.ru, там лежит COM - SDK как раз для этих целей (один из результатов работы этой программы - выстраивание семантической сети после подсчета слов и выстраивание их "по весу")


 
Кен   (2003-07-13 01:44) [10]

> Aldor © (12.07.03 19:29)
> Не понятно, необходимо найти количество вхождений каких-то
> определенныъ слов или всех?

Всех


> panov © (12.07.03 16:11)
> Зайди на http://www.alglib.chat.ru/
> Там есть функции, реализующие быстрый алгоритм поиска текста
> в файлах.

Но мне не нужен поиск текста по файлАМ. Файл один. Нужно подсчитать сколько раз какое слово в нём повторяется.

Допустим всего слов 200 000. Уникальных же скажем 10 000, надо узнать сколько раз какое повторяется.
Чтобы получилось примерно вот так :
1) а - 50 раз
2) ай - 10 раз
3) ах - 5 раз
...
10000) я - 500 раз



> Anatoly Podgoretsky © (12.07.03 13:29)
> Более 64000?
> Огласите весть список.
> Видимо ты путаешь слова со словоформами.

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


 
Кен   (2003-07-13 01:53) [11]

> Тих (12.07.03 21:46)
> www.analyst.ru, там лежит COM - SDK как раз для этих целей
> (один из результатов работы этой программы - выстраивание
> семантической сети после подсчета слов и выстраивание их
> "по весу")


Там что то не то.

Комплект SDK:
библиотека программных компонентов (inproc servers);
документация;
набор базовых словарей,необходимых для работы с текстами русского и английского языков;
программа редактора словарей DicEdit.

Но зачем мне словари ? Ни русские, ни английские мне ни к чему.
И семантическая сеть какая то тоже ненужна.
Нужна всего лишь функция статистики.
Такая вот :

function GetStringsStat(InString: TString):TString;


 
Кен   (2003-07-13 02:44) [12]

> Тих (12.07.03 21:46)
> www.analyst.ru,

Я скачал. Там какая то программа. И ещё какие то программы на Си. Это не то.


 
2 Кен   (2003-07-13 05:15) [13]

"Дуракам закон не писан" (с)


 
Dmitriy O.   (2003-07-13 12:06) [14]

Элементарно Ватсон закачиваеш текст в БД а потом селект и все.


 
Тих   (2003-07-13 12:40) [15]

Кен © (13.07.03 02:44)
Если Вам лень разбираться - ваша воля.
Все зависит от задачи. Если надо один раз разобрать текст - стройте хэш "слово-число". Это будет тупо и быстро. Если же выполнять задачу надо регулярно и интеллектуально с учетом падежей, склонений, спряжений, контекста, возможных опечаток и пр. - таки поизучайте библиотеки типов TextAnalyst`а.


 
Dionys   (2003-07-13 17:47) [16]

простейший скрипт на Perl который считает слова... не различает регистр...


#!/usr/bin/perl

if (@ARGV < 2) {
print "Usage:\n\twords <infile> <outfile>\n";
exit();
}
open IN, "<${ARGV[0]}";
open OUT, "+>${ARGV[1]}";

my %words;

while (<IN>) {
chomp;
foreach (split /[\s\.\,\:\;\"\!\?\(\)\[\]\"\-]+/, $_) {
$words{$_} += 1;
}
}
foreach (keys(%words)) {
write OUT;
}

close IN;
close OUT;

format OUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | @#######
$_, $words{$_}
.


вообще лучше для обработки большого количества текстовой информации пользоваться Perl"ом...


 
Fenik   (2003-07-13 19:05) [17]

> Кен © (12.07.03 02:50)

> Могу такую функцию написать и сам, но текст большой, поэтому
> боюсь, что будет сильно тормозить.


Ты сначала напиши, а потом смотри как она работает, быстро или нет.

Алгоритм "в лоб": создаешь индексированный список; просматривая текст раскидываешь все слова по списку.

Индексированный список - из 33 элементов (алфавит). Каждый элемент - это такой же список из 33 элементов, только эти элементы - строки. 33*33 = 1089 строк. И в ходе просмотра текста слова раскидываются по этим строкам, разделяясь пробелом, к примеру. Конечно же все слова переводятся в один регистр (нижний). При добавлении какого-либо слова в очередную строку, она (строка) просматривается на наличие данного слова. Если слово присутствует в строке, то рядом с ним ставится число вместо пробела.
Когда "раскидка" закончена, просматриваешь все строки по-порядку и заносишь в список.

Короче говоря, делать можно не так уж долго.


 
Asteroid   (2003-07-14 01:28) [18]

Простейший (но не оптимальный) - берешь массив структур (слово, N повторов), читаешь слово из файла, делаешь бинарный поиск по массиву и действуешь по обстоятельствам. Минус - долгая вставка слова в середину (список должен быть отсортирован для бинарного поиска).


 
Кен   (2003-07-14 01:51) [19]

> Dionys (13.07.03 17:47)
> простейший скрипт на Perl который считает слова... не различает
> регистр...

Я знаю, как это сделать на Перле и php . Но это форум Дельфи. И программа на Дельфи. Что же мне ещё вмесе с ней ещё и Перл устанавливать ?

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


> Ты сначала напиши, а потом смотри как она работает, быстро
> или нет.

Это вы типа думаете, что я не писал что ли ? Ну нате :

if ValidInt(ValueListEditor1.Values["новое слово"]) then
ValueListEditor1.Values["новое слово"] := IntToStr(StrToInt(ValueListEditor1.Values["новое слово"])+1)
else
ValueListEditor1.Values["новое слово"] := "1";



> Dmitriy O. © (13.07.03 12:06)
> Элементарно Ватсон закачиваеш текст в БД а потом селект
> и все.

Если это так эллементарно, то напишите тут код или дайте ссылку на подобный код.


 
Asteroid   (2003-07-14 02:07) [20]

Да, кстати: если хочешь побыстрее - не используй визуальные компоненты при загрузке. В крайнем случае прячь. Обновляться будут, мягко говоря, долго.


 
Dionys   (2003-07-14 02:25) [21]

тогда воспользуйся хэшем в Delphi...

если с БД то в MySQL это будет выглядеть так... создаем таблицу:

CREATE TABLE words (word VARCHAR(100));

затем загоняем в нее все слова... и делаем такую выборку:

SELECT word, COUNT(*) FROM words GROUP BY word;

получим два столбца: в первом - слово, во втором - сколько раз оно встречается...


 
АлексейК   (2003-07-14 04:24) [22]

Могу такую функцию написать и сам, но текст большой, поэтому боюсь, что будет сильно тормозить.
Что бы не томозило, нужно подобрать оптимальный алгоритм поиска. Например, КМП алгоритм или комбинированный. Неполохо это описано у Н.Вирта "Алгоритмы и структуры данных."


 
Кен   (2003-07-17 06:47) [23]

> АлексейК (14.07.03 04:24)
>> Могу такую функцию написать и сам, но текст большой, поэтому
>> боюсь, что будет сильно тормозить.
> Что бы не томозило, нужно подобрать оптимальный алгоритм
> поиска. Например, КМП алгоритм или комбинированный. Неполохо
> это описано у Н.Вирта "Алгоритмы и структуры данных."

Если у них это написано, то хорошо бы ихний код запостить сюда. Чтобы велосипед не изобретать.

----
Я кстати нашёл, что работает с большим количеством строк. Это StringGrid. Но на сортировке сильно тормозит. В ЛистБоксе же это секунды.


 
Думкин   (2003-07-17 07:17) [24]

Кен © (17.07.03 06:47)
Ты что же все в визуале хочешь? Не перегрелся?
Ты еще после каждой словесной выборки делай Fpplication.ProcessMessages и заставля й компутер играть бравурную мелодию.


 
OHP   (2003-07-18 01:03) [25]

А почемы бы тебе листбокс на StringList не заменить - куда быстрей будет...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
4-10502
acsoft
2003-06-01 15:37
2003.08.04
Как сделать треугольное окно с углами в точках, например [0,0],[5


1-10294
3APA3A
2003-07-20 01:04
2003.08.04
Cursor


3-10123
abc
2003-07-14 21:29
2003.08.04
нужно ли устанавливать спец. драйвер для Oracle??


14-10355
Ivan Voronov
2003-07-18 18:00
2003.08.04
JAM ShellBrowser v2.4


14-10377
Карлсон
2003-07-17 01:07
2003.08.04
какая из работ Вам нравится больше?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский