If you are on Windows and have Acrobat Pro (not reader), you can try the old Component Object Model with Python or VBA.

import win32com, winerror, os
from win32com.client.dynamic import ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
win32com.client.gencache.EnsureModule('{E64169B3-3592-47d2-816E-602C5C13F328}', 0, 1, 1)
avDoc = win32com.client.DispatchEx('AcroExch.AVDoc')
avDoc.Open(src, src)
avDoc.BringToFront()
pdDoc = avDoc.GetPDDoc()
jsoObject = pdDoc.GetJSObject()
for pageNo in range(1):
    pdfPage = pdDoc.AcquirePage(pageNo)
    pageHL = win32com.client.DispatchEx('AcroExch.HiliteList')
    _ = pageHL.Add(0, 9000)
    pageSel = pdfPage.CreatePageHilite(pageHL)
    pdfText = ""
    for wordNo in range(pageSel.GetNumText()):
        word = pageSel.GetText(wordNo)
        pdfText += word
        if keyword in pdfText:
            wordToHl = win32com.client.DispatchEx('AcroExch.HiliteList')
            wordToHl.Add(wordNo, 1)
            wordHl = pdfPage.CreateWordHilite(wordToHl)
            rect = wordHl.GetBoundingRect()
            annot = jsoObject.AddAnnot()
            props = annot.GetProps()
            props.Type = "Square"
            props.Page = pageNo
            props.Hidden = False
            props.Lock = True
            props.Name = word
            props.NoView = False
            props.Opacity = 0.3
            props.ReadOnly = True
            props.Style = "S"
            props.ToggleNoView = False
            props.PopupOpen = False
            popupRect = [rect.Left - 5, rect.Top + 5, rect.Left + 40, rect.Top - 20]
            props.Rect = popupRect
            props.PopupRect = popupRect
            props.StrokeColor = jsoObject.Color.Red
            props.FillColor = jsoObject.Color.Yellow
            annot.SetProps(props)
            print(f'Found {keyword}')