我需要使用Perl从文本块中提取名称(包括不常见的名称)。我已经查看了this模块来提取名称,但它只有美国前1000名流行的名字和姓氏,可以追溯到1990年;我需要一些更全面的东西。
我考虑使用社会保障指数制作一个数据库进行比较,但这似乎非常繁琐且处理密集。有没有办法使用其他方法从Perl中提取名称?
要解析的文本示例:
LADNIER
路易斯·安东尼·拉尼尔,[路易] 48岁,来自阿拉巴马州莫比尔,于2012年11月16日星期五在家中去世。
路易出生于1964年1月9日在阿拉巴马州莫比尔市。他是John E. Ladnier,Sr。和Gloria Bosarge Ladnier的儿子。他毕业于麦吉尔 - 托伦高中,并就读于南阿拉巴马大学。他在医疗退休之前一直受雇于Bayou La Batre警察局的公共监督员。他在他的父亲约翰死前。他的母亲,格洛丽亚,侄子,多米尼克拉尼尔和克里斯蒂安卢比奥幸存下来,他喜欢并帮助抚养他们自己的儿子,姐妹,Marj Ladnier和Morgan Gordy [Julian],以及兄弟Eddie Ladnier [Cindy]和侄子,Jamie,乔伊,艾迪,威尔,本和侄女,安娜和伊丽莎白。周三下午1点将在移动的圣多米尼克天主教堂举行纪念仪式。
Serenity Funeral Home负责安排。
代替鲜花,纪念品可以送到St. Dominic School,4160 Burma Road Mobile,AL 36693,Christian Luio和McGill-Toolen高中教育基金,1501 Old Shell Road Mobile,AL 36604,教育基金对于Dominic Ladnier。
在此期间,家人对所有的祈祷和支持表示感谢。路易是我们所有人的摇滚和欢乐。
答案 0 :(得分:2)
使用斯坦福大学的NER(GPL)。演示:
答案 1 :(得分:1)
由于英语的性质,没有确定的方法可以做到这一点。您需要列表(模糊)与之比较,或者必须满足于显着的准确性惩罚。
答案 2 :(得分:1)
Apache基金会有一些项目涉及实体提取主题,使用特定的预先训练的英文名称模型(nameFinder)。我推荐openLNP或Stanbol。在此期间,如果您只有几个查询,我会在http://www.augmentedintel.com/apps/csharpnlp/extract-names-from-text.aspx的应用部分中使用C#实现NLP。
最佳,
唐
答案 3 :(得分:0)
您正在尝试实施named-entity recognition。坏消息是,真的很难。 不过,您可以尝试Lingua::EN::NamedEntity:
$ perl -MLingua::EN::NamedEntity -nE 'say $_ for map { $_->{class} eq "person" ? $_->{entity} : () } extract_entities($_)' names.txt
Louie
Louis Anthony Ladnier
Louie
John E
Bayou La Batre Police Department
Gloria
Julian
Cindy
Eddie Ladnier
Eddie
John
Catholic Church
Christian Rubio
Dominic Ladnier
Burma Road Mobile
Louie
您还可以使用路透社网络服务Calais进行自然语言处理,从而提供更好的结果:
答案 4 :(得分:0)
我认为你想要谷歌这样的东西:
perl part of speech tagging