тестовый анализатор
#6
Отправлено 16.12.2008, 05:07:22
как проще это написать так же меня интересует... можно в php сделать анализатор... я пробую пока в визуал студии С++... опыта мало, по этому не сильно понимаю с чего начать =)
рад любой помощи =)
#8
Отправлено 17.12.2008, 20:09:42
считывает текста с файла, разделение текста на отдельные слова, с последующей анализацией каждого слова на совпадение с базой данных, тобишь если это первый текст то слов в базе данных нет, тогда это слово туда заносится как новое. Также нужно вести учет, как часто слово встречается в тексте =)
примерно так я представляю что мне нужно =)
c Перл не знаком еще... по этому не это будет для меня тяжелее наверно =)
#10
Отправлено 18.12.2008, 20:33:49
Да совсем не обязательно на Perl. Задача значительно упрощается и в случае C#. У него тоже отличные средства для работы с регулярными выражениями. Для данной задачи уж точно хватит. Подойдут и другие современные языки, если есть подходящие библиотеки. В общем, кто что лучше знает.Заменить C++ на Perl, и задача ЗНАЧИТЕЛЬНО упрощается.
Вы зачем усложняете исходную задачу этими вопросами? Подобных требований у автора-постановщика вообще не было. Подробно по пунктам:что делать со словами
1. "мама", "мамочка", "мамуля"
2. "мама", "момочка", "ммаулочка"
3. "сад" - как место где садят ягодки и "сад" - место где отбывают наказание дети дошкольного возраста
1. Такие слова должны считаться разными. Поиск всех возможных словоформ с приставками и суффиксами по условию не требуется.
2. "Момочка" и "ммаулочка" должны считаться такими же равноправными словами, как и любые другие. Ведь проверка правописания по условию также не требуется.
3. Этот вопрос тоже неуместный. Решение проблем контекста, семантики слов также по условию не требуется.
Не умножайте сущности сверх необходимости! © У. Оккам
#11
Отправлено 18.12.2008, 21:52:42
Автор, у вас интересная и практически полезная задача! Я вполне серьезно. Давно уже пора бы нашим форумным "гуру программирования" поразмять мозги. Пусть покажут, кто на что способен.я могу сказать что хочется:
считывает текста с файла, разделение текста на отдельные слова, с последующей анализацией каждого слова на совпадение с базой данных, тобишь если это первый текст то слов в базе данных нет, тогда это слово туда заносится как новое. Также нужно вести учет, как часто слово встречается в тексте =)
У меня к вам предложение: давайте не будем требовать, чтобы программа обращалась к базе данных. Иначе, я уверен, ни одной строчки работающего кода вы здесь не увидите. Вместо этого (как это обычно здесь происходит) вам придется отвечать, какая будет применяться СУБД, почему она должна применяться в этой задаче и т.д. В итоге ваша задача скатится во флейм и религиозные войны (какая СУБД круче).
Итак, предлагаю сделать такую постановку вашей задачи. Программа может быть написана на любом языке программирования, но обязательно должна работать. Это значит, она должна:
- Cчитывать текст из внешнего файла (имя файла программа должна получать от пользователя).
- Файл с текстом должен быть простого формата, без специальных и скрытых символов форматирования. Например, пусть это будут простые файлы .txt, с которыми работает стандартная программа "Блокнот" (она же Notepad), поставляемая вместе с Windows.
- Текст в файле может быть русским, английским, или и то, и другое вперемешку, все в одном файле. Допускаются все знаки препинания (:;,"!?), а также все неалфавитные и нецифровые символы, если они есть на клавиатуре (+, -, /, *, знаки $, %, и т.д.).
- Разделять текст на отдельные слова. Словом считается любая последовательность алфавитно-цифровых символов длиной от 1 символа (например, в предложении "Я легенда" "Я" должно считаться отдельным словом). Знаки препинания в слова не входят. Если в исходном тексте какие-то слова по ошибке не были разделены пробелом (например, "Я,Легенда"), то программа должна уметь справляться с этим, и правильно разделять слова (то есть, "Я" и "Легенда").
- Подсчитывать количество слов: всего и в том числе количество повторений каждого слова в заданном тексте.
- Слова, начинающиеся с заглавных и строчных букв, считаются разными (или одинаковыми - уточните).
- Выводить на экран итоговую таблицу из двух столбцов: 1) слово и 2) количество его повторений в тексте.
Сообщение отредактировал Visual1: 18.12.2008, 22:20:17
#12
Отправлено 19.12.2008, 02:57:40
Мне это программа нужна для работы с немецкими текстами, задача программы выявить наиболее употребляймые слова в текстах, которые предоставляют учителя перед лекциями в онлайн виде. Это должно облегчить изучение немецкого, а точнее увеличение словарного запаса, потому что будут явно выделены основные слова текстов. Тексты идут по специализации социльные науки =)
Основная функция программы составить список слов которые вообще встречаются в этих текстах и их "популярность". То есть я хотел сделать так, чтоб сперва текст разделяется на слова и потом сверяется со словами которые уже были раньше в других текстах =) я думаю что тут не нужно создавать БД, вполне можно как нибудь реализовать это по средством связи с каким либо документом... только надо подумать как это сделать и как вести статистику слов в этом случаи, я в голове представляю вполне план реализации такого, но надо еще подумать... =)=)=) слова с большой и маленькой буквы считаю равнозначными =)
а вообще план которые написан вами выше вполне достаточен для начала, потом доработать и добавить что либо в программу будет не так уже сложно =)
А вообще меня порадовало что кого то заинтересовала моя идея по поводу этой программы =)
#14
Отправлено 19.12.2008, 11:04:13
#!/usr/bin/perl print "Enter Fiilename:"; $filename=<>; open (FILE, $filename) or die "error!! $!"; while(<FILE>){ chomp; foreach (split/\s+|\.\s*|,\s+/){ $counter{$_} += 1; } } my $all_words = 0; foreach(keys(%counter)){ print "$_ - $counter{$_} occurrences\n"; $all_words += $counter{$_}; } print "\n$all_words words in file $filename\n";1.Cчитывать текст из внешнего файла (имя файла программа должна получать от пользователя). есть
2.Файл с текстом должен быть простого формата, без специальных и скрытых символов форматирования. Например, пусть это будут простые файлы .txt, с которыми работает стандартная программа "Блокнот" (она же Notepad), поставляемая вместе с Windows. есть(насчет блокнота не знаю, как перл относится к виндовым \r\n ? - На ActivePerl ни разу не работал. По идее пофигу)
3.Текст в файле может быть русским, английским, или и то, и другое вперемешку, все в одном файле. Допускаются все знаки препинания (:;,"!?), а также все неалфавитные и нецифровые символы, если они есть на клавиатуре (+, -, /, *, знаки $, %, и т.д.). Вроде есть - пробельные символы, точки и зяпятые служат разделителями. Здесь непонятно, что делать со словами типа qwe@$rty - то что говорил Кими
4.Разделять текст на отдельные слова. Словом считается любая последовательность алфавитно-цифровых символов длиной от 1 символа (например, в предложении "Я легенда" "Я" должно считаться отдельным словом). Знаки препинания в слова не входят. Если в исходном тексте какие-то слова по ошибке не были разделены пробелом (например, "Я,Легенда"), то программа должна уметь справляться с этим, и правильно разделять слова (то есть, "Я" и "Легенда"). см выше.
5.Подсчитывать количество слов: всего и в том числе количество повторений каждого слова в заданном тексте. есть
6.Слова, начинающиеся с заглавных и строчных букв, считаются разными (или одинаковыми - уточните). Разными. Переделать несложно.
7.Выводить на экран итоговую таблицу из двух столбцов: 1) слово и 2) количество его повторений в тексте. + само собой
#15
Отправлено 19.12.2008, 12:06:05
Исходник выложу вечером, а пока предоставляю скриншот:
#16
Отправлено 19.12.2008, 16:11:54
1. Считываем текст
2. Разбиваем текст на слова
3. Упаковываем слова в двумерный массив записей, где rec.1 - слово, rec.2 - количество повторений (по умолчанию забиваем единицами)
4. Выявляем одинаковые слова массива, при их обнаружении rec.2 увеличивается на 1, повторяющееся слово удаляется
4. Исходя из условий задачи, определяем число повторений, которое необходимо, чтобы слово можно было считать частоупотребляемым.
5. В цикле проверяем - если rec.1>= то находим текущее слово в тексте и выделяем его жирным шрифтом
#17
Отправлено 19.12.2008, 16:24:10
Не понял, почему двумерный, и почему единицами.3. Упаковываем слова в двумерный массив записей, где rec.1 - слово, rec.2 - количество повторений (по умолчанию забиваем единицами)
А, вот так значит... Понял почему единицами, но зачем двумерный так и осталось загадкой.4. Выявляем одинаковые слова массива, при их обнаружении rec.2 увеличивается на 1, повторяющееся слово удаляется
Вот как выявлять будем, проясните поподробнее. Очень интересно.
Напишите код, и сравните скорость его работы его с моим , интересно будет.
Сообщение отредактировал Zulkar: 19.12.2008, 16:25:14
#18
Отправлено 19.12.2008, 17:12:58
перебором)
как удаляться будет? в цикле ar[i]:=ar[i+1]
я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей
да и вообще, топик создан год назад, стало быть... смысл?))
#19
Отправлено 19.12.2008, 17:22:28
Напишите пожалуйста кусок кода, просто я не могу понять.как удаляться будет? в цикле ar[i]:=ar[i+1]
я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей
zladey не смог создать новую тему и поднял старую.да и вообще, топик создан год назад, стало быть... смысл?))
#20
Отправлено 19.12.2008, 17:42:48
Ну и что же. А может, у вашей программы будет выше надежность работы. Или еще какие-то другие преимущества.я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей
Просьба пользователя zladey новая, она поступила 3 дня назад.да и вообще, топик создан год назад, стало быть... смысл?))
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0