0

これは私の検索結果プロジェクトの一部です。その中には、複数のテーブルから説明が返されています。その部分はすべて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>

したがって、私の最終目標は、キーワードを含む説明です。

たとえば、

キーワード「ビジネス」を検索しているとしましょう

正しい検索結果が得られましたが、trim_text関数を使用して説明を25語に制限しているため、表示されている説明にその単語が含まれていません。これにより、すべての説明のサイズが同じように見えます。ただし、キーワードが説明のさらに下にある場合は、結果の有効性を証明するのに役立ちません。

質問は?私はこれを非常に明確にしたと思います。

Coldfusion8Standardを使用しています。これを開発サーバーでテストしています。

ありがとうございました...

4

1 に答える 1

0

文字列内のキーワードの位置を見つけて、どちらかの側の文字を取得する必要があるようです。

文字列をリストとして扱い、空白文字とpunctionをデリミタとして使用します。

このようなもの:

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

42を返すとしましょう。つまり、searchTermは42番目の単語です。

次のように文字位置に変換します。

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

次に、その文字のいずれかの側の文字を取得します。

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

エラーを回避するために、検索語が文字列の先頭または末尾に近すぎる場合を検出し、コンテキストに省略記号を追加または追加するタイミングを決定する必要があります。

于 2011-03-09T00:51:42.380 に答える