2017-04-17 10 views
1

は私がする関数を記述しようとしています例えば、 "Hello 5、123"は "Hello five、123"に変換されます。Python NLTKを使って文字列の数字を単語に変換するには?言葉</li> </ul> <p>の場合にそれ</li> <li>変換桁の任意の数字がある場合場合</p> <ul> <li>が</li> <li>チェック入力として文字列を取る:

私が持っているコードは次のとおりです。nltk.corpus輸入ストップワードから num2wordsからnltk.tokenize輸入word_tokenize からnum2wordsをインポート

def conv_mytext(text, **keyword_parameters): 
    if('convert_digits' in keyword_parameters): 
    word_tokens = word_tokenize(text) 
    for w in word_tokens: 
     if int(w): 
      word_tokens[w] = num2words(w) 
     else: 
      continue 
    return text 

私はこのエラーを取得しています:

ValueError: invalid literal for int() with base 10: 'Hello' 

何私は間違っている?

+0

どうすればいいですか:https://pastebin.com/WwFCjYtt? – alvas

+0

'int(w)... else ...'の代わりに 'try int(w)... except ...'を使う – alvas

答えて

1

ここでの主な問題は、int()が述語関数ではないことです。実際に渡した値をintに変換しようとすると、isInt()のように動作することが予想されます。

"Hello"、あなたのシーケンスの最初のトークンはintに変換できないため、int("Hello")を呼び出すとValueErrorが生成され、 "Hello"はおそらくベース10の番号ではないことが示されます。

文字列が数字のような場合は、他のテスト方法を検討する必要があります。 try/catchブロックでその変換を実行するのが最も簡単で、ValueErrorを識別し、文字列が数字ではないことがわかったら安全に移動できます。

正規表現を使用して、文字列が数字であるかどうかを識別することもできます。正規表現^\d+$は整数のために働きます。文字列がその式に一致する場合、その文字列は数字だけで構成され、num2wordsに渡すことができます。

関連する問題