Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано, как найти предложения в текстовом файле, который содержит совпадения для каждого из указанных наборов слов. Хотя массив терминов поиска жестко закодирован в этом примере, он также может быть динамически заполнен во время выполнения. В этом примере запрос возвращает предложения, содержащие слова "Исторически", "данные" и "интегрированные".
Пример
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
Запрос работает, сначала разделив текст на предложения, а затем разделив предложения на массив строк, в которых хранится каждое слово. Для каждого из этих массивов Distinct метод удаляет все повторяющиеся слова, а затем запрос выполняет Intersect операцию в массиве слов и массиве wordsToMatch
. Если количество элементов пересечения совпадает с количеством элементов массива wordsToMatch
, то все слова найдены, и возвращается исходное предложение.
В вызове Splitзнаки препинания используются в качестве разделителей, чтобы удалить их из строки. Если вы этого не сделали, например, можно иметь строку "Исторически", которая не будет соответствовать "Исторически" в массиве wordsToMatch
. В зависимости от типов препинания, найденных в исходном тексте, может потребоваться использовать дополнительные разделители.
Компиляция кода
Создайте проект консольного приложения Visual Basic с инструкцией Imports
для пространства имен System.Linq.