Domanda

ho postato questo messaggio alla mailing list Solr, ma sto cercando anche qui nel caso ci sia un esperto di Solr in agguato intorno.

Sto cercando di utilizzare il fragmenter regex e sto avendo un momento difficile ottenere i risultati che voglio. Sto cercando di ottenere frammenti che iniziano su un carattere di parola e terminano sulla punteggiatura, ma per qualche motivo i frammenti da restituire a me sembra di essere molto inflessibile, nonostante ciò ho fornito una grande slop. Qui ci sono i parametri rilevanti che sto usando, forse qualcuno può aiutare a sottolineare dove ho sbagliato:

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

Questo dovrebbe essere la corrispondenza tra i 400-600 caratteri, che inizia con un carattere di parola e termina con uno dei.!?. Ecco un esempio di un tipico risultato:

  

. Controllare queste immagini fuori. nove panda   cuccioli esposti per la prima volta   Giovedi in Cina sud-occidentale. Loro sono   meno di un anno di età. Hanno appena   recentemente smesso di cura. Ci sono   solo 1.600 di questi ragazzi lasciato in   foreste montane della Cina centrale,   altri 120 in allevamento cinese   strutture e zoo. E sono circa   20 che vivono fuori della Cina negli zoo.   Esistono quasi interamente in bambù.   Possono vivere fino a 30 anni. E   questi ragazzi poco finiranno per ottenere   molto più grande. Faranno crescere

Come si può vedere, si sta iniziando con un periodo e termina su un carattere di parola! E 'quasi come se i frammenti sono solo venendo fuori come vogliono e l'espressione regolare non sta facendo nulla, ma i risultati sono diversi quando uso il fragmenter divario. Nel risultato di cui sopra non vedo alcuna ragione per cui non avrebbe dovuto spogliato fuori del periodo precedente e le ultime due parole, v'è abbondanza di stanza nel slop e nel modello regex. Ti prego, aiutami a capire cosa sto facendo male ...

Grazie mille,

Mark

È stato utile?

Soluzione

Prova:

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

Non dovrebbe essere necessario le prime parentesi quadre intorno \w

E si dovrebbe sfuggire il punto finale.

E non credo .* poco prima di un altro quantificatore ({400,600}) è una buona idea, da cui il .{400,600}

Dal ? è un carattere speciale in regex, si dovrebbe anche sfuggire.

E poiché . corrisponde a qualsiasi cosa, si dovrebbe piuttosto usare [^\.!\?] al fine di corrispondere nulla ma i tuoi personaggi che finiscono.

Altri suggerimenti

Non ho mai sentito parlare di strumento di cui si sta lavorando (Solr), ma i quantificatori nella vostra espressione regolare sono sicuramente sbagliato. Questa espressione regolare corrisponderà tra 402 e 602 caratteri, dove il primo è un carattere di parola, e l'ultimo è uno dei tre segni di punteggiatura:

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

Il punto e il punto interrogativo non sono metacaratteri all'interno di una classe di caratteri, quindi non c'è nessun punto loro fuga. \ W può stare in piedi da solo.

Dato che il punto corrisponde anche i personaggi 3 punteggiatura, la vostra espressione regolare corrisponderà il maggior numero possibile di caratteri (fino a 602), e poi dare indietro per assicurarsi che l'ultimo è uno dei tuoi 3 caratteri di punteggiatura.

Se si vuole dare priorità tirature più brevi, utilizzare un quantificatore pigro:

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

Se volete che il vostro regex per abbinare solo una frase, utilizzare una classe di caratteri negata:

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

Tutto ciò presuppone che Solr utilizza in stile Perl espressioni regolari. Cose come \ w e {400.600} non funzionano in tutti i sapori regex.

Sembra che ci sia un problema se si utilizza un WordDelimiterFilterFactory. Il problema è descritto qui http: //www.mail- archive.com/solr-user@lucene.apache.org/msg30631.html

Come descritto nel link qui sopra, una soluzione potrebbe essere quella di aggiungere al vostro preserveOriginal="1" <=>. Ho provato questo e ha funzionato per me. Tuttavia, (essendo nuovo SOLR) non so se ci sono inconvenienti di questo approccio (oltre ad aumentare la dimensione dell'indice).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top