कोड को देखते हुए Lucene 3.0.1 के तहतStandardTokenizer व्यवहार
import java.io.*;
import org.apache.lucene.analysis.*;
import org.apache.lucene.util.Version;
public class MyAnalyzer extends Analyzer {
public TokenStream tokenStream(String fieldName, Reader reader) {
return
new StopFilter(
true,
new StandardTokenizer(Version.LUCENE_30, reader),
StopAnalyzer.ENGLISH_STOP_WORDS_SET
);
}
private static void printTokens(String string) throws IOException {
TokenStream ts = new MyAnalyzer().tokenStream("default", new
StringReader(string));
TermAttribute termAtt = ts.getAttribute(TermAttribute.class);
while(ts.incrementToken()) {
System.out.print(termAtt.term());
System.out.print(" ");
}
System.out.println();
}
public static void main(String[] args) throws IOException {
printTokens("one_two_three"); // prints "one two three"
printTokens("four4_five5_six6"); // prints "four4_five5_six6"
printTokens("seven7_eight_nine"); // prints "seven7_eight nine"
printTokens("ten_eleven11_twelve"); // prints "ten_eleven11_twelve"
}
}
चल रहा है मैं समझ सकता क्यों one_two_three
और four4_five5_six6
tokenized कर रहे हैं के रूप में वे कर रहे हैं, के रूप में इस StandardTokenizer class header Javadoc से समझाया गया है। लेकिन अन्य दो मामले अधिक सूक्ष्म हैं और मैं बिल्कुल यकीन नहीं हूं कि मुझे विचार मिलता है।
Q1: seven
के बाद 7
की उपस्थिति eight
लेकिन nine
को अलग से यह संयुक्त टोकन बनाता, क्यों ten
eleven11
से चिपका रहा है?
Q2: वहाँ अंडरस्कोर पर StandardTokenizer
हमेशा विभाजन बनाने के लिए किसी भी मानक और/या आसान तरीका है?
लेकिन ऐसा करने से मुझे लगता है कि है कि नियम गलत शुरुआत ऑफसेट और अंत गुण ऑफसेट होगा, है ना? – w4nderlust