Aracılığıyla paylaş


Nasıl yapılır: Belirtilen Sözcük Kümesini İçeren Tümceleri Sorgulama (LINQ) (Visual Basic)

Bu örnekte, belirli bir sözcük kümesinin her biri için eşleşmeler içeren bir metin dosyasındaki tümcelerin nasıl bulunduğunu gösterir. Bu örnekte arama terimleri dizisi sabit kodlanmış olsa da, çalışma zamanında dinamik olarak da doldurulabilir. Bu örnekte sorgu, "Geçmişe dönük", "veriler" ve "tümleşik" sözcüklerini içeren tümceleri döndürür.

Örnek

Class FindSentences

    Shared Sub Main()
        Dim text As String = "Historically, the world of data and the world of objects " &
        "have not been well integrated. Programmers work in C# or Visual Basic " &
        "and also in SQL or XQuery. On the one side are concepts such as classes, " &
        "objects, fields, inheritance, and .NET Framework APIs. On the other side " &
        "are tables, columns, rows, nodes, and separate languages for dealing with " &
        "them. Data types often require translation between the two worlds; there are " &
        "different standard functions. Because the object world has no notion of query, a " &
        "query can only be represented as a string without compile-time type checking or " &
        "IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " &
        "objects in memory is often tedious and error-prone."

        ' Split the text block into an array of sentences.
        Dim sentences As String() = text.Split(New Char() {".", "?", "!"})

        ' Define the search terms. This list could also be dynamically populated at run time
        Dim wordsToMatch As String() = {"Historically", "data", "integrated"}

        ' Find sentences that contain all the terms in the wordsToMatch array
        ' Note that the number of terms to match is not specified at compile time
        Dim sentenceQuery = From sentence In sentences
                            Let w = sentence.Split(New Char() {" ", ",", ".", ";", ":"},
                                                   StringSplitOptions.RemoveEmptyEntries)
                            Where w.Distinct().Intersect(wordsToMatch).Count = wordsToMatch.Count()
                            Select sentence

        ' Execute the query
        For Each str As String In sentenceQuery
            Console.WriteLine(str)
        Next

        ' Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()
    End Sub

End Class
' Output:
' Historically, the world of data and the world of objects have not been well integrated

Sorgu, önce metni cümlelere bölerek ve sonra tümceleri her sözcüğü barındıran bir dize dizisine bölerek çalışır. Her bir dizi için, Distinct metodu tüm yinelenen sözcükleri kaldırır ve ardından sorgu sözcük dizisi ile Intersect dizisi üzerinde bir wordsToMatch işlemi gerçekleştirir. Kesişim sayısı dizinin sayısıyla wordsToMatch aynıysa, tüm sözcükler sözcüklerde bulunur ve özgün cümle döndürülür.

Split çağrısında, noktalama işaretleri, bunları dizgeden kaldırmak için ayırıcı olarak kullanılır. Bunu yapmadıysanız, örneğin, wordsToMatch dizisindeki "Tarihsel olarak," ifadesiyle eşleşmeyen bir "Tarihsel olarak" metniniz olabilir. Kaynak metinde bulunan noktalama işaretlerinin türlerine bağlı olarak ek ayırıcılar kullanmanız gerekebilir.

Kodu derleme

System.Linq ad alanı bildirimi içeren bir Imports Visual Basic konsol uygulaması projesi oluşturun.

Ayrıca bakınız