Є два варіанти питання OP:
- Що таке "процес отримання токенів з TokenStream"?
- "Хтось може пояснити, як отримати токен-подібну інформацію з TokenStream?"
Останні версії документації до Lucene дляToken
say (курсив додано):
ПРИМІТКА: Починаючи з 2.9 ... більше не потрібно використовувати Token, з новим API TokenStream його можна використовувати як зручний клас, що реалізує всі атрибути, що особливо корисно для легкого переходу зі старого на новий API TokenStream.
І TokenStream
каже свій API:
... перейшов із заснування маркера на засіб атрибутів ... найкращим способом зберігання інформації про маркер є використання AttributeImpls.
Інші відповіді на це запитання охоплюють №2 вище: як отримати токеноподібну інформацію з a TokenStream
"новим" рекомендованим способом, використовуючи атрибути. Читаючи документацію, розробники Lucene припускають, що ця зміна була внесена, зокрема, для зменшення кількості окремих об’єктів, створених одночасно.
Але, як деякі люди зазначали в коментарях до цих відповідей, вони не відповідають прямо No1: як отримати, Token
якщо ви справді хочете / потребуєте такого типу?
З таким же зміною API , що робить , тепер знаряддя і може бути використаний з TokenStream.addAttribute так само , як інші відповіді показують на і . Тож вони справді відповіли на цю частину вихідного запитання, просто не показали.TokenStream
AttributeSource
Token
Attribute
CharTermAttribute
OffsetAttribute
Важливо, що, хоча цей підхід дозволить вам отримати доступ Token
під час циклу, це все одно лише один об’єкт, незалежно від того, скільки логічних маркерів знаходиться в потоці. Кожен заклик до incrementToken()
змінитиме стан Token
повернення з addAttribute
; Отже, якщо ваша мета - створити колекцію різних Token
об’єктів, які будуть використовуватися за межами циклу, вам доведеться виконати додаткову роботу, щоб створити новий Token
об’єкт як (глибоку?) Копію.
CharTermAttributeImpl.toString()
цього