Пример использования WikipediaTokenizer в Lucene - PullRequest
1 голос
/ 13 октября 2010

Я хочу использовать WikipediaTokenizer в проекте lucene - http://lucene.apache.org/java/3_0_2/api/contrib-wikipedia/org/apache/lucene/wikipedia/analysis/WikipediaTokenizer.html Но я никогда не использовал lucene. Я просто хочу преобразовать строку википедии в список токенов. Но я вижу, что в этом классе доступно только четыре метода: end, incrementToken, reset, reset (reader). Может кто-нибудь указать мне на пример, чтобы использовать его.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 октября 2010

В Lucene 3.0 метод next () удален.Теперь вы должны использовать incrementToken для итерации по токенам, и он возвращает false, когда вы достигаете конца входного потока.Чтобы получить каждый токен, вы должны использовать методы класса AttributeSource .В зависимости от атрибутов, которые вы хотите получить (термин, тип, полезная нагрузка и т. Д.), Вам нужно добавить тип класса соответствующего атрибута в ваш токенизатор, используя метод addAttribute.

Следующий пример кода из тестакласс WikipediaTokenizer, который вы можете найти, если скачаете исходный код Lucene.

...
WikipediaTokenizer tf = new WikipediaTokenizer(new StringReader(test));
int count = 0;
int numItalics = 0;
int numBoldItalics = 0;
int numCategory = 0;
int numCitation = 0;
TermAttribute termAtt = tf.addAttribute(TermAttribute.class);
TypeAttribute typeAtt = tf.addAttribute(TypeAttribute.class);

while (tf.incrementToken()) {
  String tokText = termAtt.term();
  //System.out.println("Text: " + tokText + " Type: " + token.type());
  String expectedType = (String) tcm.get(tokText);
  assertTrue("expectedType is null and it shouldn't be for: " + tf.toString(), expectedType != null);
  assertTrue(typeAtt.type() + " is not equal to " + expectedType + " for " + tf.toString(), typeAtt.type().equals(expectedType) == true);
  count++;
  if (typeAtt.type().equals(WikipediaTokenizer.ITALICS)  == true){
    numItalics++;
  } else if (typeAtt.type().equals(WikipediaTokenizer.BOLD_ITALICS)  == true){
    numBoldItalics++;
  } else if (typeAtt.type().equals(WikipediaTokenizer.CATEGORY)  == true){
    numCategory++;
  }
  else if (typeAtt.type().equals(WikipediaTokenizer.CITATION)  == true){
    numCitation++;
  }
}
...
1 голос
/ 13 октября 2010

WikipediaTokenizer tf = новый WikipediaTokenizer (новый StringReader (тест));

Token token = новый токен ();

token = tf.next (token);

http://www.javadocexamples.com/java_source/org/apache/lucene/wikipedia/analysis/WikipediaTokenizerTest.java.html

Привет

0 голосов
/ 30 мая 2014

открытый класс WikipediaTokenizerTest { static Logger logger = Logger.getLogger (WikipediaTokenizerTest.class); protected static final String LINK_PHRASES = "нажмите [[ссылка снова здесь]] нажмите [http://lucene.apache.org здесь снова] [[Категория: a b c d]]";

public WikipediaTokenizer testSimple() throws Exception {
    String text = "This is a [[Category:foo]]";
    return new WikipediaTokenizer(new StringReader(text));
}
public static void main(String[] args){
    WikipediaTokenizerTest wtt = new WikipediaTokenizerTest();

    try {
        WikipediaTokenizer x = wtt.testSimple();

        logger.info(x.hasAttributes());

        Token token = new Token();
        int count = 0;
        int numItalics = 0;
        int numBoldItalics = 0;
        int numCategory = 0;
        int numCitation = 0;

        while (x.incrementToken() == true) {
            logger.info("seen something");
        }

    } catch(Exception e){
        logger.error("Exception while tokenizing Wiki Text: " + e.getMessage());
    }


}
...