Question

J'ai posté ce message à la liste de diffusion Solr, mais je suis en train ici aussi dans le cas où il y a un expert Solr qui rôdent autour.

Je suis en train d'utiliser le fragmenter regex et ai du mal à obtenir les résultats que je veux. Je suis en train d'obtenir des fragments qui commencent un caractère de mot et se terminent sur la ponctuation, mais pour une raison quelconque les fragments retournés me semble être très inflexible, malgré que j'ai fourni un grand slop. Voici les paramètres pertinents que je utilise, peut-être quelqu'un peut aider à montrer où je suis allé mal:

<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>

Il doit être de correspondance entre 400-600 caractères, en commençant par un caractère de mot et se terminant avec l'un.!. Voici un exemple d'un résultat typique:

  

. Vérifiez ces images sur. neuf panda   oursons sur l'affichage pour la première fois   Jeudi au sud-ouest de la Chine. ils sont   Moins d'un an. Ils ont juste   a récemment cessé de soins infirmiers. Il y a   seulement 1600 de ces gars-là à gauche dans la   forêts de montagne de la Chine centrale,   120 autres dans l'élevage chinois   les installations et les zoos. Et ils sont sur le point   20 qui vivent en dehors de la Chine dans les zoos.   Ils existent presque entièrement sur le bambou.   Ils peuvent vivre jusqu'à 30 ans. Et   ces petits gars finiront par obtenir   beaucoup plus grand. Ils grandiront

Comme vous pouvez le voir, il commence avec une période et se terminant sur un caractère de mot! Il est presque comme si les fragments sont tout juste de sortir comme ils le feront et l'expression rationnelle ne fait rien du tout, mais les résultats sont différents lorsque j'utilise le fragmenter gap. Dans le résultat ci-dessus, je ne vois aucune raison pour laquelle il ne devrait pas avoir dépouillé la période précédente et les deux derniers mots, il y a beaucoup de place dans le slop et dans le modèle regex. S'il vous plaît aidez-moi à comprendre ce que je fais mal ...

Merci beaucoup,

Mark

Était-ce utile?

La solution

Essayez:

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

Vous ne devriez pas avoir les premiers crochets autour \w

Et vous devez échapper au point final.

Et je ne pense pas que juste avant une autre .* quantificateurs ({400,600}) est une bonne idée, d'où le .{400,600}

Depuis est un caractère ? spécial regex, vous devez également y échapper.

Et puisque correspond à tout ., vous devriez plutôt utiliser pour [^\.!\?] correspondre quoi que ce soit mais vos personnages se terminent.

Autres conseils

Je ne l'ai jamais entendu parler de l'outil que vous travaillez avec (Solr), mais les quantificateurs dans votre expression régulière sont certainement faux. Cette expression rationnelle correspond à entre 402 et 602 caractères, où le premier est un caractère de mot, et le dernier est l'un des trois caractères de ponctuation:

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

Le point et point d'interrogation ne sont pas métacaractères dans une classe de caractères, donc il n'y a aucun point de leur échapper. \ W peut se suffire à lui-même.

Depuis le point correspond également aux 3 caractères de ponctuation, votre expression rationnelle correspond à autant de caractères que possible (jusqu'à 602), puis donner pour vous assurer que le dernier est l'un de vos 3 caractères de ponctuation.

Si vous voulez établir des priorités plus courts tirages, utilisez un quantificateur paresseux:

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

Si vous voulez que votre regex pour correspondre à une seule phrase, utilisez une classe de caractères niée:

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

Toutes précède suppose que Solr utilise des expressions régulières de style Perl. Des choses comme \ w et {} 400600 ne fonctionnent pas dans toutes les saveurs regex.

Il semble y avoir un problème si vous utilisez un WordDelimiterFilterFactory. Le problème est décrit ici http: //www.mail- archive.com/solr-user@lucene.apache.org/msg30631.html

Comme décrit dans le lien ci-dessus, une solution pourrait consister à ajouter à votre preserveOriginal="1" <=>. J'ai essayé et cela a fonctionné pour moi. Cependant, (étant nouveau à SOLR) Je ne sais pas s'il y a des inconvénients à cette approche (en dehors de l'augmentation de la taille de l'index).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top