2017-04-17 41 views
1

我試圖寫一個函數,將:如果如果在它 如何使用Python NLTK將字符串中的數字轉換爲單詞?

  • 轉換數字任何數字變成文字
  • 對於

    • 字符串作爲輸入
    • 檢查例如,「你好5,123」將被轉換爲「你好五,一百二十三」。

      我的代碼是: 從num2words nltk.corpus進口停用詞 從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

    使用'try int(w)...除了...'而不是'if int(w)... else ...' – alvas

    回答

    1

    這裏的主要問題是,int()不是一個謂詞函數 - 你期望它的工作方式就像isInt()一樣,當它實際上會試圖將你傳遞的值轉換爲int。

    「Hello」,當然序列當中的第一個標記不能轉換爲int,因此,調用int("Hello")會產生一個ValueError,表示「Hello」可能不是基數爲10的數字。

    如果字符串類似數字,您應該查看其他測試方法。最直接的做法是在try/catch塊中執行該轉換,從而允許您識別ValueError,並在發現該字符串不是數字時安全地繼續。

    另一種方法是使用正則表達式來識別字符串是否像數字一樣。正則表達式^\d+$可用於整數。如果字符串匹配該表達式,則該字符串僅由數字組成,並且可以傳遞給num2words

    相關問題