2

このメッセージを Solr メーリング リストに投稿しましたが、Solr の専門家が潜んでいる場合に備えて、ここでも試しています。

正規表現フラグメンタを使用しようとしていますが、必要な結果を得るのに苦労しています。単語の文字で始まり句読点で終わるフラグメントを取得しようとしていますが、何らかの理由で返されるフラグメントは非常に柔軟性がないように見えます。ここに私が使用している関連するパラメーターがあります。誰かが私が間違っている場所を指摘するのを助けることができるかもしれません:

<str name="hl.fragsize">500</str>
<str name="hl.fragmenter">regex</str>
<str name="hl.regex.slop">0.8</str>
<str name="hl.regex.pattern">[\w].*{400,600}[.!?]</str>
<str name="hl">true</str>
<str name="q">chinese</str>

これは、単語の文字で始まり、.!? のいずれかで終わる、400 ~ 600 文字の間で一致する必要があります。典型的な結果の例を次に示します。

. これらの写真をチェックしてください。木曜日、中国南西部で初めて展示された9匹のパンダの子。彼らは1歳未満です。彼らはつい最近授乳をやめました。中国中部の山林には 1,600 頭しか残っておらず、中国の繁殖施設や動物園には 120 頭しか残っていません。中国国外の動物園には約20頭いる。それらはほぼ完全に竹に存在します。彼らは30歳まで生きることができます。そして、これらの小さな人たちは、最終的にははるかに大きくなります. 彼らは成長するでしょう

ご覧のとおり、ピリオドで始まり単語文字で終わっています。フラグメントが思い通りに出てきて、正規表現はまったく何もしていないように見えますが、ギャップ フラグメンタを使用すると結果が異なります。上記の結果では、前のピリオドと最後の 2 つの単語を削除してはならない理由がわかりません。スロップと正規表現パターンには十分な余地があります。私が間違っていることを理解するのを手伝ってください...

どうもありがとう、

マーク

4

3 に答える 3

3

試す:

\w[^\.!\?]{400,600}[\.!\?]

最初の角括弧は必要ありません\w

そして、最後のドットをエスケープする必要があります。

.*そして、別の数量詞 ( ) の直前に置く{400,600}のは良い考えではないと思います。.{400,600}

は正規表現の特殊文字であるため?、エスケープする必要もあります。

また、 は何にでも一致するため、末尾の文字以外に一致させるために.使用する必要があります。[^\.!\?]

于 2008-12-12T22:15:42.040 に答える
1

あなたが使用しているツール (Solr) については聞いたことがありませんが、正規表現の量指定子は明らかに間違っています。この正規表現は 402 から 602 文字の間で一致します。最初の文字は単語の文字で、最後の文字は 3 つの句読点文字のいずれかです。

\w.{400,600}[.!?]

ドットと疑問符は文字クラス内のメタ文字ではないため、エスケープしても意味がありません。\w 自立できます。

ドットは 3 つの句読点文字にも一致するため、正規表現はできるだけ多くの文字 (最大 602) に一致し、最後の文字が 3 つの句読点文字の 1 つであることを確認します。

短い実行を優先したい場合は、遅延量指定子を使用します。

\w.{400,600}?[.!?]

正規表現を 1 つの文だけに一致させたい場合は、否定文字クラスを使用します。

\w[^.!?]{400,600}[.!?]

上記はすべて、Solr が Perl スタイルの正規表現を使用していることを前提としています。\w や {400,600} などは、すべての正規表現で機能するとは限りません。

于 2008-12-13T12:55:24.433 に答える
0

を使用している場合、問題があるようですWordDelimiterFilterFactory。問題はここで説明されています http://www.mail-archive.com/solr-user@lucene.apache.org/msg30631.html

上記のリンクで説明されているように、1 つの解決策はpreserveOriginal="1"WordDelimiterFilterFactory. 私はこれを試してみましたが、うまくいきました。ただし、(SOLR を初めて使用するため) このアプローチに欠点があるかどうかはわかりません (インデックス サイズを大きくする以外に)。

于 2011-06-28T08:58:46.787 に答える