Python Untokenize une phrase
Il ya tellement de nombreux guides sur la façon de marquer une phrase, mais je ne trouve pas tout sur la façon de faire le contraire.
import nltk
words = nltk.word_tokenize("I've found a medicine for my disease.")
result I get is: ['I', "'ve", 'found', 'a', 'medicine', 'for', 'my', 'disease', '.']
Est-il une fonction que revient la sous peine à l'état initial. La fonction tokenize.untokenize()
pour une raison quelconque ne fonctionne pas.
Edit:
Je sais que je peux faire, par exemple, et c'est probablement ce qui résout le problème, mais je suis curieux de savoir est-il une fonction intégrée pour cela:
result = ' '.join(sentence).replace(' , ',',').replace(' .','.').replace(' !','!')
result = result.replace(' ?','?').replace(' : ',': ').replace(' \'', '\'')
- Comment avez-vous
've
à partir d'une phrase qui est utiliséhave
? C'est que ce nltk en fait, ou d'une erreur de transcription? - J'ai modifié le tokenised résultat. De toute façon c'est pour un cas général, donc vous pouvez le mettre je l'ai dans la phrase originale.
- Je suis assez sûr que ce que vous demandez n'est pas possible. Si vous avez juste le strict chaînes
"I"
et"'ve"
il est facile pour un homme de regarder et de dire "Oh, les deux doivent aller de pair sans un espace" mais pas simple programme pourrait comprendre cela. Si les pièces d'origine-de-la parole d'informations que NLTK compris de la phrase d'origine était disponible, qui pourrait être utilisé pour untokenize, maistokenize.untokenize()
a été conçu pour fonctionner avectokenize.tokenize()
et pasnltk.tokenize()
. Vous voudrez peut-être lire le livre électronique gratuit pour NLTK: nltk.org/book - J'ai édité la question de sorte que le texte source est
've
de faire correspondre le texte de réponse.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser "treebank detokenizer" -
TreebankWordDetokenizer
:Il est également
MosesDetokenizer
qui était dansnltk
mais est supprimé en raison de la les questions de licences, mais il est disponible en tant queSacremoses
package autonome.pip install nltk
maintenant (v3.2.2).l
comme un nom de variable est source de confusion. J'ai cru qu'il s'agissait d'un1
.data
. Merci.Pour inverser
word_tokenize
denltk
, je suggère à la recherche dans http://www.nltk.org/_modules/nltk/tokenize/punkt.html#PunktLanguageVars.word_tokenize et faire un peu de reverse engineering.Court de faire un fou de hacks sur nltk, vous pouvez essayer ceci:
pip install -U nltk
.utilisation
token_utils.untokenize
de iciPour moi, cela a fonctionné quand j'ai installé python nltk 3.2.5,
puis,
Si vous utilisez l'intérieur des pandas dataframe, puis
La raison
tokenize.untokenize
ne fonctionne pas c'est parce qu'il a besoin de plus d'informations que seulement les mots. Voici un exemple de programme utilisanttokenize.untokenize
:Aide Supplémentaire:
Marquer - Python Docs |
Problème Potentiel
nltk
. J'ai essayé de regarder à travers les docs, mais ne pouvais pas trouver untokenize.Je propose de garder des décalages dans la segmentation: (jeton, offset).
Je pense que, cette information est utile pour le traitement au cours de la phrase originale.
Donne:
Je suis à l'aide de code suivant sans fonction de bibliothèque pour detokeization but. Je suis à l'aide de detokenization pour certains jetons
La raison, il n'existe pas de réponse simple est que vous avez réellement besoin de la durée de lieux de l'original de jetons dans la chaîne. Si vous n'avez pas cela, et vous n'êtes pas d'ingénierie inverse de l'original de votre tokenisation, votre remonté la chaîne est basée sur des suppositions à propos de la segmentation des règles qui ont été utilisés. Si votre générateur de jetons de ne pas donner à vous couvre, vous pouvez toujours le faire si vous avez trois choses:
1) l'original de La chaîne
2) L'original de jetons
3) La modification de jetons (je suis en supposant que vous avez changé les jetons d'une certaine façon, parce que c'est la seule application pour ça, je pense que si vous avez déjà #1)
Utiliser l'original jeton de jeu pour identifier les travées (ne serait-il pas agréable si le tokenizer fait ça?) et modifier la chaîne de l'arrière vers l'avant de sorte que le couvre ne changent pas, comme vous allez.
Ici, je suis en utilisant TweetTokenizer mais il ne devrait pas d'importance aussi longtemps que le générateur de jetons que vous utilisez ne permet pas de modifier les valeurs de vos jetons de sorte qu'ils ne sont pas réellement dans la chaîne d'origine.
Utiliser le rejoindre fonction:
Vous pourriez faire un
' '.join(words)
pour revenir à la chaîne d'origine.I
et've
.