Перейти к содержимому

Фотография

тестовый анализатор


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 66

#1
Galaperedol

Galaperedol
  • Завсегдатай
  • 224 сообщений
Народ, кто может помочь, кто нибудь занимался созданием текстовых анализаторов? очень нужна помощь.
  • 0

#2
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Какие параметры анализа? Всетаки Text.toString.lenght() тоже анализатор.
  • 0

#3
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Что ты имеешь в виду под текстовым анализатором? Частоту слов? Проверка грамматики и орфографии или что-то еще?
  • 0

#4
georgex

georgex
  • Частый гость
  • 82 сообщений
Поиск текста по смыслу?
  • 0

#5
programmer::Ruslan

programmer::Ruslan
  • Завсегдатай
  • 105 сообщений
ну смотря что надо, если чтобы легче сделать поиск по тексту, то я такое писал как-то
  • 0

#6
zladey

zladey
  • Гость
  • 6 сообщений
может кто нибудь помочь написать анализатор текста на совпадение слов с сохранением слов и статистики встречи слов в текстах =)


как проще это написать так же меня интересует... можно в php сделать анализатор... я пробую пока в визуал студии С++... опыта мало, по этому не сильно понимаю с чего начать =)

рад любой помощи =)
  • 0

#7
dzid

dzid
  • Свой человек
  • 939 сообщений
Заменить C++ на Perl, и задача ЗНАЧИТЕЛЬНО упрощается.

А можно скрестить CString из MFC/ATL и std::map. Добавить кастомный компаратор, если не нужно учитывать регистр символов.

Ну, это если я правильно понял, что хочется
  • 0

#8
zladey

zladey
  • Гость
  • 6 сообщений
я могу сказать что хочется:
считывает текста с файла, разделение текста на отдельные слова, с последующей анализацией каждого слова на совпадение с базой данных, тобишь если это первый текст то слов в базе данных нет, тогда это слово туда заносится как новое. Также нужно вести учет, как часто слово встречается в тексте =)

примерно так я представляю что мне нужно =)
c Перл не знаком еще... по этому не это будет для меня тяжелее наверно =)
  • 0

#9
Кими

Кими
  • В доску свой
  • 2 252 сообщений
что делать со словами
1. "мама", "мамочка", "мамуля"
2. "мама", "момочка", "ммаулочка"
3. "сад" - как место где садят ягодки и "сад" - место где отбывают наказание дети дошкольного возраста
  • 0

#10
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Заменить C++ на Perl, и задача ЗНАЧИТЕЛЬНО упрощается.

Да совсем не обязательно на Perl. Задача значительно упрощается и в случае C#. У него тоже отличные средства для работы с регулярными выражениями. Для данной задачи уж точно хватит. Подойдут и другие современные языки, если есть подходящие библиотеки. В общем, кто что лучше знает.

что делать со словами
1. "мама", "мамочка", "мамуля"
2. "мама", "момочка", "ммаулочка"
3. "сад" - как место где садят ягодки и "сад" - место где отбывают наказание дети дошкольного возраста

Вы зачем усложняете исходную задачу этими вопросами? Подобных требований у автора-постановщика вообще не было. Подробно по пунктам:
1. Такие слова должны считаться разными. Поиск всех возможных словоформ с приставками и суффиксами по условию не требуется.
2. "Момочка" и "ммаулочка" должны считаться такими же равноправными словами, как и любые другие. Ведь проверка правописания по условию также не требуется.
3. Этот вопрос тоже неуместный. Решение проблем контекста, семантики слов также по условию не требуется.

Не умножайте сущности сверх необходимости! © У. Оккам
  • 0

#11
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

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

Автор, у вас интересная и практически полезная задача! Я вполне серьезно. Давно уже пора бы нашим форумным "гуру программирования" поразмять мозги. Пусть покажут, кто на что способен. :smoke:

У меня к вам предложение: давайте не будем требовать, чтобы программа обращалась к базе данных. Иначе, я уверен, ни одной строчки работающего кода вы здесь не увидите. Вместо этого (как это обычно здесь происходит) вам придется отвечать, какая будет применяться СУБД, почему она должна применяться в этой задаче и т.д. В итоге ваша задача скатится во флейм и религиозные войны (какая СУБД круче).

Итак, предлагаю сделать такую постановку вашей задачи. Программа может быть написана на любом языке программирования, но обязательно должна работать. :lol: Это значит, она должна:
  • Cчитывать текст из внешнего файла (имя файла программа должна получать от пользователя).
  • Файл с текстом должен быть простого формата, без специальных и скрытых символов форматирования. Например, пусть это будут простые файлы .txt, с которыми работает стандартная программа "Блокнот" (она же Notepad), поставляемая вместе с Windows.
  • Текст в файле может быть русским, английским, или и то, и другое вперемешку, все в одном файле. Допускаются все знаки препинания (:;,"!?), а также все неалфавитные и нецифровые символы, если они есть на клавиатуре (+, -, /, *, знаки $, %, и т.д.).
  • Разделять текст на отдельные слова. Словом считается любая последовательность алфавитно-цифровых символов длиной от 1 символа (например, в предложении "Я легенда" "Я" должно считаться отдельным словом). Знаки препинания в слова не входят. Если в исходном тексте какие-то слова по ошибке не были разделены пробелом (например, "Я,Легенда"), то программа должна уметь справляться с этим, и правильно разделять слова (то есть, "Я" и "Легенда").
  • Подсчитывать количество слов: всего и в том числе количество повторений каждого слова в заданном тексте.
  • Слова, начинающиеся с заглавных и строчных букв, считаются разными (или одинаковыми - уточните).
  • Выводить на экран итоговую таблицу из двух столбцов: 1) слово и 2) количество его повторений в тексте.
