从文本中提取与年龄相关的信息

时间:2015-04-10 23:45:09

标签: python regex nlp

我试图在用户在互联网上发布的大量数据集中找到年龄的提及(存储在.csv中)

我目前在python中使用正则表达式来提取年龄并将其保存在列表中

例如,     “我20岁”将返回20名     “他现在30岁”将回归30岁     “她五十多岁”将回归50岁

但问题是,对于庞大的数据集,使用RE非常慢,如果文本处于我的RE不满意的模式中,那么我就无法得到年龄......所以,我的问题是:有没有更好的方法这样做?也许是python中的一些NLP包/工具? 我试着研究nltk是否有这方面的东西,但它没有。

ps:对不起,如果问题不清楚,英语不是我的第一语言..    我已经包含了下面使用的一些RE ..

m = re.search(r'.*(I|He|She) (is|am) ([0-9]{2}).*',s,re.IGNORECASE)
n = re.search(r'.*(I|He|She) (is|am) in (my|his|her) (late|mid|early)? ?(tens|twenties|thirties|forties|fifties|sixties|seventies|eighties|nineties|hundreds).*',s,re.IGNORECASE)
o = re.search(r'.*(I|He|She) (is|am) (twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen) ?(one|two|three|four|five|six|seven|eight|nine)?.*',s,re.IGNORECASE)
p = re.search(r'.*(age|is|@|was) ([0-9]{2}).*',s,re.IGNORECASE)
q = re.search(r'.*(age|is|@|was) (twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen) ?(one|two|three|four|five|six|seven|eight|nine)?.*',s,re.IGNORECASE)
r = re.search(r'.*([0-9]{2}) (yrs|years).*',s,re.IGNORECASE)
s = re.search(r'.*(twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen) ?(one|two|three|four|five|six|seven|eight|nine)? (yrs|years).*',s,re.IGNORECASE)

2 个答案:

答案 0 :(得分:1)

我想建议您训练一个具有三个多类分类器/头的神经网络,以预测对应于个位、十位和百位的三位数字。

答案 1 :(得分:0)

请参见Extracting a person's age from unstructured text in Python,尤其是有关使用Allen NLP的答案,这似乎正是您要的。