Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как в Vis.B .NET определить кол-во повторов слова? Добавлено: 14.08.08 01:32  

Автор вопроса:  vb-shka
Программа такая: определяется количество повторов определенного слова и составляется рейтинг частых слов
Что нужно: узнать, как сказать вижуал бейсику, чтобы он подсчитал кол-во этих слов. не-не, не все так просто! InStr(...,...) и простой реплейс может засчитать часть слова. к примеру, вот текст: "На кухне окна", а слово "на" засчитается 2 раза из-за слова "окНА". Вот, простые пробелы тоже не помогают - в начале текста и в конце текста их нет. Просто прошу мне помочь, знаки препинания не учитывайте! Это я уже сделала. нужно только определить...

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 14.08.08 02:18
Вот на VB6

Private Sub Form_Load()
    Debug.Print WordsCount("На кухне окна. На кухне окНа", "на";)
End Sub

Function WordsCount(ByVal Text As String, ByVal Word As String, Optional CaseSensetive As Boolean = False) As Integer
    Dim k As Integer, n As Integer
    k = 1
    Do
        n = IIf(CaseSensetive, InStr(k, Text, Word, vbBinaryCompare), InStr(k, Text, Word, vbTextCompare))
        If n = 0 Then Exit Do
        If n = 1 Then
            If IsValidChar(Mid$(Text, n + Len(Word), 1)) Then WordsCount = WordsCount + 1
        ElseIf n = Len(Text) - Len(Word) + 1 Then
            If IsValidChar(Mid$(Text, n - 1, 1)) Then WordsCount = WordsCount + 1
        Else
            If IsValidChar(Mid$(Text, n - 1, 1)) And IsValidChar(Mid$(Text, n + Len(Word), 1)) Then WordsCount = WordsCount + 1
        End If
        k = n + Len(Word)
    Loop
End Function

Function IsValidChar(ByVal c As String) As Boolean
    IsValidChar = False
    Select Case c
        Case " ", vbTab, vbCr, vbLf, ",", ".", ";", ":", "-", ";(", ";)", Chr$(34)
            IsValidChar = True
    End Select
End Function

Ответить

Номер ответа: 2
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 14.08.08 02:31

Dim file As New IO.StreamReader(";D:\bash\dhbdrfnhytjnt.txt", System.Text.Encoding.GetEncoding(1251))
        Dim str As New System.Text.StringBuilder(file.ReadToEnd) '("Программа такая: определяется количество повторов определенного слова и составляется рейтинг частых слов Что нужно: узнать, как сказать вижуал бейсику, чтобы он подсчитал кол-во этих слов. не-не, не все так просто! InStr(...,...) и простой реплейс может засчитать часть слова. к примеру, вот текст: , а слово засчитается 2 раза из-за слова. Вот, простые пробелы тоже не помогают - в начале текста и в конце текста их нет. Просто прошу мне помочь, знаки препинания не учитывайте! Это я уже сделала. нужно только определить...";)
        file.Close()
        file.Dispose()
        str = str.Replace(vbNewLine, " ";)
        str = str.Replace(":", "";)
        str = str.Replace(".", "";)
        str = str.Replace(",", "";)
        str = str.Replace("!", "";)
        str = str.Replace("?", "";)
        str = str.Replace("-", " ";)
        str = str.Replace(";(", "";)
        str = str.Replace(";)", "";)
        str = str.Replace("  ", " ";)
        '..............................

        Dim startTime As Integer = My.Computer.Clock.TickCount

        Dim words() As String = str.ToString.Split(" ";)
        For k As Integer = 0 To words.Length - 1
            words(k) = words(k).ToLower
        Next
        Array.Sort(words)

        Dim dict As New Collections.Generic.Dictionary(Of String, Integer)
        Dim i, j As Integer
        Dim word As String = words(0)
        Dim count As Integer = 1

        For i = 1 To words.Length - 1
            If word = words(i) Then
                count += 1
                Continue For
            End If
            dict.Add(word, count)
            word = words(i)
            count = 1
        Next

        Dim endTime As Integer = My.Computer.Clock.TickCount

        MsgBox(endTime - startTime).ToString()
        For Each word_ As String In dict.Keys
            MsgBox(word_ + " " + dict(word_).ToString)
        Next


файл 525 кб, парсился 406 мс

Ответить

Номер ответа: 3
Автор ответа:
 vb-shka



Вопросов: 1
Ответов: 1
 Профиль | | #3 Добавлено: 14.08.08 02:47
Спасибо Вам огромное, Skywalker!!!!!!!!!!

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 14.08.08 06:59
        Dim WordRG As New Regex("\w+", RegexOptions.Compiled)
        Dim Text = "hello"
        Dim Dic As New Dictionary(Of String, Integer)
        Dim start = Now
        For Each Mt As Match In WordRG.Matches(Text)
            Dim Word = Mt.Value.ToLower
            If Dic.ContainsKey(Word) Then
                ;Dic(Word) = Dic(Word) + 1
            Else
                ;Dic(Word) = 1
            End If
        Next
        Console.WriteLine(Now.Subtract(start))
        Console.WriteLine(Dic.Count)
        For Each Pair In Dic
            Console.WriteLine("{0} : {1}", Pair.Key, Pair.Value)
        Next
        Console.ReadLine()

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам