Программа такая: определяется количество повторов определенного слова и составляется рейтинг частых слов
Что нужно: узнать, как сказать вижуал бейсику, чтобы он подсчитал кол-во этих слов. не-не, не все так просто! InStr(...,...) и простой реплейс может засчитать часть слова. к примеру, вот текст: "На кухне окна", а слово "на" засчитается 2 раза из-за слова "окНА". Вот, простые пробелы тоже не помогают - в начале текста и в конце текста их нет. Просто прошу мне помочь, знаки препинания не учитывайте! Это я уже сделала. нужно только определить...
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
Dim file As New IO.StreamReader(":\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
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
 ic(Word) = Dic(Word) + 1
Else
 ic(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()