By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,847 Members | 2,402 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,847 IT Pros & Developers. It's quick & easy.

String question: Returning portion of string with words surrounding highlighted search term?

P: n/a
I'm looking to find or create an ASP script that will take a string, examine
it for a search term, and if it finds the search term in the string, return
the highlighted search term along with the words that surround it. In other
words, I want the search term highlighted and shown in an excerpt of the
context in which it appears.

Any suggestions or pointers? This behavior is most often seen as part of a
search engine. In my case, I want to use it as part of a content "scanner"
that utilizes a screen scraping component.

Jul 19 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
The hard part of this problem isn't highlighting the search term, which has
been done a million times before, but rather pulling out, say, 300
characters that precede the search term and 300 characters that follow it,
so that I can show the context that a term appeared in.

"Mike" <so***@sorry.com> wrote in message
news:bh**********@geraldo.cc.utexas.edu...
"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
I'm looking to find or create an ASP script that will take a string, examine
it for a search term, and if it finds the search term in the string,

return
the highlighted search term along with the words that surround it. In

other
words, I want the search term highlighted and shown in an excerpt of the
context in which it appears.

Any suggestions or pointers? This behavior is most often seen as part of a search engine. In my case, I want to use it as part of a content "scanner" that utilizes a screen scraping component.


Sounds like a job for replace...

replace(string, search-string, "<span style=""background-color:

#FF0000"">" & search-string & "</span>")

I haven't tried it, but it seems logical. The CSS might be flaky above, you might want to verify that background-color is a valid property. :)

--
Mike

Jul 19 '05 #2

P: n/a
This will get you started:

Dim Pos
Dim Extract
Const BufferLen = 300

Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)

If (Pos<>0) Then

' Search term found.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))

End If

It'll need some tweaking and I haven't tested it. Make sure you don't read
past either end of SourceString. I'd be a bit worried about the efficiency
of this if you're doing it multiple times on a page - you'll have to
optimise it by storing the Pos of the last hit and starting from that
position for your next iteration. Perhpas something like this (untested):

Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)
Do While Pos <> 0

' Get the extract.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))
' Next Pos.
Pos = InStr (Pos, SourceString, SearchTerm, vbTextCompare)

Loop

Try that.

Alan

"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
The hard part of this problem isn't highlighting the search term, which has been done a million times before, but rather pulling out, say, 300
characters that precede the search term and 300 characters that follow it,
so that I can show the context that a term appeared in.

"Mike" <so***@sorry.com> wrote in message
news:bh**********@geraldo.cc.utexas.edu...
"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
I'm looking to find or create an ASP script that will take a string, examine
it for a search term, and if it finds the search term in the string,

return
the highlighted search term along with the words that surround it. In

other
words, I want the search term highlighted and shown in an excerpt of the context in which it appears.

Any suggestions or pointers? This behavior is most often seen as part
of a search engine. In my case, I want to use it as part of a content "scanner" that utilizes a screen scraping component.


Sounds like a job for replace...

replace(string, search-string, "<span style=""background-color:

#FF0000"">"
& search-string & "</span>")

I haven't tried it, but it seems logical. The CSS might be flaky above,

you
might want to verify that background-color is a valid property. :)

--
Mike


Jul 19 '05 #3

P: n/a
Yep sorry about that. Try this line for the second search (notice the 'Pos +
1'):

Pos = InStr (Pos + 1, SourceString, SearchTerm, vbTextCompare)

See how you go.

Alan

"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
Alan, thanks, this is great. Function #1 works just swell, with no mishaps
at all. I combined it with a "clean out the HTML" function and a "highlight search term" function to make a genuinely useful scanner.

The only part I don't have working is a mechanism by which it will loop
through the remaining content. Function #2 appears to send the server into
an infinite loop and I can't figure out why. It would be really great if I could list out all of the "hits" for a given page. Do you have any ideas for what I should be looking at?
"Alan" <SP******************@inspire.net.nz> wrote in message
news:en*************@TK2MSFTNGP12.phx.gbl...
This will get you started:

Dim Pos
Dim Extract
Const BufferLen = 300

Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)

If (Pos<>0) Then

' Search term found.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))

End If

It'll need some tweaking and I haven't tested it. Make sure you don't read
past either end of SourceString. I'd be a bit worried about the efficiency of this if you're doing it multiple times on a page - you'll have to
optimise it by storing the Pos of the last hit and starting from that
position for your next iteration. Perhpas something like this (untested):
Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)
Do While Pos <> 0

' Get the extract.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))
' Next Pos.
Pos = InStr (Pos, SourceString, SearchTerm, vbTextCompare)

Loop

Try that.

Alan

"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
The hard part of this problem isn't highlighting the search term, which
has
been done a million times before, but rather pulling out, say, 300
characters that precede the search term and 300 characters that follow it, so that I can show the context that a term appeared in.

"Mike" <so***@sorry.com> wrote in message
news:bh**********@geraldo.cc.utexas.edu...
> "Ken Fine" <ke*****@u.washington.edu> wrote in message
> news:bh***********@nntp6.u.washington.edu...
> > I'm looking to find or create an ASP script that will take a
string, > examine
> > it for a search term, and if it finds the search term in the string, > return
> > the highlighted search term along with the words that surround it.

