gpt4 book ai didi

python - 构建一个能够使用 PyParse 解析不同日期格式的简单解析器

转载 作者:行者123 更新时间:2023-11-28 22:45:50 25 4
gpt4 key购买 nike

我正在构建一个简单的解析器,它接受如下查询:'显示 fizi 从 1/1/2010 到 11/2/2006 的提交'到目前为止,我有:

class QueryParser(object):

def parser(self, stmnt):

keywords = ["select", "from","to", "show","commits", "where", "group by", "order by", "and", "or"]
[select, _from, _to, show, commits, where, groupby, orderby, _and, _or] = [ CaselessKeyword(word) for word in keywords ]

user = Word(alphas+"."+alphas)
user2 = Combine(user + "'s")

startdate=self.getdate()
enddate=self.getdate()

bnf = (show|select)+(user|user2).setResultsName("user")+(commits).setResultsName("stats")\
+Optional(_from+startdate.setResultsName("start")+_to+enddate.setResultsName("end"))

a = bnf.parseString(stmnt)
return a

def getdate(self):
integer = Word(nums).setParseAction(lambda t: int(t[0]))
date = Combine(integer('year') + '/' + integer('month') + '/' + integer('day'))
#date.setParseAction(self.convertToDatetime)
return date

我希望日期更通用。这意味着用户可以提供 2010 年 1 月 20 日或其他日期格式。我在网上找到了一个很好的日期解析,它正是这样做的。它将日期作为字符串,然后对其进行解析。所以我剩下的就是为该函数提供我从解析器获得的日期字符串。我如何着手标记和捕获两个日期字符串。现在它只捕获格式 'y/m/d' 格式。有没有办法只获取整个字符串,而不管其格式如何。诸如在关键字和之后捕获单词之类的东西。非常感谢任何帮助。

最佳答案

一个简单的方法是要求引用日期。一个粗略的例子是这样的,但如果需要的话,你需要调整以适应你当前的语法:

from pyparsing import CaselessKeyword, quotedString, removeQuotes
from dateutil.parser import parse as parse_date

dp = (
CaselessKeyword('from') + quotedString.setParseAction(removeQuotes)('from') +
CaselessKeyword('to') + quotedString.setParseAction(removeQuotes)('to')
)

res = dp.parseString('from "jan 20" to "apr 5"')
from_date = parse_date(res['from'])
to_date = parse_date(res['to'])
# from_date, to_date == (datetime.datetime(2015, 1, 20, 0, 0), datetime.datetime(2015, 4, 5, 0, 0))

关于python - 构建一个能够使用 PyParse 解析不同日期格式的简单解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28113532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com