2011-03-08 4 views
0

이것은 내 검색 결과 프로젝트의 일부로, 여러 표에서 설명이 반환되었습니다. 그 부분은 모두 100 % 작동합니다.키워드를 포함하여 총 x 단어 수를 얻으려면 coldfusion을 사용하십시오.

저는 현재 문자열을 전달하는 trim_text 함수와 몇개의 단어를 유지하려고합니다.

그러나 이제 키워드/검색어가 검색 결과의 유효성을 표시하는 데 도움이되도록 설명에 포함되도록 수정해야합니다.

아래는 기존의 trim_text 함수입니다. 수정하는데 도움이 필요합니다.

<cffunction name="trim_text" output="false" access="remote" returntype="string"> 
    <cfargument name="string" type="string" required="true"> 
    <cfargument name="word_limit" type="integer" required="false"> 

    <cfparam name="word_limit" default=20> 
    <cfparam name="snippet" default=""> 
    <cfparam name="return_string" default=""> 
    <cfset return_string = ""> 

    <cfset return_string = reReplace(string, "</?\w+(\s*[\w:]+\s*=\s*(""[^""]*""|'[^']*'))*\s*/?>", " ", "all") /> 
    <cfset return_string = reReplace(trim(return_string), "\s+", " ", "all") /> 

    <cfset snippet = reMatch("([^\s]+\s?){1,#word_limit#}", return_string) /> 

    <cfif !arrayLen(snippet)> 
     <cfreturn "" /> 
    </cfif> 

    <cfset charCount = listlen(snippet[1]) /> 
    <cfset wordCount = ((word_limit * (arrayLen(snippet) - 1)) + listLen(snippet[ arrayLen(snippet) ], " ")) /> 

    <cfif charCount gt 190> 
     <cfreturn left(snippet[1],190) & "..." /> 
    </cfif> 

    <cfset return_string = snippet[1] & "..." /> 

    <cfreturn return_string /> 

</cffunction> 

그래서 최종 목표는 키워드가 포함 된 설명입니다.

예를 들면. 우리가 25에 대한 설명을 제한하고 있기 때문에

것은 우리가 내가 키워드 '비즈니스'

검색하고 내가 정확한 검색 결과를 얻을 수 있다고 가정 해 봅시다, 그러나 설명은 그림과 설명에 그 단어가 없습니다 단어, trim_text 함수를 통해. 그것은 모든 설명을 비슷한 크기로 만듭니다. 그러나 설명에서 키워드가 더 아래에있는 결과의 유효성을 입증하는 데는 도움이되지 않습니다.

질문 있으십니까? 나는 이것을 아주 분명히하기를 희망한다.

저는 Coldfusion 8 Standard를 사용하고 있습니다. 내 개발 서버에서 이것을 테스트하고 있습니다.

는 문자열에서 키워드의 위치를 ​​찾을 필요 같은

+1

왜 내장 CF 검색을 사용하고 있지 않습니까? – orangepips

+0

무슨 소리 야? – crosenblum

+0

@crosenblum : ''을 사용하여 정보를 색인하면 ''을 사용하여 검색 결과를 문맥 강조 표시 할 수 있습니다. – orangepips

답변

0

이 소리 ... 감사합니다, 다음 문자를 양쪽을.

문자열을 목록으로 처리하고 공백 문자와 punction을 구분 기호로 사용하십시오. 이 같은

뭔가 :

<cfset wordFoundPos = listFindNoCase(string, searchTerm, " ,.-:;") />

말 (42)을 반환 - 즉, SEARCHTERM는 42 단어입니다.

과 같이 문자 위치로 그 변환 :

<cfset context = mid(190, charPos-90, string) />

당신이 필요합니다

가 SEARCHTERM 감지하기 :

<cfset charPos = findnocase(1, string, searchTerm) />

그런 다음 문자의 특징 양쪽을 잡아 오류를 방지하기 위해 문자열의 시작 또는 끝과 너무 가깝게 발견되고, 타원을 문맥에 추가 및/또는 앞에 추가 할 때 작동합니다.

+0

좋은 답변입니다. 비슷한 작업을하고 있었지만 오류가없는 결과를 얻으려면 문자열 전문가 나 정규 표현식 전문가가 필요하다고 생각했습니다. 나는이 접근법을 시도 할 것이다. – crosenblum

관련 문제