Как видите, за исключением использования внешней СУБД, ваши требования в такой постановке задачи были учтены. Ну как, согласны на предлагаемый вариант?

Сообщение отредактировал Visual1: 18.12.2008, 22:20:17

  • 0

#12
zladey

zladey
  • Гость
  • 6 сообщений
2 Visual1

Мне это программа нужна для работы с немецкими текстами, задача программы выявить наиболее употребляймые слова в текстах, которые предоставляют учителя перед лекциями в онлайн виде. Это должно облегчить изучение немецкого, а точнее увеличение словарного запаса, потому что будут явно выделены основные слова текстов. Тексты идут по специализации социльные науки =)

Основная функция программы составить список слов которые вообще встречаются в этих текстах и их "популярность". То есть я хотел сделать так, чтоб сперва текст разделяется на слова и потом сверяется со словами которые уже были раньше в других текстах =) я думаю что тут не нужно создавать БД, вполне можно как нибудь реализовать это по средством связи с каким либо документом... только надо подумать как это сделать и как вести статистику слов в этом случаи, я в голове представляю вполне план реализации такого, но надо еще подумать... =)=)=) слова с большой и маленькой буквы считаю равнозначными =)

а вообще план которые написан вами выше вполне достаточен для начала, потом доработать и добавить что либо в программу будет не так уже сложно =)


А вообще меня порадовало что кого то заинтересовала моя идея по поводу этой программы =)
  • 0

#13
Кими

Кими
  • В доску свой
  • 2 252 сообщений
что делать со словами типа "17-ый", "18ое", "кое-как", "2008г."

Сообщение отредактировал Кими: 19.12.2008, 08:58:36

  • 0

#14
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Вроде работает.
#!/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) количество его повторений в тексте. + само собой
  • 0

#15
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
У меня на C# для .NET 2.0, тоже пока работает по тем правилам, которые были указаны вчера. То есть, "кое-что", "кое-как", "как-нибудь" - это 4 разных слова: "кое", "что", "как" и "нибудь". "Кое" и "кое" тоже пока разные слова. Поправить все это несложно.

Исходник выложу вечером, а пока предоставляю скриншот:

Изображение


  • 0

#16
artem_g

artem_g
  • Завсегдатай
  • 206 сообщений
Алгоритм

1. Считываем текст
2. Разбиваем текст на слова
3. Упаковываем слова в двумерный массив записей, где rec.1 - слово, rec.2 - количество повторений (по умолчанию забиваем единицами)
4. Выявляем одинаковые слова массива, при их обнаружении rec.2 увеличивается на 1, повторяющееся слово удаляется
4. Исходя из условий задачи, определяем число повторений, которое необходимо, чтобы слово можно было считать частоупотребляемым.
5. В цикле проверяем - если rec.1>= то находим текущее слово в тексте и выделяем его жирным шрифтом
  • 0

#17
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
artem_g - это понятно, вы код напишите, на чем угодно. Алгоритм неполный просто сильно, имхо.

3. Упаковываем слова в двумерный массив записей, где rec.1 - слово, rec.2 - количество повторений (по умолчанию забиваем единицами)

Не понял, почему двумерный, и почему единицами.

4. Выявляем одинаковые слова массива, при их обнаружении rec.2 увеличивается на 1, повторяющееся слово удаляется

А, вот так значит... Понял почему единицами, но зачем двумерный так и осталось загадкой.
Вот как выявлять будем, проясните поподробнее. Очень интересно. Перебором что ли, раз массив? А как удаляется? Просто интересно. :smoke:

Напишите код, и сравните скорость его работы его с моим , интересно будет. :D

Сообщение отредактировал Zulkar: 19.12.2008, 16:25:14

  • 0

#18
artem_g

artem_g
  • Завсегдатай
  • 206 сообщений
сорри... сначала хотел написать двумерный массив, но потом переделал на массив записей, а слово "двумерный" убрать забыл

перебором)

как удаляться будет? в цикле ar[i]:=ar[i+1]

я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей

да и вообще, топик создан год назад, стало быть... смысл?))
  • 0

#19
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

как удаляться будет? в цикле ar[i]:=ar[i+1]
я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей

Напишите пожалуйста кусок кода, просто я не могу понять.

да и вообще, топик создан год назад, стало быть... смысл?))

zladey не смог создать новую тему и поднял старую. :smoke:
  • 0

#20
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

я могу написать прогу на Делфи, но заранее согласен, что скорость ее работы меньше, чем вашей

Ну и что же. А может, у вашей программы будет выше надежность работы. Или еще какие-то другие преимущества.

да и вообще, топик создан год назад, стало быть... смысл?))

Просьба пользователя zladey новая, она поступила 3 дня назад.
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.