我正在尝试编写一个函数,该函数将:
- 将字符串作为输入
- 检查其中是否有数字
- 将数字转换为单词
例如,“Hello 5, 123”将转换为“Hello 5, 123”。
我的代码是: 从 nltk.corpus 导入停用词 从 nltk.tokenize 导入 word_tokenize 从 num2words 导入 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'
我做错了什么?
最佳答案
这里的主要问题是 int()
不是一个谓词函数 - 你期望它像 isInt()
一样工作,当它实际上会尝试将您传递的值转换为 int。
“Hello”,序列中的第一个标记当然无法转换为 int,因此,调用 int("Hello")
会产生 ValueError
,表明“Hello”可能不是一个以 10 为基数的数字。
您应该考虑其他方法来测试字符串是否类似于数字。最简单的方法是在 try/catch block 中执行该转换,这样您就可以识别 ValueError,并在发现字符串不是数字时安全地继续。
另一种方法是使用正则表达式来识别字符串是否类似于数字。正则表达式 ^\d+$
适用于整数。如果字符串与该表达式匹配,则该字符串仅由数字组成,可以传递给 num2words
。
关于python - 如何使用 Python NLTK 将字符串中的数字转换为单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443754/