给定一条线,例如
1磅牛肉
我想提取成分。最初我只对成分名称感兴趣。
我看过 rubys 著名的时间解析器 Chronic 并且喜欢它对正则表达式的使用。
def self.scan_for_month_names(token)
scanner = {/^jan\.?(uary)?$/ => :january,
/^feb\.?(ruary)?$/ => :february,
/^mar\.?(ch)?$/ => :march,
/^apr\.?(il)?$/ => :april,
/^may$/ => :may,
/^jun\.?e?$/ => :june,
/^jul\.?y?$/ => :july,
/^aug\.?(ust)?$/ => :august,
/^sep\.?(tember)?$/ => :september,
/^oct\.?(ober)?$/ => :october,
/^nov\.?(ember)?$/ => :november,
/^dec\.?(ember)?$/ => :december}
scanner.keys.each do |scanner_item|
return Chronic::RepeaterMonthName.new(scanner[scanner_item]) if scanner_item =~ token.word
end
return nil
结尾
但是在我的情况下,Id 可能必须为每种单独的成分创建 300 多个正则表达式。
我还必须考虑香菜和芫荽叶等同义词
我以前从未做过解析,但在这里使用正则表达式仍然是最好的方法。我想不出任何其他合理的选择。