In > other
> > words, I want the search term highlighted and shown in an excerpt
of the
> > context in which it appears.
> >
> > Any suggestions or pointers? This behavior is most often seen as

part
of
a
> > search engine. In my case, I want to use it as part of a content
"scanner"
> > that utilizes a screen scraping component.
>
> Sounds like a job for replace...
>
> replace(string, search-string, "<span style=""background-color:
#FF0000"">"
> & search-string & "</span>")
>
> I haven't tried it, but it seems logical. The CSS might be flaky

above, you
> might want to verify that background-color is a valid property. :)
>
> --
> Mike
>
>



Jul 19 '05 #4

P: n/a
Thanks again, Alan, that did the trick! This is great. The finished code
looks like this:

<%Dim Pos
Dim Extract
Const BufferLen = 300
Searchterm=TearSearchTerm
SourceString=strRetVal5

Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)

Do While Pos <> 0

' Get the extract.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))
Response.Write "<p><font face=arial size=2><b>Location of search term
"&"<font color=red>&quot;"&Searchterm&"&quot;</font> at <a
href="&TearURL&">"&TearURL&"</a>"&":</b> char #"& Pos & "</font><br>"
FinishString=StripHTML(Extract)

Response.Write "<b>Excerpt:</b><br><font face=arial size=2> ..."&
doHighlight(FinishString, Searchterm,"hi")&" ...</font>"
' Next Pos.
Pos = InStr (Pos + 1, SourceString, SearchTerm, vbTextCompare)

Loop
%>

Interested readers can sub out the response.write business, and sub in their
own "highlight search word" function that drives the "doHighlight" widget.
(If you want this function, it's available off of planet-source-code.com; I
wrote in an extra setting to the function -- "hi" -- that highlights search
terms with a yellow background.)

StripHTML is a function to remove HTML/code from a string, you can find any
of a number of free functions that will do this for you.

A big gold star to Alan for his timely help on a not-trivial problem.

-KF
"Alan" <SP******************@inspire.net.nz> wrote in message
news:uB**************@tk2msftngp13.phx.gbl...
Yep sorry about that. Try this line for the second search (notice the 'Pos + 1'):

Pos = InStr (Pos + 1, SourceString, SearchTerm, vbTextCompare)

See how you go.

Alan

"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
Alan, thanks, this is great. Function #1 works just swell, with no mishaps
at all. I combined it with a "clean out the HTML" function and a "highlight
search term" function to make a genuinely useful scanner.

The only part I don't have working is a mechanism by which it will loop
through the remaining content. Function #2 appears to send the server into an infinite loop and I can't figure out why. It would be really great if I
could list out all of the "hits" for a given page. Do you have any ideas for
what I should be looking at?
"Alan" <SP******************@inspire.net.nz> wrote in message
news:en*************@TK2MSFTNGP12.phx.gbl...
This will get you started:

Dim Pos
Dim Extract
Const BufferLen = 300

Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)

If (Pos<>0) Then

' Search term found.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))

End If

It'll need some tweaking and I haven't tested it. Make sure you don't

read past either end of SourceString. I'd be a bit worried about the efficiency of this if you're doing it multiple times on a page - you'll have to
optimise it by storing the Pos of the last hit and starting from that
position for your next iteration. Perhpas something like this (untested):
Pos = InStr (1, SourceString, SearchTerm, vbTextCompare)
Do While Pos <> 0

' Get the extract.
Extract = Mid(SourceString, Pos - BufferLen, ((2*BufferLen) +
Len(SearchTerm)))
' Next Pos.
Pos = InStr (Pos, SourceString, SearchTerm, vbTextCompare)

Loop

Try that.

Alan

"Ken Fine" <ke*****@u.washington.edu> wrote in message
news:bh***********@nntp6.u.washington.edu...
> The hard part of this problem isn't highlighting the search term, which has
> been done a million times before, but rather pulling out, say, 300
> characters that precede the search term and 300 characters that
follow it,
> so that I can show the context that a term appeared in.
>
> "Mike" <so***@sorry.com> wrote in message
> news:bh**********@geraldo.cc.utexas.edu...
> > "Ken Fine" <ke*****@u.washington.edu> wrote in message
> > news:bh***********@nntp6.u.washington.edu...
> > > I'm looking to find or create an ASP script that will take a string, > > examine
> > > it for a search term, and if it finds the search term in the string, > > return
> > > the highlighted search term along with the words that surround
it. In
> > other
> > > words, I want the search term highlighted and shown in an

excerpt of the
> > > context in which it appears.
> > >
> > > Any suggestions or pointers? This behavior is most often seen as

part
of
> a
> > > search engine. In my case, I want to use it as part of a content
> "scanner"
> > > that utilizes a screen scraping component.
> >
> > Sounds like a job for replace...
> >
> > replace(string, search-string, "<span style=""background-color:
> #FF0000"">"
> > & search-string & "</span>")
> >
> > I haven't tried it, but it seems logical. The CSS might be flaky

above,
> you
> > might want to verify that background-color is a valid property. :)
> >
> > --
> > Mike
> >
> >
>
>



Jul 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.