:: Архив конференции по VFP до 2005 года
Re: Тема работы.
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Можно так: алгоритм разбора на лету


В фоксе есть "волшебные" функции - GetWordCount, GetWordNum.

Пересылаем файл в строку FileToStr

Сначала запятые переводятся в пробелы, затем уничтожаются лишние пробелы,
затем предлоги, затем спецсиволы, получаем текст с массой ненужных слов:

"порядок, порядке, порядка, порядку, порядочный" и так далее

далее парсим строку, число слов в строке (содержащей содержимое файла)
получаем через GetWordCount, далее по индексу в GetWordNum
заносим во временную таблицу все слова в тексте.

Делаем select всего в другую временную таблицу, в которую добавляем поля pwfreq,- частоту использования слова в файле, и логическое modified, для котроля записанного слова.

Далее сканируем курсор с пословной выборкой и проверкой условия modified.

Сначала проверяем наличие слова в уже имеющемся словаре,
если есть, удаляем записи в первичной временной таблице, предварительно сделав select по слову.
_Tally даст частоту слова в файле
если нет, заносим в словарь, и удаляем слово из первичной таблцицы, опять-таки предварительно сделав select по слову.
_Tally даст частоту слова в файле

Удаляем из контрольной таблицы проверенное слово и добавляем в нее новую запись, в которую вносим проверенное слово,
modified как .T. и в pwfreq - значение _Tally

и так далее

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

Как не плодить такие таблицы - решайте сами.




------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: Тема работы.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Ух ты! Попробую обдумать этот алгоритм.

Спасибо большое!
Ratings: 0 negative/0 positive
Re: Тема работы.
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Не помню упоминалась ли в постах версия VFP и предвидя вопросы по поводу отсутствия GetWordCount, GetWordNum в версиях меньше седьмой, разъяснение, до VFP7 аналоги этих функций находились в Foxtools.fll и назывались WordCount и WordNum, а вот с какой версии они появились в FLL точно не скажу, но в шестой уже были.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Тема работы.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
У меня восьмерка стоит (хотя вот нашел русский хэлп и там этих функций нет
vfp.narod.ru




------------------
Ratings: 0 negative/0 positive
Re: Тема работы.
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Русский Help может быть не полным, а чтобы убедиться набей пару строчек:
?GetWordCount("Test GetWordCount") && Вернет 2
?GetWordNum("Test GetWordNum",2) && Вернет GetWordNum




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Тема работы.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, rusl!

Русского хелпа к VFP8 не существует - скорее всего ты нашёл хелп к 3-й
версии
В VFP8 это штатные функции.

P.S. Существенной частью решения твоей задачи IMHO должен быть
синтаксический анализатор - чтобы всякие падежи/числа/склонения/спряжения не
раздували "словарь" до неимоверных размеров. А если ещё и вспомнить про
возможные опечатки, омонимы/омографы и иже с ними...




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Тема работы.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Цитата:
P.S. Существенной частью решения твоей задачи IMHO должен быть
синтаксический анализатор - чтобы всякие падежи/числа/склонения/спряжения не
раздували "словарь" до неимоверных размеров. А если ещё и вспомнить про
возможные опечатки, омонимы/омографы и иже с ними...

Да, это так. Но работу для меня облегчает тот факт, что анализировать я буду только англоязычные сайты (хотя времена там тоже никто не отменял). Но к этой части я еще не приступил. Для начала хочу сделать таблицы с частотами.
Ratings: 0 negative/0 positive
Re: Тема работы.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, rusl!

Цитата:
Но работу для меня облегчает тот факт, что анализировать я буду
только англоязычные сайты
Да, существенно облегчает.
Цитата:
хотя времена там тоже никто не отменял
Ну там словоформы не так разнообразны (неправильных глаголов немного,
правильные все строго формализовано изменяются, с существительными тоже
гораздо проще...)
Цитата:
Для начала хочу сделать таблицы с частотами.
Да, для английского наверняка проще синтаксический анализ "на потом"
отнести - там не 10-15 форм одного и того-же слова будет
А структура явно проглядывает простейшая:

Слово (СловоID I, Слово C(20))
Сайт (СайтID I, БазовыйURL M, Название M)
ЧастотаСлов (СловоID I, СайтID I, Частота B)

Все страницы одного сайта сворачиваются в одно целое (т.е. нету смысла
считать частоты по отдельным страницам IMHO).
Разбор одной страницы на слова можно сделать массой способов, от
итеративного по GetWordNum()/GetWordCount() до массиво-ориентированного
через ALINES() - в VFP8 можно указать любые разделители - в т.ч. и пробелы
(к сожалению размер массива в VFP8 ограничен 65000 элементов - так что если
сильно много слов, то надо по частям "разбирать" одну страницу)...
За "частоту" на первом этапе можно взять просто число нахождений слова (т.е.
банально их суммировать) - и лишь потом можно по всей таблице частот
посчитать сумму, и перейти от абсолютных значений к относительным (а можно и
не переходить - ибо как я понимаю важно не само значение частоты, а
относительное распределение слов - от наиболее часто употребимых к наименее)

P.S. Пара простых "упрощений" - можно предварительно обрабатывать текст
статьи на предмет удаления не только пунктуации, но и "нейтральных" слов
(для которых можно завести отдельную таблицу) - т.е. слов который никак не
определяют тематику текста - предлоги, частицы, артикли, местоимения и т.п.
Обычно таких слов очень много в текстах, и можно существенно облегчить
последующий анализ, если их сразу выкинуть.
Можно сразу избавиться от регистра слов - например UPPER() всему тексту
сделать...




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 8 (Гостей: 8)

© 2000-2024 Fox Club 
Яндекс.Метрика