【问题标题】:How do I use NLTK to extract numbers from a text string in Python如何使用 NLTK 从 Python 中的文本字符串中提取数字
【发布时间】:2020-10-09 10:11:19
【问题描述】:

我最近一直在开发一个程序,我想添加一个功能来接收用户语音,例如“显示我接下来五(或 5)天的日程安排”或类似的内容,然后提取数字“五或 5”作为数字并在代码的不同部分使用它来从谷歌日历请求数据,谷歌部分大部分已完成,但我如何获取它来提取诸如“五”之类的数字或基于字母的数字,我早些时候在环顾四周时发现了这段代码,它只返回真或假,我不知道如何让它返回实际数字,非常感谢您的帮助!

import nltk

text = "Is there a one two three in there?"

def existence_of_numeric_data(text):
    text=nltk.word_tokenize(text)
    pos = nltk.pos_tag(text)
    count = 0
    for i in range(len(pos)):
        word , pos_tag = pos[i]
        if pos_tag == 'CD':
            return True
    return False

print(existence_of_numeric_data(text))

有没有办法让这个版本以整数格式发布数字?比如说

字符串显示“显示我接下来五天的日程安排” 它会将数字“5”作为单独的整数返回

【问题讨论】:

    标签: python numbers integer nltk


    【解决方案1】:

    我找到了一个名为 word2number 的插件(使用 pip 安装),它可以很好地完成工作,这就是你使用它的方式

    from word2number import w2n
    
    text = "There are five days in a week"
    
    print(w2n.word2number(text))
    
    output>>
    5
    

    【讨论】:

      【解决方案2】:

      如果您的文本类似于“包含 1 2 3”,那么您可以简单地执行以下操作:

      for word in text.split():
          if word.isdigit():
              num = int(word)
      

      它应该工作。 但是对于像“包含一二三”这样的文本,您可以制作一个包含以下单词的字典:

      dt = ["one": 1, "two": 2, "three": 3, "four": 4, "five": 5]
      

      然后简单地在给定文本中搜索此列表中的每个单词:

      for words in dt:
          for w in text.split():
              if w == words:
                  num == dt[words]
      

      但只有在字数有限的情况下才可以使用。例如,如果文本包含 20,而您的字典没有 20,那么它将无法工作。

      【讨论】:

      • 这是一个不错的解决方案,但如果它可以告诉任何类型的数字而不必为所有数字手动添加字典,那就太好了,但这可能暂时有效,直到我找到更多结论性的方法,谢谢分享。编辑:这似乎在 Python 中出错,当我放入 DT 列表时出现以下错误“变量注释不能与元组解包结合”
      • 我也已经在使用一种查找常规整数的方法,就是这个:""number = re.search(r'\d+', cmdtext).group()"" 这很好用用于查找和提取整数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多