2012-02-21 9 views
0

検索結果を表示する際に、検索結果の表示方法と同様に、検索語句を含むプレビュー文字列を入力する必要があります。長い文字列内で検索クエリの回りにサマリー文字列を取得するにはどうすればよいですか?

どのように単語を分割することなく長い文字列内で検索用語のコンテキストを取得できますか?

例:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum. 

検索語:私はプログラム的に結果を返すことができますどのようにsed diam nonummy

:長い文字列を考えると

... consectetuerアジパスエリートノンダムsed diam n ibh euismod tincidunt ...

私は上記の検索用語の周りに3つの単語を使用しています。

答えて

0

次は、私のために働いて、ティムピートカーの助けを借りてこのquestionを助けてくれました。

<?php 
function summarize($haystack,$needle,$wordLimit = 5) { 

    // first get summary of text around key word (needle) 
    $preg_safe = str_replace(" ", "\s", preg_quote($needle)); 
    $pattern = "/(\w*\S\s+){0,$wordLimit}\S*\b($preg_safe)\b\S*(\s\S+){0,$wordLimit}/ix"; 
    if (preg_match_all($pattern, $haystack, $matches)) { 
     $summary = str_replace(strtolower($needle), "<strong>$needle</strong>", $matches[0][0]) . '...'; 
    } else { 
     $summary = false; 
    } 

    return $summary; 
} 
$haystack = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.'; 
$needle = 'dolor sit amet'; 
echo summarize($haystack,$needle); 
?> 
0

あなたの弦の大きさはどれくらいですか?

各単語とその位置を文字列に保存できます。

次に、クエリを実行して位置を取得し、[position-offset、position + offset]文字列を返します。

strposを使用して、探している用語の位置を見つけることができます。

http://php.net/manual/en/function.strpos.php

次にオフセットのアイデアを使用するか、またはあなたが完全な言葉を返すようにしたい場合は、スペースまたはその位置の文字列ストアの先頭を見つけるまで、後方charで文字を行きます。 その後、同じアイデアをその位置に保存します。

+0

ありがとうzad。私の弦は、通常約1000語です。 – Ryan

関連する問題