Lingua :: EN :: FindNumber numify添加找到的英文数字

时间:2011-10-04 15:53:07

标签: regex perl

我一直在寻找一种将英语数字转换为整数的方法,并在这里发现了一篇很棒的帖子:Scalable Regex for English Numerals它正在使用perl。我使用numify的问题源于“将”数字“加”在一起而不仅仅是输出它们的方法。例如:

#!/usr/bin/perl
use strict;
use warnings;
use Lingua::EN::FindNumber;
print numify("some text and stuff house bill forty three twenty");

产生 63 而不是我预期 43 20

我不知所措,是如何解决这个问题的perl新手。是否有一个覆盖,我可以以某种方式告诉方法不做添加?我唯一猜测的是它只是简单地连接字符串及其整数,所以它会添加它们?即使知道仍然遗憾地没有帮助我。感谢知道的任何人。

2 个答案:

答案 0 :(得分:1)

我认为你的问题与如何解释数字的模糊定义有关。

如果numify只检查表示序列中数字的单词并添加它们,那么你无法克服这个问题。你可以尝试实现自己的语法,但我不认为这完全是微不足道的。

您必须抓住代表数字的第一个单词,然后检查以下单词,并尝试找到与您的规则匹配的内容。例如,在“四十”之后,你可以得到一个从1到9(一,二等等),或“千”,或......“数百万”的数字......我想你明白了,在这种情况下,你得到“三”,所以...加起来,下一个单词是二十,这与上面的任何规则都不匹配,所以重新开始作为一个新的数字。

很抱歉,如果这看起来像是在大声思考。不知道是否有一个可以为你做这个的库,这是一个模糊的问题,就像你正在解析自然语言一样。

希望它有所帮助!

答案 1 :(得分:0)

我认为Lingua :: EN :: FindNumber中的解析器对它所认为的数字有点宽松,所以例如“三二十”,“三二十”甚至“四十三二十”为有效数字。就此而言,看the source,它似乎也接受“baker's打”,“十一一”和“billiard”作为数字...