Оптимизировать код для поиска нескольких ключевых слов в текстовом документе - PullRequest
0 голосов
/ 12 сентября 2018

Код ниже отлично работает и извлекает необходимые разделы из текстового документа. Мы должны искать около 50 ключевых слов по одному в документе, как мы можем оптимизировать этот код. Поскольку при текущем подходе мы ищем одно ключевое слово, затем снова открываем документ и ищем снова. Это занимает очень много времени на выполнение. Любые предложения.

НИЖЕ код: Извлечение текста между двумя заголовками, как его оптимизировать, чтобы мы могли заставить его работать для поиска по 50 ключевым словам ... открывая документ один раз и сканируя до конца ..

function ExtractSectionsFromWordDoc{
Param([string]$SourceFile, [string]$Category, [string]$SearchKeyword1, [string]$SearchKeyword2, [string]$TableName)

$word = New-Object -ComObject Word.Application
$word.Visible = $false
$doc = $word.Documents.Open($SourceFile,$false,$true)
$sel = $word.Selection 
$paras = $doc.Paragraphs 

foreach ($para in $paras) 
{ 
    $style = $para.Style 
    If ($style.NameLocal -eq "Heading 2") 
    { 

        if ($para.Range.Text -match $SearchKeyword1)
        {
            $startPosition = $para.Range.Start
            Write-Host $startPosition
        }
        if ($para.Range.Text -match $SearchKeyword2)
        {
            $endPosition = $para.Range.Start
            Write-Host $endPosition
            break
        }
    }
} 
[array]$content=New-Object System.Collections.ArrayList
$content=$doc.Range($startPosition, $endPosition).text
$content = $content -replace "'", ""

# cleanup com objects
$doc.Close()
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...