【问题标题】:How to convert digits in a string into words using Python NLTK?如何使用 Python NLTK 将字符串中的数字转换为单词?
【发布时间】:2017-09-12 14:45:53
【问题描述】:

我正在尝试编写一个函数:

  • 将字符串作为输入
  • 检查是否有数字
  • 将数字转换为单词

例如,“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'

我做错了什么?

【问题讨论】:

  • 这个怎么样:pastebin.com/WwFCjYtt
  • 使用try int(w) ... except ... 而不是if int(w) ... else ...

标签: python nlp nltk tokenize


【解决方案1】:

这里的主要问题是int() 不是一个谓词函数——你期望它像isInt() 一样工作,但实际上它会尝试将你传递的值转换为一个int。

“Hello”,当然不能将序列中的第一个标记转换为 int,因此,调用 int("Hello") 会产生 ValueError,表明“Hello”可能不是 base-10 数字.

你应该看看其他测试字符串是否类似于数字的方法。最直接的方法是在 try/catch 块中执行该转换,允许您识别 ValueError 并在发现字符串不是数字时安全地继续。

另一种方法是使用正则表达式来识别字符串是否类似于数字。正则表达式^\d+$ 适用于整数。如果字符串与该表达式匹配,则该字符串仅由数字组成,可以传递给num2words

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2020-11-21
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2018-01-05
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多