java lucene analyzer

java lucene analizador personalizado y tokenizer creando un problema en las compensaciones de termvector?



analyzer (2)

¿Qué versión de Lucene estás usando? Estoy mirando el código de superclase para cambios de rama y comportamiento de 3x con cada versión.

Es posible que desee comprobar el código de public final boolean incrementToken() donde se calcula el offset .

También veo esto:

/** * <p> * As of Lucene 3.1 the char based API ({@link #isTokenChar(char)} and * {@link #normalize(char)}) has been depreciated in favor of a Unicode 4.0 * compatible int based API to support codepoints instead of UTF-16 code * units. Subclasses of {@link CharTokenizer} must not override the char based * methods if a {@link Version} >= 3.1 is passed to the constructor. * <p> * <p> * NOTE: This method will be marked <i>abstract</i> in Lucene 4.0. * </p> */

Por cierto, puedes reescribir la declaración de cambio como

@Override protected boolean isTokenChar(int c) { switch(c) { case '','': case ''.'': case ''-'': case ''_'': case '' '': return false; default: return true; } }

Tengo un problema sobre las compensaciones luve termvector que es cuando analicé un campo con mi analizador personalizado que dará las compensaciones no válidas para termvector, pero está bien con el analizador estándar, aquí está mi código analizador

public class AttachmentNameAnalyzer extends Analyzer { private boolean stemmTokens; private String name; public AttachmentNameAnalyzer(boolean stemmTokens, String name) { super(); this.stemmTokens = stemmTokens; this.name = name; } @Override public TokenStream tokenStream(String fieldName, Reader reader) { TokenStream stream = new AttachmentNameTokenizer(reader); if (stemmTokens) stream = new SnowballFilter(stream, name); return stream; } @Override public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException { TokenStream stream = (TokenStream) getPreviousTokenStream(); if (stream == null) { stream = new AttachmentNameTokenizer(reader); if (stemmTokens) stream = new SnowballFilter(stream, name); setPreviousTokenStream(stream); } else if (stream instanceof Tokenizer) { ( (Tokenizer) stream ).reset(reader); } return stream; } }

¿Qué pasa con esta "Ayuda requerida"


el problema con el analizador fue que publiqué el código para el analizador antes; en realidad, el flujo de token necesita reposo para cada nueva entrada de texto que se va a convertir en token.

public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException { TokenStream stream = (TokenStream) getPreviousTokenStream(); if (stream == null) { stream = new AttachmentNameTokenizer(reader); if (stemmTokens) stream = new SnowballFilter(stream, name); setPreviousTokenStream(stream); // ---------------> problem was here } else if (stream instanceof Tokenizer) { ( (Tokenizer) stream ).reset(reader); } return stream; }

cada vez que establezco la secuencia de token anterior el siguiente campo de texto que viene tiene que ser tokenizado por separado, siempre comienza con la compensación final de la última secuencia de token que hace que el término vector offset sea incorrecto para una nueva transmisión, ahora funciona bien así

ublic TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException { TokenStream stream = (TokenStream) getPreviousTokenStream(); if (stream == null) { stream = new AttachmentNameTokenizer(reader); if (stemmTokens) stream = new SnowballFilter(stream, name); } else if (stream instanceof Tokenizer) { ( (Tokenizer) stream ).reset(reader); } return stream; }