Используйте coldfusion, чтобы получить x общее количество слов, включая ключевое слово - PullRequest
0 голосов
/ 08 марта 2011

Хорошо, это часть моего проекта с результатами поиска, в нем есть описание, возвращаемое из нескольких таблиц.Вся эта часть работает на 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'

И я получаю правильный результат поиска, однако в описании нет этого слова в показанном описании, поскольку мы ограничиваем описание 25 словами черезфункция trim_text.Это делает все описания похожими по размеру.Но не помогает доказать достоверность результатов, где ключевое слово находится ниже в описании.

Есть вопросы?Надеюсь, я сделал это очень ясно.

Я использую Coldfusion 8 Standard.Я тестирую это на своем сервере разработки.

Спасибо ...

1 Ответ

0 голосов
/ 09 марта 2011

Похоже, вам нужно найти позицию ключевого слова в строке, а затем взять символы в любую сторону.

Рассматривайте вашу строку как список, а в качестве разделителей используйте пробельные символы и точки.

Примерно так:

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

Скажите, что возвращает 42 - то есть searchTerm - это 42-е слово.

Преобразуйте это в позицию символа следующим образом:

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

Затем возьмите символы по обе стороны от этого символа:

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

Вам нужно будет определить, когда searchterm найден слишком близко к началу или концу строки, чтобы избежать ошибок, и определить, когда добавлять и / или добавлять эллипсы к контексту.

...