【问题标题】:How to find a numeric value in a string如何在字符串中查找数值
【发布时间】:2013-02-05 16:38:59
【问题描述】:

我正在尝试创建一个分析文本字符串以查看它是否包含数值的方法。例如,给定以下字符串:

什么是 2 * 2?

我需要确定以下信息:

  • 字符串包含一个数值:True
  • 它包含的数值是多少:2(他们中的任何一个都应该使函数返回 true,我应该将字符串中每个 2 的位置放在一个变量中,例如前 2 的位置 0 )

这是我目前的代码:

Public Function InQuestion(question As String) As Boolean
    ' Possible substring operations using the position of the number in the string?
End Function

【问题讨论】:

  • 如果您有多个问题,您应该在单独的帖子中提问。请让您的问题更具体。例如,对于问题 #1,您是否只是在询问如何搜索字符串以查看它是否包含数值?如果是这样,最好问这样的问题,特别是没有与您的问题真正相关的所有背景细节。另外,请展示您尝试过的方法并解释它是如何不起作用的。
  • 史蒂文我解决了这个问题如果你标记我请撤消它或告诉我问题有什么问题。
  • 我已经编辑了您的问题,让您了解我的意思。如果我有任何错误(例如所需的输出),请修改它。我删除了我的反对票。
  • 我是对的吗,鉴于该输入,您需要获取值2?还是您需要整个表达式2 * 2
  • 从字符串中获取数学表达式然后求解该表达式是两个完全不同的任务。在尝试解决第二个问题之前,我会担心解决第一个问题。我对人工智能知之甚少,所以很遗憾,我无法进一步帮助您。如果您可以开发一些简单的规则,您可能会使用 RegEx 来提取表达式,但除此之外,您基本上将处理自然语言处理,这是一个更复杂的命题。

标签: vb.net artificial-intelligence information-retrieval information-extraction


【解决方案1】:

这是一个控制台应用程序示例:

Module Module1
    Sub Main()
        Dim results As List(Of NumericValue) = GetNumericValues("What is 2 * 2?")
        For Each i As NumericValue In results
            Console.WriteLine("{0}: {1}", i.Position, i.Value)
        Next
        Console.ReadKey()
    End Sub

    Public Class NumericValue
        Public Sub New(value As Decimal, position As Integer)
            Me.Value = value
            Me.Position = position
        End Sub

        Public Property Value As Decimal
        Public Property Position As Integer
    End Class

    Public Function GetNumericValues(data As String) As List(Of NumericValue)
        Dim values As New List(Of NumericValue)()
        Dim wordDelimiters() As Char = New Char() {" "c, "*"c, "?"c}
        Dim position As Integer = 0
        For Each word As String In data.Split(wordDelimiters, StringSplitOptions.None)
            Dim value As Decimal
            If Decimal.TryParse(word, value) Then
                values.Add(New NumericValue(value, position))
            End If
            position += word.Length + 1
        Next
        Return values
    End Function
End Module

如您所见,它传递了字符串“什么是 2 * 2?”并输出每个数值的位置和值:

8:2

12:2

【讨论】:

  • 谢谢史蒂文。我有地方可以按照您编写代码的方式尝试您的代码并标记为 1,因为答案很有帮助。
  • 它有效,谢谢!也许我可以使用 Visual Studio 中的一些内置函数来回答代数函数。
  • 我在修订版中添加了一些带有正则表达式的代码,以添加简单的运算符,例如 *、/、+ 和 - 用于解决简单的数学问题,它可以工作!对于代数或混合类型的情况,我可能需要做一些不同的事情,例如:什么是 2*2 + 2?
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多