Sto usando regexp_filter in Sphinx per sostituire i termini
Nella maggior parte dei casi posso farlo ad es. gli errori di ortografia sono facili:
regexp_filter = Backround => Background
Anche lo scambio utilizzando l'acquisizione della notazione di gruppo:
regexp_filter = (Left)(Right) => 21
Tuttavia ho più problemi quando utilizzo una corrispondenza di pattern per trovare una determinata parola che voglio sostituire:
regexp_filter = (PatternWord1|PatternWord2)W+(?:w+W+){1,6}?(SearchTerm)b => NewSearchTerm
Dove NewSearchTerm sarebbe il termine con cui voglio sostituire solo 2 (lasciando 1 e il resto del modello da solo). Così
Quindi se avessi un testo "Pizza and Taco Parlor"
poi:
regexp_filter = (Pizza)W+(?:w+W+){1,6}?(Parlor)b => Store
Converti in "Pizza and Taco Store"
So che in questo caso il termine di ricerca è / 2 ma non lo èsicuro come convertire. So di poter aggiungere ad es. / 2s per renderlo plurale, ma come posso in effetti sostituirlo poiché è solo un singolo gruppo di acquisizione di diversi e voglio solo sostituire quel gruppo?
risposte:
0 per risposta № 1Quindi, se capisco la domanda. Hai una stringa che corrisponde ai seguenti criteri:
- Inizia con PattenWord1 o PatternWord2
- Immediatamente seguito da una parola maiuscola
- Forse seguita da un'altra parola che sia compresa tra 1 e 6 caratteri: consiglia di utilizzare [A-z] anziché w + W +
- Seguito da "SearchTerm"
Usiamolo come base:
PatternWord1HelloSearchTerm
E vuoi solo sostituire SearchTerm dalla stringa.
Quindi hai bisogno di un altro gruppo di pattern attorno a tutto ciò che vuoi mantenere:
regexp_filter = ((PatternWord1|PatternWord2)W+(?:w+W+){1,6}?)(SearchTerm)b => 1World
Le corrispondenze del tuo gruppo di pattern sarebbero:
- PatternWord1Hello
- PatternWord1
- Termine di ricerca
Il tuo risultato sarebbe:
PatternWord1HelloWorld