Il y a deux variantes dans la question du PO :
- Qu'est-ce que "le processus d'obtention de jetons à partir d'un TokenStream" ?
- "Quelqu'un peut-il expliquer comment obtenir des informations de type jeton à partir d'un TokenStream ?"
Les versions récentes de l Documentation de Lucene pour Token
disent (c'est nous qui soulignons) :
REMARQUE : Depuis la version 2.9 ... il est pas nécessaire Il n'est plus nécessaire d'utiliser Token, avec la nouvelle API TokenStream, elle peut être utilisée comme classe de commodité qui implémente tous les attributs, ce qui est particulièrement utile pour passer facilement de l'ancienne à la nouvelle API TokenStream.
Et TokenStream
dit son API :
... est passé d'un système basé sur des jetons à un système basé sur des attributs ... la meilleure façon de stocker les informations d'un jeton est d'utiliser des AttributeImpls.
Les autres réponses à cette question couvrent le point 2 ci-dessus : comment obtenir de type jeton des informations provenant d'un TokenStream
de la "nouvelle" manière recommandée en utilisant des attributs. En lisant la documentation, les développeurs de Lucene suggèrent que ce changement a été effectué, en partie, pour réduire le nombre d'objets individuels créés à la fois.
Mais comme certaines personnes l'ont fait remarquer dans les commentaires de ces réponses, elles ne répondent pas directement à la question n° 1 : comment obtenir une Token
si vous avez vraiment envie/besoin de ce type ?
Avec le même changement d'API qui rend TokenStream
un AttributeSource
, Token
met désormais en œuvre Attribute
et peut être utilisé avec TokenStream.addAttribute tout comme les autres réponses montrent pour CharTermAttribute
et OffsetAttribute
. Ils ont donc bien répondu à cette partie de la question initiale, mais ils ne l'ont pas montrée.
Il est important que, bien que cette approche vous permette d'accéder à Token
pendant que vous bouclez, il ne s'agit toujours que d'un seul objet, quel que soit le nombre de jetons logiques dans le flux. Chaque appel à incrementToken()
changera l'état de la Token
renvoyé par addAttribute
Donc si votre but est de construire une collection de différentes Token
à utiliser en dehors de la boucle, vous devrez effectuer un travail supplémentaire pour créer un objet de type nouveau Token
comme une copie (profonde ?).