使用coldfusion来获得x个词总数,包括关键词

时间:2011-03-08 17:13:15

标签: coldfusion word coldfusion-8

好的,这是我的搜索结果项目的一部分,在其中,我有从多个表返回的描述。所有这一部分都是100%工作。

我目前使用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>

所以我的最终目标是包含关键字的描述。

例如。

我们说我正在搜索关键字'business'

我得到了正确的搜索结果,但是描述在所示描述中没有该词,因为我们通过trim_text函数将描述限制为25个单词。它使所有描述看起来大小相似。但无法证明关键字在描述中进一步下降的结果的有效性。

有任何问题吗?我希望我说得很清楚。

我正在使用Coldfusion 8 Standard。我正在我的开发服务器上测试它。

谢谢......

1 个答案:

答案 0 :(得分:0)

听起来你需要在字符串中找到关键字的位置,然后取任意一边的字符。

将字符串视为列表,并使用空格字符和punction作为分隔符。

这样的事情:

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

假设返回42 - 也就是说,searchTerm是第42个单词。

将其转换为如此的字符位置:

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

然后抓住那个角色两边的角色:

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

您需要检测何时发现searchterm过于接近字符串的开头或结尾以避免错误,并确定何时将省略号附加和/或预先添加到上下文中。