Нужна такая вот программа: ЧАСТОТНЫЙ СЛОВАРЬ

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Daniil
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 13.03.2004 (Сб) 19:55
Откуда: Нижний Новгород

Нужна такая вот программа: ЧАСТОТНЫЙ СЛОВАРЬ

Сообщение Daniil » 30.10.2004 (Сб) 1:50

Нужна такая вот программа: ЧАСТОТНЫЙ СЛОВАРЬ

На форме 3 текстовых поля

В первое поле помещаем слова (одно слово в строчку)

Во второе поле помещаем текст

При нажатии на кнопку "Готово" программа должны найти сколько раз слова из поля 1 употребляются (встречаются) в поле 2 и поместить этот отчет в поле 3. Подскажите, как это реализовать? Чувствую, что эту программу не долго делать, но что-то не получается.....

Пример "Поле 1: "

Я
Ты
Он
Она
Мальчик

После 2

Я и еще один мальчик пошли гулять. Ты пойдешь с нами? Мальчик ответил: НЕТ! Я сказал: как хочешь. Мальчик согласился

После нажатия на кнопку "готово"

В поле 3 должно появиться:

Я - 2
Мальчик - 3
Ты - 1


По возможности слова в поле 3 должны быть отсортированы по количеству употреблению

Например:

Мальчик - 3
Я - 2
Ты - 1



Программу частнтного словаря можно везде скачать, но вот искать по заданному списку нигде нет... Но мне вот нужен исходник на ВБ, может подскажите код?
С уважением Данил. Пишите мне на Daniil_2003@mail.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.10.2004 (Сб) 4:55

Н-да, проще селект написать :) Задача на чистые джойны.

Короче, скорее всего, подход будет циклическим. Бьешь набор слов на массив и каждое по отдельности ищешь в своем тексте. Разбитие строки на массив - Split(), поиск в строке - InStr().

После чего сортируешь свой массив пар слово-частота по второму критерию. Сортировка... ну, посмотри где-нить, хошь в статьях или примерах на этом сайте, хошь - у Кнута :) Задача довольно простая, это верно...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.11.2004 (Пн) 12:05

Код: Выделить всё
Sub FreqDict(ByVal Words As String, ByVal Text As String)
Const vbSpace As String = " ", Separators As String = ".,:;-()_"
Dim W() As String, F() As Long, I0 As Long, I As Long, N As Long, S As String

'Prepare
If Len(Words) = 0 Then Exit Sub
If Len(Text) = 0 Then Exit Sub
If Right$(Words, Len(vbNewLine)) <> vbNewLine Then Words = Words & vbNewLine

'Extracting Words
ReDim W(0)
N = 0
I0 = 1
Do
  I = InStr(I0, Words, vbNewLine)
  If I = 0 Then Exit Do
  N = N + 1
  ReDim Preserve W(0 To N)
  W(N) = UCase$(Mid$(Words, I0, I-I0))
  I0 = I + Len(vbNewLine)
Loop
If N = 0 Then Exit Sub
ReDim F(1 To N)

'Simplife Text
Text = Replace(Text, vbCrLf, vbSpace)
Text = Replace(Text, vbCr, vbSpace)
Text = Replace(Text, vbLf, vbSpace)
For I = 1 To Len(Separators)
  Text = Replace(Text, Mid$(Separators,I,1), vbSpace)
Next I
I = Len(Text)
Do
  Text = Replace(Text, vbSpace & vbSpace, vbSpace)
  If Len(Text) = I Then Exit Do
  I = Len(Text)
Loop
Text = UCase$(Trim$(Text))
If Len(Text) = 0 Then Exit Sub
Text = Text & vbSpace

'Calculate
I0 = 1
Do
  I = InStr(I0, Text, vbSpace)
  If I = 0 Then Exit Do
  S = Mid$(Text, I0, I-I0)
  For N = UBound(W) To 1 Step -1
    If S = W(N) Then Exit For
  Next N
  If N > 0 Then F(N) = F(N) + 1
  I0 = I + Len(vbSpace)
Loop

'Output
For I = 1 To UBound(W)
  Debug.Print W(I) & " - " & F(I)
Next I
End Sub


Сортировку лучше делать не отдельно (между Calculate и Output), а непосредственно в процессе подсчета слов, но мне лень. Пусть это твоим домашним заданием будет.
Lasciate ogni speranza, voi ch'entrate.

Daniil
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 13.03.2004 (Сб) 19:55
Откуда: Нижний Новгород

Сообщение Daniil » 01.11.2004 (Пн) 15:57

'Output
For I = 1 To UBound(W)
Debug.Print W(I) & " - " & F(I)
Next I
End Sub[/code]

Сортировку лучше делать не отдельно (между Calculate и Output), а непосредственно в процессе подсчета слов, но мне лень. Пусть это твоим домашним заданием будет.[/quote]


alibek А не могли бы вы мне прислать исходник? Ведь вы почти уже написали код...... мой майл в подписи....
С уважением Данил. Пишите мне на Daniil_2003@mail.ru


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 8

    TopList