1

特定のファイルコレクション内のテキストファイルのFrequencyandInvert Document Frequency(TF-IDF)という用語を見つけたいと思います。

したがって、この場合は、ファイル内の単語の総数、ファイル内の特定の単語の出現回数を計算し、、、などaの単語を削除したいだけです。anthe

vb.netにパーサーはありますか?
前もって感謝します。

4

4 に答える 4

1

これを行う最も簡単な方法は、テキスト ファイルを 1 つの文字列に読み取り、.NET フレームワークを使用して一致するものを見つけることです。

Dim text As String = File.ReadAllText("D:\Temp\MyFile.txt")
Dim index As Integer = text.IndexOf("hello")
If index >= 0 Then
   ' String is in file, starting at character "index"
End If

または解決策 2 そのためには StreamReader と Regx が必要です。

//read file content in StreamReader
StreamReadertxt Reader = new StreamReader(fName);
szReadAll = txtReader.ReadToEnd();//Reads the whole text file to the end
txtReader.Close(); //Closes the text file after it is fully read.
txtReader = null;
//search word in file content
if (Regex.IsMatch(szReadAll, "SearchME", RegexOptions.IgnoreCase))//If the match is found in allRead
  MessageBox.Show("found");
else
  MessageBox.Show("not found");

これで質問が解決することを願っています。よろしく

于 2013-03-01T06:11:39.800 に答える
1

私が知っている最も簡単な方法は次のようなものです:

Private Function CountWords(Filename as String) As Integer
    Return IO.File.ReadAllText(Filename).Split(" ").Count 
End Function

単語を削除したい場合は、次のことができます。

Private Sub RemoveWords (Filename as String, DeleteWords as List(Of String))
    Dim AllWords() As String = IO.File.ReadAllText(Filename).Split(" ")
    Dim RemainingWords() As String = From Word As String In AllWords
                                     Where DeleteWords.IndexOf(Word) = -1

    'Do something with RemainingWords ex:
    'IO.File.WriteAllText(Filename, String.Join(vbNewLine, RemainingWords)
End Sub    

これは、単語がスペースで区切られていることを前提としています

于 2013-03-01T15:54:47.063 に答える
0

次のようなことを試すことができます:

Dim text As String = IO.File.ReadAllText("C:\file.txt")
Dim wordsToSearch() As String = New String() {"Hello", "World", "foo"}
Dim words As New List(Of String)()
Dim findings As Dictionary(Of String, List(Of Integer))

'Dividing into words'
words.AddRange(text.Split(New String() {" ", Environment.NewLine()}, StringSplitOptions.RemoveEmptyEntries))
'Discarting all the words you dont want'
words.RemoveAll(New Predicate(Of String)(AddressOf WordsDeleter))

findings = SearchWords(words, wordsToSearch)

Console.WriteLine("Number of 'foo': " & findings("foo").Count)

そして使用される機能:

Private Function WordsDeleter(ByVal obj As String) As Boolean
    Dim wordsToDelete As New List(Of String)(New String() {"a", "an", "then"})
    Return wordsToDelete.Contains(obj.ToLower)
End Function

Private Function SearchWords(ByVal allWords As List(Of String), ByVal wordsToSearch() As String) As Dictionary(Of String, List(Of Integer))
    Dim dResult As New Dictionary(Of String, List(Of Integer))()
    Dim i As Integer = 0

    For Each s As String In wordsToSearch
        dResult.Add(s, New List(Of Integer))

        While i >= 0 AndAlso i < allWords.Count
            i = allWords.IndexOf(s, i)
            If i >= 0 Then dResult(s).Add(i)
            i += 1
        End While
    Next

    Return dResult
End Function
于 2013-03-01T07:14:34.863 に答える
0

おそらく正規表現があなたを助けるでしょう:

Using System.IO
Using System.Text.RegularExpressions

...

Dim anyWordPattern As String = "\b\w+\b"
Dim myWordPattern As String = "\bMyWord\b"
Dim replacePattern As String = "\b(?<sw>a|an|the)\b"
Dim content As String = File.ReadAllText(<file name>)
Dim coll = Regex.Matches(content, anyWordPattern)
Console.WriteLine("Total words: {0}", coll.Count)
coll = Regex.Matches(content, myWordPattern, RegexOptions.Multiline Or RegexOptions.IgnoreCase)
Console.WEriteLine("My word occurrences: {0}", coll.Count)
Dim replacedContent = Regex.Replace(content, replacePattern, String.Empty, RegexOptions.Multiline Or RegexOptions.IgnoreCase)
Console.WriteLine("Replaced content: {0}", replacedContent)

使用される正規表現の説明:

  • \b - 単語境界。
  • \w - 任意の単語文字;
  • + - 量指定子、1 つ以上。
  • (?...) - 「sw」と呼ばれる名前付きグループ - ストップ ワード
  • a|an|the - 代替、「a」または「an」または「the」
于 2013-03-01T06:03:02.397 に答える