Est-il un moyen de convertir le nombre de mots pour les nombres Entiers?
J'ai besoin de convertir one
en 1
, two
en 2
et ainsi de suite.
Est-il un moyen de le faire avec une bibliothèque ou d'une classe ou quoi que ce soit?
- voir aussi: stackoverflow.com/questions/70161/...
- Peut-être que ce serait utile: pastebin.com/WwFCjYtt
- Si quelqu'un est toujours à la recherche d'une réponse à cela, j'ai pris l'inspiration de toutes les réponses ci-dessous et créé un paquet python: github.com/careless25/text2digits
- J'ai utiliser les exemples ci-dessous pour développer et étend ce processus, mais en espagnol, pour la future référence: github.com/elbaulp/text2digits_es
Vous devez vous connecter pour publier un commentaire.
La majorité de ce code est de mettre en place le numwords dict, qui n'est faite que sur le premier appel.
print text2int("nineteen ninety six") # 115
Si quelqu'un est intéressé, j'ai piraté une version qui conserve le reste de la chaîne (même s'il peut avoir des bugs, n'ai pas testé beaucoup trop).
Exemple:
Il pourrait y avoir des problèmes si vous avez, disons, "de 200$". Mais, c'était vraiment difficile.
Merci pour l'extrait de code... m'a sauvé beaucoup de temps!
J'avais besoin de gérer un couple supplémentaire de l'analyse de cas, tels que l'ordinal de mots ("premier", "deuxième"), la césure des mots ("cent"), et un trait d'union ordinale des mots comme ("cinquante-septième"), donc j'ai ajouté quelques lignes:
hundredth
,thousandth
etc. Utilisationone hundredth
pour obtenir100
!Je viens de sortir un module python pour PyPI appelé word2number pour la fin exacte. https://github.com/akshaynagpal/w2n
Installer à l'aide de:
assurez-vous que votre pip est mis à jour vers la dernière version.
Utilisation:
"1 million"
ou"1M"
. w2n.word_to_num("1 million") renvoie une erreur.J'ai besoin de quelque chose d'un peu différent depuis mon entrée est à partir d'un discours-à-texte de conversion et la solution n'est pas toujours à la somme des chiffres. Par exemple, "mon code postal est l'un deux trois quatre cinq" ne doit pas se convertir à "mon code postal est le 15".
J'ai pris Andrew réponse et modifié pour gérer les quelques autres cas de personnes mis en évidence que les erreurs, et a également ajouté le support pour des exemples tels que le code postal que j'ai mentionné ci-dessus. Certains de base des cas de test sont présentés ci-dessous, mais je suis sûr qu'il ya encore place à l'amélioration.
Quelques tests...
Voici le cas trivial approche:
Ou vous cherchez quelque chose qui peut manipuler "douze mille cent soixante-deux"?
Cela pourrait être facilement être codé en dur dans un dictionnaire si il y a une quantité limitée de numéros que vous souhaitez analyser.
Légèrement pour les cas plus complexes, vous aurez probablement envie de générer ce dictionnaire automatiquement, basée sur le simple nombre de grammaire. Quelque chose le long des lignes de cette (bien sûr, généralisée...)
Si vous avez besoin de quelque chose de plus vaste, il semblerait que vous aurez besoin de traitement de la langue naturelle outils. Cet article pourrait être un bon point de départ.
C'est le c# de la mise en œuvre du code à la 1ère réponse:
Rapide et sale Java port de e_h C# de mise en œuvre (ci-dessus). Il est à noter que le retour double, pas de type int.
Fait de changer de sorte que text2int(à l'échelle) sera de retour de conversion correct. Par exemple, text2int("cent") => 100.
Il y a un ruby gem par Marc Brûle qui fait. J'ai récemment fourche pour ajouter la prise en charge pendant des années. Vous pouvez appeler code ruby de python.
résultats:
"fifteen sixteen"
1516
"eighty five sixteen"
8516
"nineteen ninety six"
1996
"one hundred and seventy nine"
179
"thirteen hundred"
1300
"nine thousand two hundred and ninety seven"
9297
Une solution rapide est l'utilisation de la inflect.py pour générer un dictionnaire de traduction.
inflect.py a un
number_to_words()
fonction, un nombre (par exemple,2
) à la forme du mot (par exemple,'two'
). Malheureusement, son inverse (ce qui vous permettra d'éviter la traduction du dictionnaire de la route) n'est pas offert. Tout de même, vous pouvez utiliser cette fonction pour construire le dictionnaire de traduction:Si vous êtes prêt à commettre un certain temps, il pourrait être possible d'examiner inflect.py's rouages de la
number_to_words()
de la fonction et de construire votre propre code pour le faire dynamiquement (je n'ai pas essayé de le faire).